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