comparison gtk4/dw.c @ 2292:fa19fce045aa

GTK4: Remove unnecessary parameter to the setup functions.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 05 Feb 2021 05:56:01 +0000
parents ce1b9e558584
children 2a208d5400c5
comparison
equal deleted inserted replaced
2291:ce1b9e558584 2292:fa19fce045aa
148 typedef struct _dw_signal_list 148 typedef struct _dw_signal_list
149 { 149 {
150 void *func; 150 void *func;
151 char name[30]; 151 char name[30];
152 char gname[30]; 152 char gname[30];
153 GObject *(*setup)(struct _dw_signal_list *, GObject *, void *[], void *, void *, void *); 153 GObject *(*setup)(struct _dw_signal_list *, GObject *, void *, void *, void *);
154 154
155 } SignalList; 155 } SignalList;
156 156
157 /* Signal setup function prototypes */ 157 /* Signal setup function prototypes */
158 GObject *_dw_key_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data); 158 GObject *_dw_key_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data);
159 GObject *_dw_button_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data); 159 GObject *_dw_button_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data);
160 GObject *_dw_mouse_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data); 160 GObject *_dw_mouse_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data);
161 GObject *_dw_motion_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data); 161 GObject *_dw_motion_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data);
162 GObject *_dw_draw_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data); 162 GObject *_dw_draw_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data);
163 GObject *_dw_value_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data); 163 GObject *_dw_value_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data);
164 GObject *_dw_tree_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data); 164 GObject *_dw_tree_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data);
165 GObject *_dw_focus_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data); 165 GObject *_dw_focus_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data);
166 #ifdef USE_WEBKIT 166 #ifdef USE_WEBKIT
167 GObject *_dw_html_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data); 167 GObject *_dw_html_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data);
168 #endif 168 #endif
169 169
170 typedef struct 170 typedef struct
171 { 171 {
172 HWND window; 172 HWND window;
9584 } 9584 }
9585 9585
9586 #define _DW_INTERNAL_CALLBACK_PARAMS 4 9586 #define _DW_INTERNAL_CALLBACK_PARAMS 4
9587 9587
9588 /* Signal setup functions */ 9588 /* Signal setup functions */
9589 GObject *_dw_key_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data) 9589 GObject *_dw_key_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data)
9590 { 9590 {
9591 if(GTK_IS_WIDGET(object)) 9591 if(GTK_IS_WIDGET(object))
9592 { 9592 {
9593 GtkEventController *controller = gtk_event_controller_key_new(); 9593 GtkEventController *controller = gtk_event_controller_key_new();
9594 gtk_widget_add_controller(GTK_WIDGET(object), controller); 9594 gtk_widget_add_controller(GTK_WIDGET(object), controller);
9595 return G_OBJECT(controller); 9595 return G_OBJECT(controller);
9596 } 9596 }
9597 return object; 9597 return object;
9598 } 9598 }
9599 9599
9600 GObject *_dw_button_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data) 9600 GObject *_dw_button_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data)
9601 { 9601 {
9602 /* Special case for handling notification signals, which aren't really signals */ 9602 /* Special case for handling notification signals, which aren't really signals */
9603 if(G_IS_NOTIFICATION(object) && strcmp(signal->name, DW_SIGNAL_CLICKED) == 0) 9603 if(G_IS_NOTIFICATION(object) && strcmp(signal->name, DW_SIGNAL_CLICKED) == 0)
9604 { 9604 {
9605 char textbuf[101] = {0}; 9605 char textbuf[101] = {0};
9621 { 9621 {
9622 int cid, sigid = _dw_set_signal_handler(G_OBJECT(object), (HWND)object, sigfunc, data, (gpointer)_dw_menu_handler, discfunc); 9622 int cid, sigid = _dw_set_signal_handler(G_OBJECT(object), (HWND)object, sigfunc, data, (gpointer)_dw_menu_handler, discfunc);
9623 void **newparams = calloc(sizeof(void *), 3); 9623 void **newparams = calloc(sizeof(void *), 3);
9624 9624
9625 newparams[0] = DW_INT_TO_POINTER(sigid); 9625 newparams[0] = DW_INT_TO_POINTER(sigid);
9626 newparams[1] = params[1]; 9626 newparams[1] = discfunc;
9627 newparams[2] = DW_POINTER(object); 9627 newparams[2] = DW_POINTER(object);
9628 cid = g_signal_connect_data(G_OBJECT(action), "activate", G_CALLBACK(_dw_menu_handler), newparams, _dw_signal_disconnect, 0); 9628 cid = g_signal_connect_data(G_OBJECT(action), "activate", G_CALLBACK(_dw_menu_handler), newparams, _dw_signal_disconnect, 0);
9629 _dw_set_signal_handler_id(object, sigid, cid); 9629 _dw_set_signal_handler_id(object, sigid, cid);
9630 } 9630 }
9631 return NULL; 9631 return NULL;
9632 } 9632 }
9633 return object; 9633 return object;
9634 } 9634 }
9635 9635
9636 GObject *_dw_mouse_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data) 9636 GObject *_dw_mouse_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data)
9637 { 9637 {
9638 if(GTK_IS_WIDGET(object)) 9638 if(GTK_IS_WIDGET(object))
9639 { 9639 {
9640 GtkGesture *gesture = gtk_gesture_click_new(); 9640 GtkGesture *gesture = gtk_gesture_click_new();
9641 gtk_widget_add_controller(GTK_WIDGET(object), GTK_EVENT_CONTROLLER(gesture)); 9641 gtk_widget_add_controller(GTK_WIDGET(object), GTK_EVENT_CONTROLLER(gesture));
9642 return G_OBJECT(gesture); 9642 return G_OBJECT(gesture);
9643 } 9643 }
9644 return object; 9644 return object;
9645 } 9645 }
9646 9646
9647 GObject *_dw_motion_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data) 9647 GObject *_dw_motion_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data)
9648 { 9648 {
9649 if(GTK_IS_WIDGET(object)) 9649 if(GTK_IS_WIDGET(object))
9650 { 9650 {
9651 GtkEventController *controller = gtk_event_controller_motion_new(); 9651 GtkEventController *controller = gtk_event_controller_motion_new();
9652 gtk_widget_add_controller(GTK_WIDGET(object), controller); 9652 gtk_widget_add_controller(GTK_WIDGET(object), controller);
9653 return G_OBJECT(controller); 9653 return G_OBJECT(controller);
9654 } 9654 }
9655 return object; 9655 return object;
9656 } 9656 }
9657 9657
9658 GObject *_dw_draw_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data) 9658 GObject *_dw_draw_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data)
9659 { 9659 {
9660 if(GTK_IS_DRAWING_AREA(object)) 9660 if(GTK_IS_DRAWING_AREA(object))
9661 { 9661 {
9662 g_object_set_data(object, "_dw_expose_func", sigfunc); 9662 g_object_set_data(object, "_dw_expose_func", sigfunc);
9663 gtk_drawing_area_set_draw_func(GTK_DRAWING_AREA(object), signal->func, data, NULL); 9663 gtk_drawing_area_set_draw_func(GTK_DRAWING_AREA(object), signal->func, data, NULL);
9664 return NULL; 9664 return NULL;
9665 } 9665 }
9666 return object; 9666 return object;
9667 } 9667 }
9668 9668
9669 GObject *_dw_tree_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data) 9669 GObject *_dw_tree_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data)
9670 { 9670 {
9671 if(GTK_IS_TREE_VIEW(object)) 9671 if(GTK_IS_TREE_VIEW(object))
9672 { 9672 {
9673 if(strcmp(signal->name, DW_SIGNAL_COLUMN_CLICK) == 0) 9673 if(strcmp(signal->name, DW_SIGNAL_COLUMN_CLICK) == 0)
9674 { 9674 {
9695 } 9695 }
9696 } 9696 }
9697 return object; 9697 return object;
9698 } 9698 }
9699 9699
9700 GObject *_dw_value_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data) 9700 GObject *_dw_value_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data)
9701 { 9701 {
9702 if(GTK_IS_SCALE(object) || GTK_IS_SCROLLBAR(object) || GTK_IS_SPIN_BUTTON(object)) 9702 if(GTK_IS_SCALE(object) || GTK_IS_SCROLLBAR(object) || GTK_IS_SPIN_BUTTON(object))
9703 return G_OBJECT(g_object_get_data(object, "_dw_adjustment")); 9703 return G_OBJECT(g_object_get_data(object, "_dw_adjustment"));
9704 return object; 9704 return object;
9705 } 9705 }
9706 9706
9707 GObject *_dw_focus_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data) 9707 GObject *_dw_focus_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data)
9708 { 9708 {
9709 if(GTK_IS_COMBO_BOX(object) && strcmp(signal->name, DW_SIGNAL_SET_FOCUS) == 0) 9709 if(GTK_IS_COMBO_BOX(object) && strcmp(signal->name, DW_SIGNAL_SET_FOCUS) == 0)
9710 return G_OBJECT(gtk_combo_box_get_child(GTK_COMBO_BOX(object))); 9710 return G_OBJECT(gtk_combo_box_get_child(GTK_COMBO_BOX(object)));
9711 return object; 9711 return object;
9712 } 9712 }
9713 9713
9714 #ifdef USE_WEBKIT 9714 #ifdef USE_WEBKIT
9715 GObject *_dw_html_setup(struct _dw_signal_list *signal, GObject *object, void *params[], void *sigfunc, void *discfunc, void *data) 9715 GObject *_dw_html_setup(struct _dw_signal_list *signal, GObject *object, void *sigfunc, void *discfunc, void *data)
9716 { 9716 {
9717 if(WEBKIT_IS_WEB_VIEW(object) && strcmp(signal->name, DW_SIGNAL_HTML_RESULT) == 0) 9717 if(WEBKIT_IS_WEB_VIEW(object) && strcmp(signal->name, DW_SIGNAL_HTML_RESULT) == 0)
9718 { 9718 {
9719 /* We don't actually need a signal handler here... just need to assign the handler ID 9719 /* We don't actually need a signal handler here... just need to assign the handler ID
9720 * Since the handler is created in dw_html_javasript_run() 9720 * Since the handler is created in dw_html_javasript_run()
9741 SignalList signal = _dw_findsignal(signame); 9741 SignalList signal = _dw_findsignal(signame);
9742 9742
9743 if(signal.func) 9743 if(signal.func)
9744 { 9744 {
9745 GObject *object = (GObject *)window; 9745 GObject *object = (GObject *)window;
9746 void **params = calloc(_DW_INTERNAL_CALLBACK_PARAMS, sizeof(void *)); 9746 void **params;
9747 int sigid; 9747 int sigid;
9748 gint cid; 9748 gint cid;
9749 9749
9750 /* Save the disconnect function pointer */
9751 params[1] = discfunc;
9752
9753 /* 9750 /*
9754 * If the window we are setting the signal on is a scrolled window we need to get 9751 * If the window we are setting the signal on is a scrolled window we need to get
9755 * the "real" widget type. thiswindow is the "real" widget type 9752 * the "real" widget type. thiswindow is the "real" widget type
9756 */ 9753 */
9757 if (GTK_IS_SCROLLED_WINDOW(window) 9754 if (GTK_IS_SCROLLED_WINDOW(window)
9761 ) 9758 )
9762 object = (GObject *)g_object_get_data(G_OBJECT(window), "_dw_user"); 9759 object = (GObject *)g_object_get_data(G_OBJECT(window), "_dw_user");
9763 9760
9764 /* Do object class specific setup */ 9761 /* Do object class specific setup */
9765 if(signal.setup) 9762 if(signal.setup)
9766 object = signal.setup(&signal, object, params, sigfunc, discfunc, data); 9763 object = signal.setup(&signal, object, sigfunc, discfunc, data);
9767 9764
9768 if(!object) 9765 if(!object)
9769 {
9770 free(params);
9771 return; 9766 return;
9772 } 9767
9773 9768 params = calloc(_DW_INTERNAL_CALLBACK_PARAMS, sizeof(void *));
9774 sigid = _dw_set_signal_handler(object, window, sigfunc, data, signal.func, discfunc); 9769 sigid = _dw_set_signal_handler(object, window, sigfunc, data, signal.func, discfunc);
9775 params[0] = DW_INT_TO_POINTER(sigid); 9770 params[0] = DW_INT_TO_POINTER(sigid);
9771 /* Save the disconnect function pointer */
9772 params[1] = discfunc;
9776 params[2] = DW_POINTER(object); 9773 params[2] = DW_POINTER(object);
9777 cid = g_signal_connect_data(object, signal.gname, G_CALLBACK(signal.func), params, _dw_signal_disconnect, 0); 9774 cid = g_signal_connect_data(object, signal.gname, G_CALLBACK(signal.func), params, _dw_signal_disconnect, 0);
9778 _dw_set_signal_handler_id(object, sigid, cid); 9775 _dw_set_signal_handler_id(object, sigid, cid);
9779 } 9776 }
9780 } 9777 }