aboutsummaryrefslogtreecommitdiff
path: root/debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch')
-rw-r--r--debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch193
1 files changed, 0 insertions, 193 deletions
diff --git a/debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch b/debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch
deleted file mode 100644
index 319f6ed3b..000000000
--- a/debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch
+++ /dev/null
@@ -1,193 +0,0 @@
-Description: Fix nxagent/x2goagent With New LibCairo (>1.12.1)
- Quoting two postings of Jim Burnes <jvburnes@gmail.com> on x2go-dev ML:
-
- I don't know what the current patch status is for fixing nxagent with the
- new libcairo (1.12.1+ I believe), but eventually I got tired of waiting and
- created my own patches for nxagent/x2goagent.
-
- Most of the fixes were required because the render extension now allows
- (and libcairo uses) null source drawables (for gradients etc), null masks
- and null mask drawables.
-
- This change creates a bit of a logic mess in the code. Previous patches
- to the code tried to account for all of the possibilities, but fell a
- little short.
-
- Consider this an alpha-quality patch. I've only tested it in KDE while
- running GTK applications. All my favorite GTK apps like Firefox, Emacs,
- rox-filer and all my other GTK apps that were broken are now working just
- fine. (Though I'm getting only the standard GTK look and feel - don't know
- if that's caused by anything I've done.)
-
- Could someone test this under Gnome?
-
- Also, since I'm not primarily an X software engineer I'd like a specialist
- to take a look at it. The fix is a little crude. I just attached to the
- x2goagent process and fixed the lines that caused segfaults. (About 10 of
- them).
-
- I also rewrote one of the macros in Pixels.h into a local subroutine in
- Render.c. It had a bug in it and complex macro bugs are a PITA to debug in
- gdb (or anything else really). The macro is only used in one place and
- although the code in the macro is called pretty often, it's very likely
- that the compiler would inline it anyway. The rewrite increases
- readability by a large factor.
-
- A better patch could be created by someone that understands nxagent and X
- much better. The render extension code receives render ops from X client
- programs. The render ops can contain any combination of picture source,
- picture destination and picture mask. It's apparently legal to send render
- ops with combinations of null picture source drawables, picture masks and
- picture mask drawables. A better way to patch this would be to simply
- perform a return on all the illegal combinations of null parameters for the
- render ops. That way you wouldn't have to keep re-checking the parameter
- values.
-
- So anyway, here it is. I appreciate it if someone out there would test it
- and let me know. Also if anyone knows of the X docs which discuss null
- picture sources and masks in the render extension I'd be glad to create a
- cleaner patch that conforms to the stands.
-
-
- You can reproduce the issue by running any recent copy of x2go/nxagent and
- start any program that uses very recent versions of libCairo. Things
- started breaking for both ArchLinux and Debian SID users about 3 weeks ago.
-
- The issues started with versions of libCairo >= libcairo2_1.12.0-2_amd64
- (debian packages of course). These versions of Cairo seem to use null
- parameters in render ops a lot. Users of recent GTK environments would
- have the startup process just crash. KDE sessions start and run fine until
- you start a gtk app.
-Forwarded: pending
-Author: Jim Burnes <jvburnes@gmail.com>
-Last-Update: 2012-05-11
---- a/nx-X11/programs/Xserver/hw/nxagent/Render.c
-+++ b/nx-X11/programs/Xserver/hw/nxagent/Render.c
-@@ -995,6 +995,36 @@
- #endif
- }
-
-+
-+int nxagentShouldDeferComposite(PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst)
-+{
-+
-+int drawableDst;
-+int linkDeferred;
-+int unSyncedSrcMask;
-+
-+ drawableDst = ( nxagentRenderVersionMajor == 0 &&
-+ nxagentRenderVersionMinor == 8 &&
-+ (pDst) -> pDrawable -> type == DRAWABLE_PIXMAP
-+ );
-+
-+ linkDeferred = ( nxagentOption(DeferLevel) >= 2 &&
-+ nxagentOption(LinkType) < LINK_TYPE_ADSL
-+ );
-+
-+ unSyncedSrcMask = ( nxagentOption(DeferLevel) == 1 &&
-+ (pDst) -> pDrawable -> type == DRAWABLE_PIXMAP &&
-+ (
-+ (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)) ||
-+ ((pMask) && pMask -> pDrawable && (nxagentDrawableStatus((pMask) -> pDrawable) == NotSynchronized))
-+ )
-+ );
-+
-+
-+ return drawableDst || linkDeferred || unSyncedSrcMask;
-+}
-+
-+
- void nxagentComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
- INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst,
- INT16 yDst, CARD16 width, CARD16 height)
-@@ -1036,8 +1066,8 @@
- }
-
- #endif
--
-- if (NXAGENT_SHOULD_DEFER_COMPOSITE(pSrc, pMask, pDst))
-+ /* if (NXAGENT_SHOULD_DEFER_COMPOSITE(pSrc, pMask, pDst)) */
-+ if (nxagentShouldDeferComposite(pSrc, pMask, pDst))
- {
- pDstRegion = nxagentCreateRegion(pDst -> pDrawable, NULL, xDst, yDst, width, height);
-
-@@ -1095,7 +1125,8 @@
- }
- }
-
-- if (pMask != NULL && pMask -> pDrawable != pSrc -> pDrawable &&
-+ if ((pMask) && (pMask->pDrawable) &&
-+ pMask -> pDrawable != pSrc -> pDrawable &&
- pMask -> pDrawable != pDst -> pDrawable)
- {
- nxagentSynchronizeShmPixmap(pMask -> pDrawable, xMask, yMask, width, height);
-@@ -1259,7 +1290,7 @@
- * on the real X server.
- */
-
-- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
-+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
- {
- #ifdef TEST
- fprintf(stderr, "nxagentGlyphs: Synchronizing source [%s] at [%p].\n",
-@@ -1302,14 +1333,15 @@
- nxagentSynchronizeBox(pSrc -> pDrawable, &glyphBox, NEVER_BREAK);
- }
-
-- if (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP)
-+ if (pSrc -> pDrawable && (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP))
- {
- nxagentIncreasePixmapUsageCounter((PixmapPtr) pSrc -> pDrawable);
- }
- }
-
-- if (pSrc -> pDrawable != pDst -> pDrawable &&
-- nxagentDrawableStatus(pDst -> pDrawable) == NotSynchronized)
-+
-+ if (pSrc -> pDrawable && (pSrc -> pDrawable != pDst -> pDrawable &&
-+ nxagentDrawableStatus(pDst -> pDrawable) == NotSynchronized))
- {
- #ifdef TEST
- fprintf(stderr, "nxagentGlyphs: Synchronizing destination [%s] at [%p].\n",
-@@ -1749,7 +1781,9 @@
- return;
- }
-
-- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
-+ /* the following blocks need fixing to ignore null values of pDrawable */
-+
-+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
- {
- #ifdef TEST
- fprintf(stderr, "nxagentTrapezoids: Going to synchronize the source drawable at [%p].\n",
-@@ -1843,7 +1877,9 @@
- * operation like nxagentTrapezoids() does.
- */
-
-- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
-+
-+
-+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
- {
- #ifdef TEST
- fprintf(stderr, "nxagentTriangles: Going to synchronize the source drawable at [%p].\n",
-@@ -1920,7 +1956,8 @@
- * operation like nxagentTrapezoids() does.
- */
-
-- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
-+
-+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
- {
- #ifdef TEST
- fprintf(stderr, "nxagentTriStrip: Going to synchronize the source drawable at [%p].\n",
-@@ -1997,7 +2034,8 @@
- * operation like nxagentTrapezoids() does.
- */
-
-- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
-+
-+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
- {
- #ifdef TEST
- fprintf(stderr, "nxagentTriFan: Going to synchronize the source drawable at [%p].\n",