summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authortreectrl <treectrl>2005-07-10 22:20:17 (GMT)
committertreectrl <treectrl>2005-07-10 22:20:17 (GMT)
commit95d5f18f6b6a08d8401572ac3dd9867763e196b0 (patch)
tree87789e41c3b0fea4c397db21055b321f1c56e5f2 /generic
parent0618e0dab03b1af4d9aa8020d804c279207412af (diff)
downloadtktreectrl-95d5f18f6b6a08d8401572ac3dd9867763e196b0.zip
tktreectrl-95d5f18f6b6a08d8401572ac3dd9867763e196b0.tar.gz
tktreectrl-95d5f18f6b6a08d8401572ac3dd9867763e196b0.tar.bz2
Added 2 functions for initializing booean and string-table custom options.
OnScreenProcWindow: fix segfault when tkwin is NULL. Add stuff to stubs table to support shellicon extension.
Diffstat (limited to 'generic')
-rw-r--r--generic/tkTreeElem.c51
1 files changed, 48 insertions, 3 deletions
diff --git a/generic/tkTreeElem.c b/generic/tkTreeElem.c
index 73f8480..3455d38 100644
--- a/generic/tkTreeElem.c
+++ b/generic/tkTreeElem.c
@@ -5,7 +5,7 @@
*
* Copyright (c) 2002-2005 Tim Baker
*
- * RCS: @(#) $Id: tkTreeElem.c,v 1.33 2005/07/07 02:57:19 treectrl Exp $
+ * RCS: @(#) $Id: tkTreeElem.c,v 1.34 2005/07/10 22:20:17 treectrl Exp $
*/
#include "tkTreeCtrl.h"
@@ -246,6 +246,44 @@ static void StringTableRestore(
/* END custom "stringtable" option */
+int BooleanCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName)
+{
+ int i;
+
+ for (i = 0; optionTable[i].type != TK_OPTION_END; i++) {
+ if (!strcmp(optionTable[i].optionName, optionName)) {
+ optionTable[i].clientData = (ClientData) &booleanCO;
+ return TCL_OK;
+ }
+ }
+ return TCL_ERROR;
+}
+
+int StringTableCO_Init(Tk_OptionSpec *optionTable, CONST char *optionName, CONST char **tablePtr)
+{
+ StringTableClientData *cd;
+ Tk_ObjCustomOption *co;
+ int i;
+
+ for (i = 0; optionTable[i].type != TK_OPTION_END; i++) {
+ if (!strcmp(optionTable[i].optionName, optionName)) {
+ cd = (StringTableClientData *) ckalloc(sizeof(StringTableClientData));
+ cd->tablePtr = tablePtr;
+ cd->msg = optionName + 1;
+ co = (Tk_ObjCustomOption *) ckalloc(sizeof(Tk_ObjCustomOption));
+ co->name = (char *) optionName + 1;
+ co->setProc = StringTableSet;
+ co->getProc = StringTableGet;
+ co->restoreProc = StringTableRestore;
+ co->freeProc = NULL;
+ co->clientData = (ClientData) cd;
+ optionTable[i].clientData = (ClientData) co;
+ return TCL_OK;
+ }
+ }
+ return TCL_ERROR;
+}
+
/*****/
int TreeStateFromObj(TreeCtrl *tree, Tcl_Obj *obj, int *stateOff, int *stateOn)
@@ -3621,7 +3659,7 @@ static void OnScreenProcWindow(ElementArgs *args)
Element *elem = args->elem;
ElementWindow *elemX = (ElementWindow *) elem;
- if (!args->screen.visible) {
+ if (!args->screen.visible && (elemX->tkwin != NULL)) {
if (tree->tkwin == Tk_Parent(elemX->tkwin)) {
Tk_UnmapWindow(elemX->tkwin);
} else {
@@ -3749,7 +3787,14 @@ TreeCtrlStubs stubs = {
PerStateInfo_FromObj,
PerStateInfo_ForState,
PerStateInfo_ObjForState,
- PerStateInfo_Undefine
+ PerStateInfo_Undefine,
+ &pstBoolean,
+ PerStateBoolean_ForState,
+ PSTSave,
+ PSTRestore,
+ TreeStateFromObj,
+ BooleanCO_Init,
+ StringTableCO_Init
};
static void FreeAssocData(ClientData clientData, Tcl_Interp *interp)