summaryrefslogtreecommitdiffstats
path: root/xorg-xserver
diff options
context:
space:
mode:
authorTreeve Jelbert2016-02-09 13:27:50 +0100
committerTreeve Jelbert2016-02-09 13:27:50 +0100
commit20eea2a113e932d708053a99d77815cc450529ef (patch)
tree647b36856cd8c5a02bbfe958cf9a6c7687bdf903 /xorg-xserver
parent68ae8a611614199a07c2a7a5252d9db79bc4e79f (diff)
xorg-server - upstream patches
Diffstat (limited to 'xorg-xserver')
-rw-r--r--xorg-xserver/xorg-server/Add-hybrid-full-size-empty-clip-mode-to-SetRootClip.patch138
-rwxr-xr-xxorg-xserver/xorg-server/DETAILS2
-rw-r--r--xorg-xserver/xorg-server/HISTORY4
-rwxr-xr-xxorg-xserver/xorg-server/PRE_BUILD4
-rw-r--r--xorg-xserver/xorg-server/xwayland-fix-a-crash-on-output-removal.patch12
5 files changed, 158 insertions, 2 deletions
diff --git a/xorg-xserver/xorg-server/Add-hybrid-full-size-empty-clip-mode-to-SetRootClip.patch b/xorg-xserver/xorg-server/Add-hybrid-full-size-empty-clip-mode-to-SetRootClip.patch
new file mode 100644
index 0000000000..8c3974816a
--- /dev/null
+++ b/xorg-xserver/xorg-server/Add-hybrid-full-size-empty-clip-mode-to-SetRootClip.patch
@@ -0,0 +1,138 @@
+diff --git a/dix/window.c b/dix/window.c
+index 25d29ec..9726ade 100644
+--- a/dix/window.c
++++ b/dix/window.c
+@@ -3647,7 +3647,7 @@ WindowParentHasDeviceCursor(WindowPtr pWin,
+ * all of the windows
+ */
+ void
+-SetRootClip(ScreenPtr pScreen, Bool enable)
++SetRootClip(ScreenPtr pScreen, int enable)
+ {
+ WindowPtr pWin = pScreen->root;
+ WindowPtr pChild;
+@@ -3655,6 +3655,7 @@ SetRootClip(ScreenPtr pScreen, Bool enable)
+ Bool anyMarked = FALSE;
+ WindowPtr pLayerWin;
+ BoxRec box;
++ enum RootClipMode mode = enable;
+
+ if (!pWin)
+ return;
+@@ -3684,18 +3685,23 @@ SetRootClip(ScreenPtr pScreen, Bool enable)
+ * that assume the root borderClip can't change well, normally
+ * it doesn't...)
+ */
+- if (enable) {
++ if (mode != ROOT_SIZE_NONE) {
++ pWin->drawable.width = pScreen->width;
++ pWin->drawable.height = pScreen->height;
++
+ box.x1 = 0;
+ box.y1 = 0;
+ box.x2 = pScreen->width;
+ box.y2 = pScreen->height;
++
+ RegionInit(&pWin->winSize, &box, 1);
+ RegionInit(&pWin->borderSize, &box, 1);
+- if (WasViewable)
+- RegionReset(&pWin->borderClip, &box);
+- pWin->drawable.width = pScreen->width;
+- pWin->drawable.height = pScreen->height;
+ RegionBreak(&pWin->clipList);
++
++ if (WasViewable && mode == ROOT_SIZE_SCREEN)
++ RegionReset(&pWin->borderClip, &box);
++ else
++ RegionEmpty(&pWin->borderClip);
+ }
+ else {
+ RegionEmpty(&pWin->borderClip);
+diff --git a/hw/xwayland/xwayland-glamor.c b/hw/xwayland/xwayland-glamor.c
+index 7f6fb9a..5557818 100644
+--- a/hw/xwayland/xwayland-glamor.c
++++ b/hw/xwayland/xwayland-glamor.c
+@@ -236,7 +236,7 @@ xwl_glamor_create_screen_resources(ScreenPtr screen)
+ if (xwl_screen->rootless) {
+ screen->devPrivate =
+ fbCreatePixmap(screen, 0, 0, screen->rootDepth, 0);
+- SetRootClip(screen, FALSE);
++ SetRootClip(screen, ROOT_SIZE_SCREEN_EMPTY);
+ }
+ else {
+ screen->devPrivate =
+diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
+index e9ec190..f5c7194 100644
+--- a/hw/xwayland/xwayland-output.c
++++ b/hw/xwayland/xwayland-output.c
+@@ -164,8 +164,7 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height)
+ struct xwl_screen *xwl_screen = xwl_output->xwl_screen;
+ double mmpd;
+
+- if (!xwl_screen->rootless)
+- SetRootClip(xwl_screen->screen, FALSE);
++ SetRootClip(xwl_screen->screen, FALSE);
+
+ xwl_screen->width = width;
+ xwl_screen->height = height;
+@@ -181,6 +180,11 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height)
+ xwl_screen->screen->mmHeight = height * mmpd;
+ }
+
++ if (xwl_screen->rootless)
++ SetRootClip(xwl_screen->screen, ROOT_SIZE_SCREEN_EMPTY);
++ else
++ SetRootClip(xwl_screen->screen, ROOT_SIZE_SCREEN);
++
+ if (xwl_screen->screen->root) {
+ xwl_screen->screen->root->drawable.width = width;
+ xwl_screen->screen->root->drawable.height = height;
+@@ -188,9 +192,6 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height)
+ }
+
+ update_desktop_dimensions();
+-
+- if (!xwl_screen->rootless)
+- SetRootClip(xwl_screen->screen, TRUE);
+ }
+
+ static void
+diff --git a/hw/xwayland/xwayland-shm.c b/hw/xwayland/xwayland-shm.c
+index 7072be4..2fbe74d 100644
+--- a/hw/xwayland/xwayland-shm.c
++++ b/hw/xwayland/xwayland-shm.c
+@@ -282,7 +282,7 @@ xwl_shm_create_screen_resources(ScreenPtr screen)
+ if (xwl_screen->rootless) {
+ screen->devPrivate =
+ fbCreatePixmap(screen, 0, 0, screen->rootDepth, 0);
+- SetRootClip(screen, FALSE);
++ SetRootClip(screen, ROOT_SIZE_SCREEN_EMPTY);
+ }
+ else
+ screen->devPrivate =
+diff --git a/include/window.h b/include/window.h
+index f13ed51..67c9f10 100644
+--- a/include/window.h
++++ b/include/window.h
+@@ -72,6 +72,12 @@ struct _Cursor;
+ typedef struct _BackingStore *BackingStorePtr;
+ typedef struct _Window *WindowPtr;
+
++enum RootClipMode {
++ ROOT_SIZE_NONE = 0, /**< resize the root window to 0x0 */
++ ROOT_SIZE_SCREEN = 1, /**< resize the root window to fit screen */
++ ROOT_SIZE_SCREEN_EMPTY = 2, /**< as above, but empty clip */
++};
++
+ typedef int (*VisitWindowProcPtr) (WindowPtr pWin,
+ void *data);
+
+@@ -221,7 +227,7 @@ extern _X_EXPORT RegionPtr CreateBoundingShape(WindowPtr /* pWin */ );
+
+ extern _X_EXPORT RegionPtr CreateClipShape(WindowPtr /* pWin */ );
+
+-extern _X_EXPORT void SetRootClip(ScreenPtr pScreen, Bool enable);
++extern _X_EXPORT void SetRootClip(ScreenPtr pScreen, int enable);
+ extern _X_EXPORT void PrintWindowTree(void);
+ extern _X_EXPORT void PrintPassiveGrabs(void);
+
diff --git a/xorg-xserver/xorg-server/DETAILS b/xorg-xserver/xorg-server/DETAILS
index e86208d39e..e0b753e92e 100755
--- a/xorg-xserver/xorg-server/DETAILS
+++ b/xorg-xserver/xorg-server/DETAILS
@@ -9,7 +9,7 @@
ENTERED=20051125
LICENSE[0]=XCL
SECURITY_PATCH=10
- PATCHLEVEL=0
+ PATCHLEVEL=1
SHORT="X servers (including Xorg, Xprt, Xvfb, Xnest & Xdmx)"
cat << EOF
X servers (including Xorg, Xprt, Xvfb, Xnest & Xdmx), the core of the X
diff --git a/xorg-xserver/xorg-server/HISTORY b/xorg-xserver/xorg-server/HISTORY
index d78fd72aea..c64bb1210a 100644
--- a/xorg-xserver/xorg-server/HISTORY
+++ b/xorg-xserver/xorg-server/HISTORY
@@ -1,7 +1,11 @@
2016-02-09 Treeve Jelbert <treeve@sourcemage.org>
* DETAILS: 1.18.1
+ PATCHLEVEL=1
* UP_TRIGGERS: improve it
* CONFIGURE: remove obsolete option
+ * PRE_BUILD: apply upstream patches
+ * xwayland-fix-a-crash-on-output-removal.patch: added
+ * Add-hybrid-full-size-empty-clip-mode-to-SetRootClip.patch: added
2015-11-10 Treeve Jelbert <treeve@sourcemage.org>
* DETAILS: 1.18.0
diff --git a/xorg-xserver/xorg-server/PRE_BUILD b/xorg-xserver/xorg-server/PRE_BUILD
index 710034f1f2..98db5d4a6f 100755
--- a/xorg-xserver/xorg-server/PRE_BUILD
+++ b/xorg-xserver/xorg-server/PRE_BUILD
@@ -2,4 +2,6 @@ default_pre_build &&
# required to build
glselect mesa &&
cd "$SOURCE_DIRECTORY" &&
-patch -p1 < $SPELL_DIRECTORY/gl_select.patch
+patch -p1 < $SPELL_DIRECTORY/gl_select.patch &&
+patch -p1 < $SPELL_DIRECTORY/xwayland-fix-a-crash-on-output-removal.patch &&
+patch -p1 < $SPELL_DIRECTORY/Add-hybrid-full-size-empty-clip-mode-to-SetRootClip.patch
diff --git a/xorg-xserver/xorg-server/xwayland-fix-a-crash-on-output-removal.patch b/xorg-xserver/xorg-server/xwayland-fix-a-crash-on-output-removal.patch
new file mode 100644
index 0000000000..612189c13f
--- /dev/null
+++ b/xorg-xserver/xorg-server/xwayland-fix-a-crash-on-output-removal.patch
@@ -0,0 +1,12 @@
+diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
+index e9ec190..abb73ab 100644
+--- a/hw/xwayland/xwayland-output.c
++++ b/hw/xwayland/xwayland-output.c
+@@ -298,6 +298,7 @@ xwl_output_destroy(struct xwl_output *xwl_output)
+
+ wl_output_destroy(xwl_output->output);
+ xorg_list_del(&xwl_output->link);
++ RRCrtcDestroy(xwl_output->randr_crtc);
+ RROutputDestroy(xwl_output->randr_output);
+
+ xorg_list_for_each_entry(it, &xwl_screen->output_list, link)