204 lines
6.3 KiB
Diff
204 lines
6.3 KiB
Diff
|
|
From 5e200188e783123842b45070a15096262e96f604 Mon Sep 17 00:00:00 2001
|
|||
|
|
From: fvogel <fvogelnew1@free.fr>
|
|||
|
|
Date: Wed, 17 Jan 2018 07:18:37 +0000
|
|||
|
|
Subject: [PATCH 115/693] More complete patch from Christian Werner to fix
|
|||
|
|
[1821174fff] and [1938774fff]
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
unix/tkUnixColor.c | 1 +
|
|||
|
|
unix/tkUnixEmbed.c | 3 +++
|
|||
|
|
unix/tkUnixFocus.c | 1 +
|
|||
|
|
unix/tkUnixRFont.c | 12 +++---------
|
|||
|
|
unix/tkUnixSelect.c | 3 +++
|
|||
|
|
unix/tkUnixSend.c | 1 +
|
|||
|
|
unix/tkUnixWm.c | 9 +++++++--
|
|||
|
|
7 files changed, 19 insertions(+), 11 deletions(-)
|
|||
|
|
|
|||
|
|
diff --git a/unix/tkUnixColor.c b/unix/tkUnixColor.c
|
|||
|
|
index 43500ad5b..b11a1ebbc 100644
|
|||
|
|
--- a/unix/tkUnixColor.c
|
|||
|
|
+++ b/unix/tkUnixColor.c
|
|||
|
|
@@ -94,6 +94,7 @@ TkpFreeColor(
|
|||
|
|
-1, -1, -1, NULL, NULL);
|
|||
|
|
XFreeColors(DisplayOfScreen(screen), tkColPtr->colormap,
|
|||
|
|
&tkColPtr->color.pixel, 1, 0L);
|
|||
|
|
+ XSync(DisplayOfScreen(screen), False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
}
|
|||
|
|
DeleteStressedCmap(DisplayOfScreen(screen), tkColPtr->colormap);
|
|||
|
|
diff --git a/unix/tkUnixEmbed.c b/unix/tkUnixEmbed.c
|
|||
|
|
index b170ad037..b285fbe73 100644
|
|||
|
|
--- a/unix/tkUnixEmbed.c
|
|||
|
|
+++ b/unix/tkUnixEmbed.c
|
|||
|
|
@@ -472,6 +472,7 @@ ContainerEventProc(
|
|||
|
|
|
|||
|
|
Tk_DestroyWindow((Tk_Window) winPtr);
|
|||
|
|
}
|
|||
|
|
+ XSync(eventPtr->xfocus.display, False);
|
|||
|
|
Tk_DeleteErrorHandler(errHandler);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@@ -515,6 +516,7 @@ EmbedStructureProc(
|
|||
|
|
containerPtr->wrapper, 0, 0,
|
|||
|
|
(unsigned) Tk_Width((Tk_Window) containerPtr->parentPtr),
|
|||
|
|
(unsigned) Tk_Height((Tk_Window) containerPtr->parentPtr));
|
|||
|
|
+ XSync(eventPtr->xfocus.display, False);
|
|||
|
|
Tk_DeleteErrorHandler(errHandler);
|
|||
|
|
}
|
|||
|
|
} else if (eventPtr->type == DestroyNotify) {
|
|||
|
|
@@ -564,6 +566,7 @@ EmbedFocusProc(
|
|||
|
|
-1, -1, NULL, NULL);
|
|||
|
|
XSetInputFocus(display, containerPtr->wrapper, RevertToParent,
|
|||
|
|
CurrentTime);
|
|||
|
|
+ XSync(eventPtr->xfocus.display, False);
|
|||
|
|
Tk_DeleteErrorHandler(errHandler);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
diff --git a/unix/tkUnixFocus.c b/unix/tkUnixFocus.c
|
|||
|
|
index 07676181d..7f4771e9d 100644
|
|||
|
|
--- a/unix/tkUnixFocus.c
|
|||
|
|
+++ b/unix/tkUnixFocus.c
|
|||
|
|
@@ -112,6 +112,7 @@ TkpChangeFocus(
|
|||
|
|
}
|
|||
|
|
XSetInputFocus(dispPtr->display, winPtr->window, RevertToParent,
|
|||
|
|
CurrentTime);
|
|||
|
|
+ XSync(dispPtr->display, False);
|
|||
|
|
Tk_DeleteErrorHandler(errHandler);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
diff --git a/unix/tkUnixRFont.c b/unix/tkUnixRFont.c
|
|||
|
|
index abdde7819..44e733944 100644
|
|||
|
|
--- a/unix/tkUnixRFont.c
|
|||
|
|
+++ b/unix/tkUnixRFont.c
|
|||
|
|
@@ -388,16 +388,7 @@ FinishedWithFont(
|
|||
|
|
if (fontPtr->fontset) {
|
|||
|
|
FcFontSetDestroy(fontPtr->fontset);
|
|||
|
|
}
|
|||
|
|
-
|
|||
|
|
- /*
|
|||
|
|
- * Synchronize with X server before dropping the error handler.
|
|||
|
|
- * This seems to catch sporadic RenderBadPicture errors on tear
|
|||
|
|
- * down of an application.
|
|||
|
|
- *
|
|||
|
|
- * See bugs [1821174fff] and [1938774fff].
|
|||
|
|
- */
|
|||
|
|
XSync(fontPtr->display, False);
|
|||
|
|
-
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@@ -885,6 +876,7 @@ Tk_DrawChars(
|
|||
|
|
Tk_CreateErrorHandler(display, -1, -1, -1, NULL, NULL);
|
|||
|
|
|
|||
|
|
XftDrawChange(fontPtr->ftDraw, drawable);
|
|||
|
|
+ XSync(display, False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
}
|
|||
|
|
XGetGCValues(display, gc, GCForeground, &values);
|
|||
|
|
@@ -1018,6 +1010,7 @@ TkDrawAngledChars(
|
|||
|
|
Tk_CreateErrorHandler(display, -1, -1, -1, NULL, NULL);
|
|||
|
|
|
|||
|
|
XftDrawChange(fontPtr->ftDraw, drawable);
|
|||
|
|
+ XSync(display, False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@@ -1107,6 +1100,7 @@ TkDrawAngledChars(
|
|||
|
|
Tk_CreateErrorHandler(display, -1, -1, -1, NULL, NULL);
|
|||
|
|
|
|||
|
|
XftDrawChange(fontPtr->ftDraw, drawable);
|
|||
|
|
+ XSync(display, False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
}
|
|||
|
|
XGetGCValues(display, gc, GCForeground, &values);
|
|||
|
|
diff --git a/unix/tkUnixSelect.c b/unix/tkUnixSelect.c
|
|||
|
|
index 6d379ecc8..9313df5c0 100644
|
|||
|
|
--- a/unix/tkUnixSelect.c
|
|||
|
|
+++ b/unix/tkUnixSelect.c
|
|||
|
|
@@ -470,6 +470,7 @@ TkSelPropProc(
|
|||
|
|
ckfree(propPtr);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
+ XSync(eventPtr->xproperty.display, False);
|
|||
|
|
Tk_DeleteErrorHandler(errorHandler);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
@@ -1048,6 +1049,7 @@ ConvertSelection(
|
|||
|
|
reply.xsel.property = incr.multAtoms[1];
|
|||
|
|
}
|
|||
|
|
XSendEvent(reply.xsel.display, reply.xsel.requestor, False, 0, &reply.ev);
|
|||
|
|
+ XSync(reply.xsel.display, False);
|
|||
|
|
Tk_DeleteErrorHandler(errorHandler);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
@@ -1066,6 +1068,7 @@ ConvertSelection(
|
|||
|
|
errorHandler = Tk_CreateErrorHandler(winPtr->display,
|
|||
|
|
-1, -1, -1, (int (*)()) NULL, NULL);
|
|||
|
|
XSelectInput(reply.xsel.display, reply.xsel.requestor, 0L);
|
|||
|
|
+ XSync(winPtr->display, False);
|
|||
|
|
Tk_DeleteErrorHandler(errorHandler);
|
|||
|
|
if (tsdPtr->pendingIncrs == &incr) {
|
|||
|
|
tsdPtr->pendingIncrs = incr.nextPtr;
|
|||
|
|
diff --git a/unix/tkUnixSend.c b/unix/tkUnixSend.c
|
|||
|
|
index bbbdd774c..0322a78d5 100644
|
|||
|
|
--- a/unix/tkUnixSend.c
|
|||
|
|
+++ b/unix/tkUnixSend.c
|
|||
|
|
@@ -1748,6 +1748,7 @@ AppendPropCarefully(
|
|||
|
|
pendingPtr);
|
|||
|
|
XChangeProperty(display, window, property, XA_STRING, 8,
|
|||
|
|
PropModeAppend, (unsigned char *) value, length);
|
|||
|
|
+ XSync(display, False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
diff --git a/unix/tkUnixWm.c b/unix/tkUnixWm.c
|
|||
|
|
index 19ac86cb5..31e14cb72 100644
|
|||
|
|
--- a/unix/tkUnixWm.c
|
|||
|
|
+++ b/unix/tkUnixWm.c
|
|||
|
|
@@ -4084,6 +4084,7 @@ ConfigureEvent(
|
|||
|
|
XMoveResizeWindow(winPtr->display, winPtr->window, 0,
|
|||
|
|
wmPtr->menuHeight, (unsigned) wrapperPtr->changes.width,
|
|||
|
|
(unsigned) (wrapperPtr->changes.height - wmPtr->menuHeight));
|
|||
|
|
+ XSync(winPtr->display, False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
if ((wmPtr->menubar != NULL)
|
|||
|
|
&& ((Tk_Width(wmPtr->menubar) != wrapperPtr->changes.width)
|
|||
|
|
@@ -4420,10 +4421,11 @@ WrapperEventProc(
|
|||
|
|
* Tk_DestroyWindow will try to destroy the window, but of course
|
|||
|
|
* it's already gone.
|
|||
|
|
*/
|
|||
|
|
+ Display *display = wmPtr->winPtr->display;
|
|||
|
|
|
|||
|
|
- handler = Tk_CreateErrorHandler(wmPtr->winPtr->display, -1, -1, -1,
|
|||
|
|
- NULL, NULL);
|
|||
|
|
+ handler = Tk_CreateErrorHandler(display, -1, -1, -1, NULL, NULL);
|
|||
|
|
Tk_DestroyWindow((Tk_Window) wmPtr->winPtr);
|
|||
|
|
+ XSync(display, False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
}
|
|||
|
|
if (dispPtr->flags & TK_DISPLAY_WM_TRACING) {
|
|||
|
|
@@ -5846,10 +5848,12 @@ Tk_CoordsToWindow(
|
|||
|
|
* deleted
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
+ XSync(Tk_Display(tkwin), False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
if (child == None) {
|
|||
|
|
+ XSync(Tk_Display(tkwin), False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
return NULL;
|
|||
|
|
}
|
|||
|
|
@@ -5879,6 +5883,7 @@ Tk_CoordsToWindow(
|
|||
|
|
* or below
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
+ XSync(Tk_Display(tkwin), False);
|
|||
|
|
Tk_DeleteErrorHandler(handler);
|
|||
|
|
handler = NULL;
|
|||
|
|
}
|
|||
|
|
--
|
|||
|
|
2.19.1
|
|||
|
|
|