Mercurial > dwindows
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 { |