summaryrefslogtreecommitdiffstats
path: root/unix/tkUnixWm.c
diff options
context:
space:
mode:
authormdejong <mdejong>2005-06-01 00:07:27 (GMT)
committermdejong <mdejong>2005-06-01 00:07:27 (GMT)
commit69b41366f7961e5f5850ef4f32abfbd1972adaf4 (patch)
tree9582bbb522da0475e95814fc5ef15359abd54da7 /unix/tkUnixWm.c
parentf26e505a313c0d6cc0538b942324857eeec42de9 (diff)
downloadtk-69b41366f7961e5f5850ef4f32abfbd1972adaf4.zip
tk-69b41366f7961e5f5850ef4f32abfbd1972adaf4.tar.gz
tk-69b41366f7961e5f5850ef4f32abfbd1972adaf4.tar.bz2
* macosx/tkMacOSXWm.c (TkWmStackorderToplevelWrapperMap, TkWmStackorderToplevel):
* unix/tkUnixWm.c (TkWmStackorderToplevelWrapperMap, TkWmStackorderToplevel): * win/tkWinWm.c (TkWmStackorderToplevelWrapperMap, TkWmStackorderToplevel): Fix panic in wm stackorder when a toplevel is created on another diplay. The code now ignores toplevels that have a display that does not match the display of the parent window. [Bug 1152809]
Diffstat (limited to 'unix/tkUnixWm.c')
-rw-r--r--unix/tkUnixWm.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/unix/tkUnixWm.c b/unix/tkUnixWm.c
index 87c22b8..ab4c664 100644
--- a/unix/tkUnixWm.c
+++ b/unix/tkUnixWm.c
@@ -12,7 +12,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkUnixWm.c,v 1.36.2.5 2005/01/14 21:09:46 jenglish Exp $
+ * RCS: @(#) $Id: tkUnixWm.c,v 1.36.2.6 2005/06/01 00:07:29 mdejong Exp $
*/
#include "tkPort.h"
@@ -326,6 +326,7 @@ static void ReparentEvent _ANSI_ARGS_((WmInfo *wmPtr,
XReparentEvent *eventPtr));
static void TkWmStackorderToplevelWrapperMap _ANSI_ARGS_((
TkWindow *winPtr,
+ Display *display,
Tcl_HashTable *reparentTable));
static void TopLevelReqProc _ANSI_ARGS_((ClientData dummy,
Tk_Window tkwin));
@@ -5618,8 +5619,9 @@ TkWmProtocolEventProc(winPtr, eventPtr)
*/
static void
-TkWmStackorderToplevelWrapperMap(winPtr, table)
+TkWmStackorderToplevelWrapperMap(winPtr, display, table)
TkWindow *winPtr; /* TkWindow to recurse on */
+ Display *display; /* X display of parent window */
Tcl_HashTable *table; /* Maps X id to TkWindow */
{
TkWindow *childPtr;
@@ -5628,7 +5630,7 @@ TkWmStackorderToplevelWrapperMap(winPtr, table)
int newEntry;
if (Tk_IsMapped(winPtr) && Tk_IsTopLevel(winPtr) &&
- !Tk_IsEmbedded(winPtr)) {
+ !Tk_IsEmbedded(winPtr) && (winPtr->display == display)) {
wrapper = (winPtr->wmInfoPtr->reparent != None)
? winPtr->wmInfoPtr->reparent
: winPtr->wmInfoPtr->wrapperPtr->window;
@@ -5640,7 +5642,7 @@ TkWmStackorderToplevelWrapperMap(winPtr, table)
for (childPtr = winPtr->childList; childPtr != NULL;
childPtr = childPtr->nextPtr) {
- TkWmStackorderToplevelWrapperMap(childPtr, table);
+ TkWmStackorderToplevelWrapperMap(childPtr, display, table);
}
}
@@ -5678,7 +5680,7 @@ TkWmStackorderToplevel(parentPtr)
*/
Tcl_InitHashTable(&table, TCL_ONE_WORD_KEYS);
- TkWmStackorderToplevelWrapperMap(parentPtr, &table);
+ TkWmStackorderToplevelWrapperMap(parentPtr, parentPtr->display, &table);
window_ptr = windows = (TkWindow **) ckalloc((table.numEntries+1)
* sizeof(TkWindow *));