summaryrefslogtreecommitdiffstats
path: root/generic/tkTreeElem.c
diff options
context:
space:
mode:
authortreectrl <treectrl>2006-10-11 01:28:51 (GMT)
committertreectrl <treectrl>2006-10-11 01:28:51 (GMT)
commit6abd644c7439025f8fee095fe4ace1b6e26109ca (patch)
tree11c2936f202d7ee678aca81419d31579686d76f7 /generic/tkTreeElem.c
parent2647f24ebfeb364ffc76d0075fdeee6479416fd1 (diff)
downloadtktreectrl-6abd644c7439025f8fee095fe4ace1b6e26109ca.zip
tktreectrl-6abd644c7439025f8fee095fe4ace1b6e26109ca.tar.gz
tktreectrl-6abd644c7439025f8fee095fe4ace1b6e26109ca.tar.bz2
Fixed a bug with window elements when another geometry manager takes control of a managed window.
Diffstat (limited to 'generic/tkTreeElem.c')
-rw-r--r--generic/tkTreeElem.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/generic/tkTreeElem.c b/generic/tkTreeElem.c
index 2302ba0..1df0366 100644
--- a/generic/tkTreeElem.c
+++ b/generic/tkTreeElem.c
@@ -5,7 +5,7 @@
*
* Copyright (c) 2002-2006 Tim Baker
*
- * RCS: @(#) $Id: tkTreeElem.c,v 1.41 2006/10/05 22:47:01 treectrl Exp $
+ * RCS: @(#) $Id: tkTreeElem.c,v 1.42 2006/10/11 01:28:51 treectrl Exp $
*/
#include "tkTreeCtrl.h"
@@ -3148,18 +3148,29 @@ WinItemLostSlaveProc(clientData, tkwin)
TreeCtrl *tree = elemX->tree;
#ifdef CLIP_WINDOW
- if (tkwin == elemX->child) {
+ /* If either window is lost to another geometry manager, forget
+ * about both windows. */
+ if (elemX->child != NULL) {
Tk_DeleteEventHandler(elemX->child, StructureNotifyMask,
WinItemStructureProc, (ClientData) elemX);
- Tk_UnmapWindow(elemX->child);
+ if (tkwin != elemX->child) {
+ Tk_ManageGeometry(elemX->child, (Tk_GeomMgr *) NULL,
+ (ClientData) NULL);
+ Tk_UnmapWindow(elemX->child);
+ }
elemX->child = NULL;
- } else {
+ }
+ if (elemX->tkwin != NULL) {
Tk_DeleteEventHandler(elemX->tkwin, StructureNotifyMask,
WinItemStructureProc, (ClientData) elemX);
- if (tree->tkwin != Tk_Parent(elemX->tkwin)) {
- Tk_UnmaintainGeometry(elemX->tkwin, tree->tkwin);
+ if (tkwin != elemX->tkwin) {
+ Tk_ManageGeometry(elemX->tkwin, (Tk_GeomMgr *) NULL,
+ (ClientData) NULL);
+ if (tree->tkwin != Tk_Parent(elemX->tkwin)) {
+ Tk_UnmaintainGeometry(elemX->tkwin, tree->tkwin);
+ }
+ Tk_UnmapWindow(elemX->tkwin);
}
- Tk_UnmapWindow(elemX->tkwin);
elemX->tkwin = NULL;
}
#else