diff options
author | Treeve Jelbert | 2016-02-09 13:27:50 +0100 |
---|---|---|
committer | Treeve Jelbert | 2016-02-09 13:27:50 +0100 |
commit | 20eea2a113e932d708053a99d77815cc450529ef (patch) | |
tree | 647b36856cd8c5a02bbfe958cf9a6c7687bdf903 /xorg-xserver | |
parent | 68ae8a611614199a07c2a7a5252d9db79bc4e79f (diff) |
xorg-server - upstream patches
Diffstat (limited to 'xorg-xserver')
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) |