diff options
author | mdejong <mdejong> | 2005-06-01 00:07:27 (GMT) |
---|---|---|
committer | mdejong <mdejong> | 2005-06-01 00:07:27 (GMT) |
commit | 69b41366f7961e5f5850ef4f32abfbd1972adaf4 (patch) | |
tree | 9582bbb522da0475e95814fc5ef15359abd54da7 /unix | |
parent | f26e505a313c0d6cc0538b942324857eeec42de9 (diff) | |
download | tk-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')
-rw-r--r-- | unix/tkUnixWm.c | 12 |
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 *)); |