comparison gtk/dw.c @ 107:cd0e5cf92f6a

Rewrote the Windows packing code so it is more like OS/2 to improve window redrawing performance. Fixed problems with the tree widget on unix. lastselect needs to be set on the root tree widget... not the scrolled window!
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 17 Sep 2002 17:33:06 +0000
parents baaf4b04d284
children cf0115e38ef0
comparison
equal deleted inserted replaced
106:4b6799f3dbbc 107:cd0e5cf92f6a
406 } 406 }
407 407
408 void _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data) 408 void _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data)
409 { 409 {
410 SignalHandler *work = (SignalHandler *)data; 410 SignalHandler *work = (SignalHandler *)data;
411 GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "tree");
412
413 if(treeroot && GTK_IS_TREE(treeroot))
414 {
415 GtkWidget *lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(treeroot), "lastselect");
416 if(lastselect && GTK_IS_TREE_ITEM(lastselect))
417 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect));
418 gtk_object_set_data(GTK_OBJECT(treeroot), "lastselect", (gpointer)child);
419 }
411 420
412 if(work) 421 if(work)
413 { 422 {
414 void (*treeselectfunc)(HWND, HWND, char *, void *, void *) = work->func; 423 void (*treeselectfunc)(HWND, HWND, char *, void *, void *) = work->func;
415 char *text = (char *)gtk_object_get_data(GTK_OBJECT(child), "text"); 424 char *text = (char *)gtk_object_get_data(GTK_OBJECT(child), "text");
416 void *itemdata = (char *)gtk_object_get_data(GTK_OBJECT(child), "itemdata"); 425 void *itemdata = (char *)gtk_object_get_data(GTK_OBJECT(child), "itemdata");
417 GtkWidget *treeroot = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(child), "tree");
418
419 if(treeroot && GTK_IS_TREE(treeroot))
420 gtk_object_set_data(GTK_OBJECT(treeroot), "lastselect", (gpointer)child);
421 treeselectfunc(work->window, child, text, itemdata, work->data); 426 treeselectfunc(work->window, child, text, itemdata, work->data);
422 } 427 }
423 } 428 }
424 429
425 void _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data) 430 void _container_select_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
2904 HWND dw_tree_insert_after(HWND handle, HWND item, char *title, unsigned long icon, HWND parent, void *itemdata) 2909 HWND dw_tree_insert_after(HWND handle, HWND item, char *title, unsigned long icon, HWND parent, void *itemdata)
2905 { 2910 {
2906 GtkWidget *newitem, *tree, *subtree, *label, *hbox, *pixmap; 2911 GtkWidget *newitem, *tree, *subtree, *label, *hbox, *pixmap;
2907 GdkPixmap *gdkpix; 2912 GdkPixmap *gdkpix;
2908 GdkBitmap *gdkbmp = NULL; 2913 GdkBitmap *gdkbmp = NULL;
2909 int position = 0; 2914 int position = -1;
2910 int _locked_by_me = FALSE; 2915 int _locked_by_me = FALSE;
2911 2916
2912 if(!handle) 2917 if(!handle)
2913 return NULL; 2918 return NULL;
2914 2919
3134 * handle: Handle to the tree window (widget) to be selected. 3139 * handle: Handle to the tree window (widget) to be selected.
3135 * item: Handle to the item to be selected. 3140 * item: Handle to the item to be selected.
3136 */ 3141 */
3137 void dw_tree_item_select(HWND handle, HWND item) 3142 void dw_tree_item_select(HWND handle, HWND item)
3138 { 3143 {
3139 GtkWidget *lastselect; 3144 GtkWidget *lastselect, *tree;
3140 int _locked_by_me = FALSE; 3145 int _locked_by_me = FALSE;
3141 3146
3142 if(!handle || !item) 3147 if(!handle || !item)
3143 return; 3148 return;
3144 3149
3145 DW_MUTEX_LOCK; 3150 DW_MUTEX_LOCK;
3146 lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "lastselect"); 3151 tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle));
3152 lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "lastselect");
3147 if(lastselect && GTK_IS_TREE_ITEM(lastselect)) 3153 if(lastselect && GTK_IS_TREE_ITEM(lastselect))
3148 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); 3154 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect));
3149 gtk_tree_item_select(GTK_TREE_ITEM(item)); 3155 gtk_tree_item_select(GTK_TREE_ITEM(item));
3150 gtk_object_set_data(GTK_OBJECT(handle), "lastselect", (gpointer)item); 3156 gtk_object_set_data(GTK_OBJECT(tree), "lastselect", (gpointer)item);
3151 DW_MUTEX_UNLOCK; 3157 DW_MUTEX_UNLOCK;
3152 } 3158 }
3153 3159
3154 /* 3160 /*
3155 * Removes all nodes from a tree. 3161 * Removes all nodes from a tree.
3169 if(!tree || !GTK_IS_TREE(tree)) 3175 if(!tree || !GTK_IS_TREE(tree))
3170 { 3176 {
3171 DW_MUTEX_UNLOCK; 3177 DW_MUTEX_UNLOCK;
3172 return; 3178 return;
3173 } 3179 }
3180 gtk_object_set_data(GTK_OBJECT(tree), "lastselect", NULL);
3174 gtk_tree_clear_items(GTK_TREE(tree), 0, 1000000); 3181 gtk_tree_clear_items(GTK_TREE(tree), 0, 1000000);
3175 DW_MUTEX_UNLOCK; 3182 DW_MUTEX_UNLOCK;
3176 } 3183 }
3177 3184
3178 /* 3185 /*
3233 { 3240 {
3234 DW_MUTEX_UNLOCK; 3241 DW_MUTEX_UNLOCK;
3235 return; 3242 return;
3236 } 3243 }
3237 3244
3238 lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(handle), "lastselect"); 3245 lastselect = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(tree), "lastselect");
3246
3247 parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "parenttree");
3239 3248
3240 if(lastselect == item) 3249 if(lastselect == item)
3241 { 3250 {
3242 if(lastselect && GTK_IS_WIDGET(lastselect)) 3251 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect));
3243 { 3252 gtk_object_set_data(GTK_OBJECT(tree), "lastselect", NULL);
3244 parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(lastselect), "parenttree"); 3253 }
3245 if(parenttree && GTK_IS_TREE(parenttree))
3246 gtk_tree_unselect_child(GTK_TREE(parenttree), lastselect);
3247 }
3248 gtk_object_set_data(GTK_OBJECT(handle), "lastselect", NULL);
3249 }
3250
3251 parenttree = (GtkWidget *)gtk_object_get_data(GTK_OBJECT(item), "parenttree");
3252 3254
3253 if(parenttree && GTK_IS_WIDGET(parenttree)) 3255 if(parenttree && GTK_IS_WIDGET(parenttree))
3254 gtk_tree_remove_item(GTK_TREE(parenttree), item); 3256 gtk_container_remove(GTK_CONTAINER(parenttree), item);
3255 DW_MUTEX_UNLOCK; 3257 DW_MUTEX_UNLOCK;
3256 } 3258 }
3257 3259
3258 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) 3260 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra)
3259 { 3261 {