Mercurial > dwindows
comparison gtk/dw.c @ 141:36dc19aa7773
Added tree cleanup code for GTK 2.0, and disabled some of the accellerator
code because it was causing weird problems and not working right.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 22 Oct 2002 09:54:22 +0000 |
parents | e0e73b4372a6 |
children | 9560efb7bea2 |
comparison
equal
deleted
inserted
replaced
140:e0e73b4372a6 | 141:36dc19aa7773 |
---|---|
466 | 466 |
467 if(widget && gtk_tree_selection_get_selected(sel, NULL, &iter)) | 467 if(widget && gtk_tree_selection_get_selected(sel, NULL, &iter)) |
468 { | 468 { |
469 GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_tree_store"); | 469 GtkTreeModel *store = (GtkTreeModel *)gtk_object_get_data(GTK_OBJECT(widget), "_dw_tree_store"); |
470 gtk_tree_model_get(store, &iter, 0, &text, 2, &itemdata, 3, &item, -1); | 470 gtk_tree_model_get(store, &iter, 0, &text, 2, &itemdata, 3, &item, -1); |
471 } | 471 retval = treeselectfunc(work->window, item, text, itemdata, work->data); |
472 | 472 } |
473 retval = treeselectfunc(work->window, item, text, itemdata, work->data); | |
474 } | 473 } |
475 return retval; | 474 return retval; |
476 } | 475 } |
477 #else | 476 #else |
478 gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data) | 477 gint _tree_select_event(GtkTree *tree, GtkWidget *child, gpointer data) |
1777 char numbuf[10]; | 1776 char numbuf[10]; |
1778 if(accel && accel_group) | 1777 if(accel && accel_group) |
1779 { | 1778 { |
1780 tmphandle=gtk_check_menu_item_new_with_label(""); | 1779 tmphandle=gtk_check_menu_item_new_with_label(""); |
1781 tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); | 1780 tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); |
1781 #if 0 /* This isn't working right */ | |
1782 gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); | 1782 gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); |
1783 #endif | |
1783 } | 1784 } |
1784 else | 1785 else |
1785 tmphandle=gtk_check_menu_item_new_with_label(tempbuf); | 1786 tmphandle=gtk_check_menu_item_new_with_label(tempbuf); |
1786 gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE); | 1787 gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE); |
1787 sprintf(numbuf, "%lu", id); | 1788 sprintf(numbuf, "%lu", id); |
1791 { | 1792 { |
1792 if(accel && accel_group) | 1793 if(accel && accel_group) |
1793 { | 1794 { |
1794 tmphandle=gtk_menu_item_new_with_label(""); | 1795 tmphandle=gtk_menu_item_new_with_label(""); |
1795 tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); | 1796 tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(tmphandle)->child), tempbuf); |
1797 #if 0 /* This isn't working right */ | |
1796 gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); | 1798 gtk_widget_add_accelerator(tmphandle, "activate", accel_group, tmp_key, GDK_MOD1_MASK, 0); |
1799 #endif | |
1797 } | 1800 } |
1798 else | 1801 else |
1799 tmphandle=gtk_menu_item_new_with_label(tempbuf); | 1802 tmphandle=gtk_menu_item_new_with_label(tempbuf); |
1800 } | 1803 } |
1801 } | 1804 } |
3594 #if GTK_MAJOR_VERSION > 1 | 3597 #if GTK_MAJOR_VERSION > 1 |
3595 GtkWidget *tree; | 3598 GtkWidget *tree; |
3596 GtkTreeStore *store; | 3599 GtkTreeStore *store; |
3597 int _locked_by_me = FALSE; | 3600 int _locked_by_me = FALSE; |
3598 | 3601 |
3599 if(!handle) | 3602 if(!handle || !item) |
3600 return; | 3603 return; |
3601 | 3604 |
3602 DW_MUTEX_LOCK; | 3605 DW_MUTEX_LOCK; |
3603 if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) | 3606 if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) |
3604 && GTK_IS_TREE_VIEW(tree) && | 3607 && GTK_IS_TREE_VIEW(tree) && |
3628 gtk_object_set_data(GTK_OBJECT(tree), "lastselect", (gpointer)item); | 3631 gtk_object_set_data(GTK_OBJECT(tree), "lastselect", (gpointer)item); |
3629 DW_MUTEX_UNLOCK; | 3632 DW_MUTEX_UNLOCK; |
3630 #endif | 3633 #endif |
3631 } | 3634 } |
3632 | 3635 |
3636 void _dw_recursive_free(GtkTreeModel *store, GtkTreeIter parent) | |
3637 { | |
3638 void *data; | |
3639 GtkTreeIter iter; | |
3640 | |
3641 gtk_tree_model_get(store, &parent, 3, &data, -1); | |
3642 if(data) | |
3643 free(data); | |
3644 gtk_tree_store_set(GTK_TREE_STORE(store), &parent, 3, NULL, -1); | |
3645 | |
3646 if(gtk_tree_model_iter_children(store, &iter, &parent)) | |
3647 { | |
3648 do { | |
3649 _dw_recursive_free(GTK_TREE_MODEL(store), iter); | |
3650 } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter)); | |
3651 } | |
3652 } | |
3653 | |
3633 /* | 3654 /* |
3634 * Removes all nodes from a tree. | 3655 * Removes all nodes from a tree. |
3635 * Parameters: | 3656 * Parameters: |
3636 * handle: Handle to the window (widget) to be cleared. | 3657 * handle: Handle to the window (widget) to be cleared. |
3637 */ | 3658 */ |
3638 void dw_tree_clear(HWND handle) | 3659 void dw_tree_clear(HWND handle) |
3639 { | 3660 { |
3640 #if GTK_MAJOR_VERSION > 1 | 3661 #if GTK_MAJOR_VERSION > 1 |
3641 GtkWidget *tree; | 3662 GtkWidget *tree; |
3642 GtkTreeStore *store; | 3663 GtkTreeStore *store; |
3643 int _locked_by_me = FALSE; | 3664 int _locked_by_me = FALSE; |
3644 | 3665 |
3645 if(!handle) | 3666 if(!handle) |
3646 return; | 3667 return; |
3647 | 3668 |
3648 DW_MUTEX_LOCK; | 3669 DW_MUTEX_LOCK; |
3649 if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) | 3670 if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) |
3650 && GTK_IS_TREE_VIEW(tree) && | 3671 && GTK_IS_TREE_VIEW(tree) && |
3651 (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) | 3672 (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) |
3673 { | |
3674 GtkTreeIter iter; | |
3675 | |
3676 if(gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter)) | |
3677 { | |
3678 do { | |
3679 _dw_recursive_free(GTK_TREE_MODEL(store), iter); | |
3680 } while(gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter)); | |
3681 } | |
3652 gtk_tree_store_clear(store); | 3682 gtk_tree_store_clear(store); |
3683 } | |
3653 DW_MUTEX_UNLOCK; | 3684 DW_MUTEX_UNLOCK; |
3654 #else | 3685 #else |
3655 GtkWidget *tree; | 3686 GtkWidget *tree; |
3656 int _locked_by_me = FALSE; | 3687 int _locked_by_me = FALSE; |
3657 | 3688 |