comparison gtk4/dw.c @ 2287:680212c356e3

GTK4: Refactor tree and fix DW_SIGNAL_ITEM_CONTEXT signals on tree view widgets.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 04 Feb 2021 03:42:19 +0000
parents 2d282d8fe911
children d0bb8f99ac45
comparison
equal deleted inserted replaced
2286:2d282d8fe911 2287:680212c356e3
665 } 665 }
666 gtk_tree_path_free(path); 666 gtk_tree_path_free(path);
667 } 667 }
668 } 668 }
669 } 669 }
670
671 retval = contextfunc(work.window, text, (int)x, (int)y, work.data, itemdata); 670 retval = contextfunc(work.window, text, (int)x, (int)y, work.data, itemdata);
672 if(text) 671 if(text)
673 g_free(text); 672 g_free(text);
674 } 673 }
675 } 674 }
2527 2526
2528 #define _DW_TREE_CONTAINER 1 2527 #define _DW_TREE_CONTAINER 1
2529 #define _DW_TREE_TREE 2 2528 #define _DW_TREE_TREE 2
2530 #define _DW_TREE_LISTBOX 3 2529 #define _DW_TREE_LISTBOX 3
2531 2530
2532 GtkWidget *_tree_create(unsigned long id) 2531 GtkWidget *_dw_tree_create(unsigned long id)
2533 { 2532 {
2534 GtkWidget *tmp; 2533 GtkWidget *tmp;
2535 2534
2536 tmp = gtk_scrolled_window_new(); 2535 tmp = gtk_scrolled_window_new();
2537 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), 2536 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp),
2540 g_object_set_data(G_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id)); 2539 g_object_set_data(G_OBJECT(tmp), "_dw_id", GINT_TO_POINTER(id));
2541 gtk_widget_show(tmp); 2540 gtk_widget_show(tmp);
2542 return tmp; 2541 return tmp;
2543 } 2542 }
2544 2543
2545 GtkWidget *_tree_setup(GtkWidget *tmp, GtkTreeModel *store) 2544 GtkWidget *_dw_tree_view_setup(GtkWidget *tmp, GtkTreeModel *store)
2546 { 2545 {
2547 GtkWidget *tree = gtk_tree_view_new_with_model(store); 2546 GtkWidget *tree = gtk_tree_view_new_with_model(store);
2548 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(tree), FALSE); 2547 gtk_tree_view_set_enable_search(GTK_TREE_VIEW(tree), FALSE);
2549 gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(tmp), tree); 2548 gtk_scrolled_window_set_child(GTK_SCROLLED_WINDOW(tmp), tree);
2550 g_object_set_data(G_OBJECT(tmp), "_dw_user", (gpointer)tree); 2549 g_object_set_data(G_OBJECT(tmp), "_dw_user", (gpointer)tree);
2559 */ 2558 */
2560 HWND dw_container_new(unsigned long id, int multi) 2559 HWND dw_container_new(unsigned long id, int multi)
2561 { 2560 {
2562 GtkWidget *tmp; 2561 GtkWidget *tmp;
2563 2562
2564 if(!(tmp = _tree_create(id))) 2563 if(!(tmp = _dw_tree_create(id)))
2565 return 0; 2564 return 0;
2566 g_object_set_data(G_OBJECT(tmp), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER)); 2565 g_object_set_data(G_OBJECT(tmp), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER));
2567 g_object_set_data(G_OBJECT(tmp), "_dw_multi_sel", GINT_TO_POINTER(multi)); 2566 g_object_set_data(G_OBJECT(tmp), "_dw_multi_sel", GINT_TO_POINTER(multi));
2568 return tmp; 2567 return tmp;
2569 } 2568 }
2580 GtkTreeStore *store; 2579 GtkTreeStore *store;
2581 GtkTreeViewColumn *col; 2580 GtkTreeViewColumn *col;
2582 GtkCellRenderer *rend; 2581 GtkCellRenderer *rend;
2583 GtkTreeSelection *sel; 2582 GtkTreeSelection *sel;
2584 2583
2585 if(!(tmp = _tree_create(id))) 2584 if(!(tmp = _dw_tree_create(id)))
2586 return 0; 2585 return 0;
2587 store = gtk_tree_store_new(4, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER, G_TYPE_POINTER); 2586 store = gtk_tree_store_new(4, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER, G_TYPE_POINTER);
2588 tree = _tree_setup(tmp, GTK_TREE_MODEL(store)); 2587 tree = _dw_tree_view_setup(tmp, GTK_TREE_MODEL(store));
2589 g_object_set_data(G_OBJECT(tmp), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_TREE)); 2588 g_object_set_data(G_OBJECT(tmp), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_TREE));
2590 g_object_set_data(G_OBJECT(tree), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_TREE)); 2589 g_object_set_data(G_OBJECT(tree), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_TREE));
2591 col = gtk_tree_view_column_new(); 2590 col = gtk_tree_view_column_new();
2592 2591
2593 rend = gtk_cell_renderer_pixbuf_new(); 2592 rend = gtk_cell_renderer_pixbuf_new();
2992 GtkListStore *store; 2991 GtkListStore *store;
2993 GtkTreeViewColumn *col; 2992 GtkTreeViewColumn *col;
2994 GtkCellRenderer *rend; 2993 GtkCellRenderer *rend;
2995 GtkTreeSelection *sel; 2994 GtkTreeSelection *sel;
2996 2995
2997 if(!(tmp = _tree_create(id))) 2996 if(!(tmp = _dw_tree_create(id)))
2998 return 0; 2997 return 0;
2999 store = gtk_list_store_new(1, G_TYPE_STRING); 2998 store = gtk_list_store_new(1, G_TYPE_STRING);
3000 tree = _tree_setup(tmp, GTK_TREE_MODEL(store)); 2999 tree = _dw_tree_view_setup(tmp, GTK_TREE_MODEL(store));
3001 g_object_set_data(G_OBJECT(tmp), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_LISTBOX)); 3000 g_object_set_data(G_OBJECT(tmp), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_LISTBOX));
3002 g_object_set_data(G_OBJECT(tree), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_LISTBOX)); 3001 g_object_set_data(G_OBJECT(tree), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_LISTBOX));
3003 3002
3004 col = gtk_tree_view_column_new(); 3003 col = gtk_tree_view_column_new();
3005 rend = gtk_cell_renderer_text_new(); 3004 rend = gtk_cell_renderer_text_new();
4239 array[z+_DW_CONTAINER_STORE_EXTRA+1] = G_TYPE_STRING; 4238 array[z+_DW_CONTAINER_STORE_EXTRA+1] = G_TYPE_STRING;
4240 } 4239 }
4241 } 4240 }
4242 /* Create the store and then the tree */ 4241 /* Create the store and then the tree */
4243 store = gtk_list_store_newv(count + _DW_CONTAINER_STORE_EXTRA + 1, array); 4242 store = gtk_list_store_newv(count + _DW_CONTAINER_STORE_EXTRA + 1, array);
4244 tree = _tree_setup(handle, GTK_TREE_MODEL(store)); 4243 tree = _dw_tree_view_setup(handle, GTK_TREE_MODEL(store));
4245 g_object_set_data(G_OBJECT(tree), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER)); 4244 g_object_set_data(G_OBJECT(tree), "_dw_tree_type", GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER));
4246 /* Second loop... create the columns */ 4245 /* Second loop... create the columns */
4247 for(z=0;z<count;z++) 4246 for(z=0;z<count;z++)
4248 { 4247 {
4249 snprintf(numbuf, 24, "_dw_cont_col%d", z); 4248 snprintf(numbuf, 24, "_dw_cont_col%d", z);
9607 return G_OBJECT(sel); 9606 return G_OBJECT(sel);
9608 } 9607 }
9609 else 9608 else
9610 { 9609 {
9611 GtkGesture *gesture = gtk_gesture_click_new(); 9610 GtkGesture *gesture = gtk_gesture_click_new();
9611 /* Set button to return to 3 for context secondary clicks */
9612 if(strcmp(signal->name, DW_SIGNAL_ITEM_CONTEXT) == 0)
9613 gtk_gesture_single_set_button(GTK_GESTURE_SINGLE(gesture), 3);
9612 gtk_widget_add_controller(GTK_WIDGET(object), GTK_EVENT_CONTROLLER(gesture)); 9614 gtk_widget_add_controller(GTK_WIDGET(object), GTK_EVENT_CONTROLLER(gesture));
9613 return G_OBJECT(gesture); 9615 return G_OBJECT(gesture);
9614 } 9616 }
9615 } 9617 }
9616 return object; 9618 return object;