summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authortreectrl <treectrl>2006-12-07 00:47:17 (GMT)
committertreectrl <treectrl>2006-12-07 00:47:17 (GMT)
commit02d492e1fdd3e7577584a4bf889c072471d0f932 (patch)
tree561f570f5ff30a0e8826fd56befb42a13ef53471 /generic
parent7f43bf86be233d0c7691f3ffee540e024d66ff11 (diff)
downloadtktreectrl-02d492e1fdd3e7577584a4bf889c072471d0f932.zip
tktreectrl-02d492e1fdd3e7577584a4bf889c072471d0f932.tar.gz
tktreectrl-02d492e1fdd3e7577584a4bf889c072471d0f932.tar.bz2
Hide window elements if changing the -visible layout option causes the window element to become hidden.
Diffstat (limited to 'generic')
-rw-r--r--generic/tkTreeStyle.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/generic/tkTreeStyle.c b/generic/tkTreeStyle.c
index 995ce51..7c386d4 100644
--- a/generic/tkTreeStyle.c
+++ b/generic/tkTreeStyle.c
@@ -5,7 +5,7 @@
*
* Copyright (c) 2002-2006 Tim Baker
*
- * RCS: @(#) $Id: tkTreeStyle.c,v 1.68 2006/12/06 04:00:16 treectrl Exp $
+ * RCS: @(#) $Id: tkTreeStyle.c,v 1.69 2006/12/07 00:47:17 treectrl Exp $
*/
#include "tkTreeCtrl.h"
@@ -6957,13 +6957,13 @@ TreeStyle_ChangeState(
return 0;
args.tree = tree;
- args.states.state1 = state1;
- args.states.state2 = state2;
for (i = 0; i < masterStyle->numElements; i++)
{
eLink2 = &style->elements[i];
args.elem = eLink2->elem;
+ args.states.state1 = state1;
+ args.states.state2 = state2;
eMask = (*eLink2->elem->typePtr->stateProc)(&args);
eLink1 = &masterStyle->elements[i];
@@ -6972,8 +6972,19 @@ TreeStyle_ChangeState(
&eLink1->visible, state1, NULL);
visible2 = PerStateBoolean_ForState(tree,
&eLink1->visible, state2, NULL);
- if ((visible1 == 0) != (visible2 == 0))
+ /* FIXME: Changing visibility might not change the layout. */
+ if ((visible1 == 0) != (visible2 == 0)) {
eMask |= CS_DISPLAY | CS_LAYOUT;
+
+ /* Hack: If a window element becomes hidden, then tell it it is
+ * not onscreen, otherwise it will never be "drawn" in the
+ * hidden state. */
+ if (!visible2 && ELEMENT_TYPE_MATCHES(args.elem->typePtr,
+ &elemTypeWindow)) {
+ args.screen.visible = FALSE;
+ (*args.elem->typePtr->onScreenProc)(&args);
+ }
+ }
}
if (eMask)