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