From 2220a0e4b8cc6df9fdc9ea5f313bc76b60ab7bbd Mon Sep 17 00:00:00 2001 From: Diederik ter Rahe Date: Thu, 27 Nov 2025 13:11:02 +0100 Subject: [PATCH 1/2] minimal compile time check for wrong signal handler return type --- src/common/camera_control.c | 2 +- src/control/signal.c | 3 ++- src/develop/imageop_gui.c | 4 ++-- src/gui/gtk.c | 18 +++++++++--------- src/gui/gtk.h | 22 ++++++++++++++++++++++ src/gui/hist_dialog.c | 2 +- src/gui/presets.c | 2 +- src/libs/collect.c | 4 ++-- src/libs/filtering.c | 2 +- src/libs/map_locations.c | 8 ++++---- src/libs/masks.c | 32 ++++++++++++++++---------------- src/libs/modulegroups.c | 12 ++++++------ src/libs/tagging.c | 33 ++++++++++++++++----------------- src/lua/widget/widget.c | 2 +- 14 files changed, 84 insertions(+), 62 deletions(-) diff --git a/src/common/camera_control.c b/src/common/camera_control.c index f89ccb46e7b1..36da27a94e83 100644 --- a/src/common/camera_control.c +++ b/src/common/camera_control.c @@ -1677,7 +1677,7 @@ static void _camera_build_property_menu(CameraWidget *widget, /* construct menu item for property */ gp_widget_get_name(child, &sk); GtkMenuItem *item = GTK_MENU_ITEM(gtk_menu_item_new_with_label(sk)); - g_signal_connect(G_OBJECT(item), "activate", item_activate, user_data); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(item_activate), user_data); /* add submenu item to menu */ gtk_menu_shell_append(GTK_MENU_SHELL(menu), GTK_WIDGET(item)); } diff --git a/src/control/signal.c b/src/control/signal.c index b2595d4c0736..4bb39d4f1c36 100644 --- a/src/control/signal.c +++ b/src/control/signal.c @@ -94,6 +94,7 @@ static void _image_geotag_destroy_callback(gpointer instance, gpointer imgs, con } } +#define G_CALLBACK(f) ((GCallback) (f)) static dt_signal_description _signal_description[DT_SIGNAL_COUNT] = { /* Global signals */ [DT_SIGNAL_MOUSE_OVER_IMAGE_CHANGE] = { "dt-global-mouse-over-image-change", @@ -394,7 +395,7 @@ void dt_control_signal_connect(const dt_control_signal_t *ctlsig, dt_signal_t si { _print_trace(signal, DT_DEBUG_SIGNAL_ACT_CONNECT, "connect"); - g_signal_connect(G_OBJECT(ctlsig->sink), _signal_description[signal].name, G_CALLBACK(cb), user_data); + g_signal_connect_data(G_OBJECT(ctlsig->sink), _signal_description[signal].name, G_CALLBACK(cb), user_data, NULL, 0); } void dt_control_signal_disconnect(const struct dt_control_signal_t *ctlsig, GCallback cb, gpointer user_data) diff --git a/src/develop/imageop_gui.c b/src/develop/imageop_gui.c index 1b11d6e1d29d..6a65098ee6d1 100644 --- a/src/develop/imageop_gui.c +++ b/src/develop/imageop_gui.c @@ -268,7 +268,7 @@ GtkWidget *dt_iop_togglebutton_new(dt_iop_module_t *self, const char *section, c DTGTKCairoPaintIconFunc paint, GtkWidget *box) { GtkWidget *w = dtgtk_togglebutton_new(paint, 0, NULL); - g_signal_connect(G_OBJECT(w), "button-press-event", callback, self); + g_signal_connect_data(G_OBJECT(w), "button-press-event", callback, self, NULL, 0); if(!ctrl_label) gtk_widget_set_tooltip_text(w, _(label)); @@ -304,7 +304,7 @@ GtkWidget *dt_iop_button_new(dt_iop_module_t *self, const gchar *label, gtk_label_set_ellipsize(GTK_LABEL(gtk_bin_get_child(GTK_BIN(button))), PANGO_ELLIPSIZE_END); } - g_signal_connect(G_OBJECT(button), "clicked", callback, (gpointer)self); + g_signal_connect_data(G_OBJECT(button), "clicked", callback, (gpointer)self, NULL, 0); dt_action_t *ac = dt_action_define_iop(self, NULL, label, button, &dt_action_def_button); dt_shortcut_register(ac, 0, 0, accel_key, mods); diff --git a/src/gui/gtk.c b/src/gui/gtk.c index 228f9ad21f63..7604e4e2ce89 100644 --- a/src/gui/gtk.c +++ b/src/gui/gtk.c @@ -1378,10 +1378,10 @@ int dt_gui_gtk_init(dt_gui_gtk_t *gui) gtkosx_application_set_window_menu(OSXApp, GTK_MENU_ITEM(window_root_menu)); gtkosx_application_set_help_menu(OSXApp, GTK_MENU_ITEM(help_root_menu)); - g_signal_connect(G_OBJECT(OSXApp), "NSApplicationBlockTermination", - G_CALLBACK(_osx_quit_callback), NULL); - g_signal_connect(G_OBJECT(OSXApp), "NSApplicationOpenFile", - G_CALLBACK(_osx_openfile_callback), NULL); + g_signal_connect_data(G_OBJECT(OSXApp), "NSApplicationBlockTermination", + G_CALLBACK(_osx_quit_callback), NULL, NULL, 0); + g_signal_connect_data(G_OBJECT(OSXApp), "NSApplicationOpenFile", + G_CALLBACK(_osx_openfile_callback), NULL, NULL, 0); #endif #ifdef _WIN32 @@ -4465,10 +4465,10 @@ GtkGestureSingle *(dt_gui_connect_click)(GtkWidget *widget, // GTK4 GtkGesture *gesture = gtk_gesture_click_new(); // gtk_widget_add_controller(widget, GTK_EVENT_CONTROLLER(gesture)); - if(pressed) g_signal_connect(gesture, "pressed", pressed, data); + if(pressed) g_signal_connect(gesture, "pressed", G_CALLBACK(pressed), data); if(released) { - g_signal_connect(gesture, "released", released, data); + g_signal_connect(gesture, "released", G_CALLBACK(released), data); g_signal_connect(gesture, "cancel", G_CALLBACK(_gesture_cancel), NULL); } @@ -4488,9 +4488,9 @@ GtkEventController *(dt_gui_connect_motion)(GtkWidget *widget, gtk_widget_add_events(widget, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); // still needed for now by _main_do_event_keymap - if(motion) g_signal_connect(controller, "motion", motion, data); - if(enter) g_signal_connect(controller, "enter", enter, data); - if(leave) g_signal_connect(controller, "leave", leave, data); + if(motion) g_signal_connect(controller, "motion", G_CALLBACK(motion), data); + if(enter) g_signal_connect(controller, "enter", G_CALLBACK(enter), data); + if(leave) g_signal_connect(controller, "leave", G_CALLBACK(leave), data); return controller; } diff --git a/src/gui/gtk.h b/src/gui/gtk.h index 8ee46777e981..de28cc7ef3ed 100644 --- a/src/gui/gtk.h +++ b/src/gui/gtk.h @@ -638,6 +638,28 @@ void dt_gui_dialog_restore_size(GtkDialog *dialog, const char *conf); // returns the session type at runtime dt_gui_session_type_t dt_gui_get_session_type(void); +#if !defined(__cplusplus) +#undef G_CALLBACK +static inline GCallback G_CALLBACK(void *f) { return (GCallback)f; } // as a macro it gets expanded before reaching here +#define DISABLINGPREFIXG_CALLBACK +#define BOOLSIGNAL(s, signal) || !strcmp(s, #signal) +#undef _Static_assert +#undef g_signal_connect +#define g_signal_connect(instance, signal, c_handler, user_data) do { \ + _Static_assert(((strlen(signal)>4 && !strcmp("event", &signal[strlen(signal)-5])) \ + BOOLSIGNAL(signal, drag-motion) \ + BOOLSIGNAL(signal, drag-failed) \ + BOOLSIGNAL(signal, drag-drop) \ + BOOLSIGNAL(signal, focus) \ + BOOLSIGNAL(signal, draw) \ + BOOLSIGNAL(signal, popup-menu) \ + BOOLSIGNAL(signal, query-tooltip) \ + BOOLSIGNAL(signal, match-selected) \ + ) == _Generic((DISABLINGPREFIX##c_handler), gboolean(*)(): TRUE, default: FALSE), \ + "signal " signal " return type does not match specified handler " #c_handler); \ + g_signal_connect_data((instance), (signal), (GCallback)(c_handler), (user_data), NULL, (GConnectFlags) 0); } while(0) +#endif // __cplusplus + G_END_DECLS // clang-format off diff --git a/src/gui/hist_dialog.c b/src/gui/hist_dialog.c index 4b15472e9902..ccd3dd7ac6fb 100644 --- a/src/gui/hist_dialog.c +++ b/src/gui/hist_dialog.c @@ -374,7 +374,7 @@ int dt_gui_hist_dialog_new(dt_history_copy_item_t *d, } g_signal_connect(GTK_TREE_VIEW(d->items), "row-activated", - (GCallback)tree_on_row_activated, GTK_WIDGET(dialog)); + G_CALLBACK(tree_on_row_activated), GTK_WIDGET(dialog)); g_object_unref(liststore); g_signal_connect(dialog, "response", G_CALLBACK(_gui_hist_copy_response), d); diff --git a/src/gui/presets.c b/src/gui/presets.c index 862839c7411b..bf79dd1c288e 100644 --- a/src/gui/presets.c +++ b/src/gui/presets.c @@ -981,7 +981,7 @@ static void _edit_preset(const char *name_in, dt_iop_module_t *module) name = g_strdup(name_in); dt_gui_presets_show_iop_edit_dialog - (name, module, (GCallback)_edit_preset_final_callback, NULL, TRUE, TRUE, + (name, module, G_CALLBACK(_edit_preset_final_callback), NULL, TRUE, TRUE, FALSE, GTK_WINDOW(dt_ui_main_window(darktable.gui->ui))); g_free(name); } diff --git a/src/libs/collect.c b/src/libs/collect.c index 9bda03e14e18..d2201c280384 100644 --- a/src/libs/collect.c +++ b/src/libs/collect.c @@ -588,13 +588,13 @@ static void view_popup_menu(GtkWidget *treeview, menuitem = gtk_menu_item_new_with_label(_("update path to files...")); g_signal_connect(menuitem, "activate", - (GCallback)view_popup_menu_onSearchFilmroll, treeview); + G_CALLBACK(view_popup_menu_onSearchFilmroll), treeview); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = gtk_menu_item_new_with_label(_("remove...")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); g_signal_connect(menuitem, "activate", - (GCallback)view_popup_menu_onRemove, treeview); + G_CALLBACK(view_popup_menu_onRemove), treeview); gtk_widget_show_all(GTK_WIDGET(menu)); diff --git a/src/libs/filtering.c b/src/libs/filtering.c index e6a9bfb5dafc..0294d2f7f526 100644 --- a/src/libs/filtering.c +++ b/src/libs/filtering.c @@ -867,7 +867,7 @@ static void _popup_add_item(GtkMenuShell *pop, const gchar *name, const int id, g_object_set_data(G_OBJECT(smt), "collect_id", GINT_TO_POINTER(id)); g_object_set_data(G_OBJECT(smt), "topbar", GINT_TO_POINTER(0)); if(data) g_object_set_data(G_OBJECT(smt), "collect_data", data); - g_signal_connect(G_OBJECT(smt), "activate", callback, self); + g_signal_connect_data(G_OBJECT(smt), "activate", callback, self, NULL, 0); } gtk_menu_shell_append(pop, smt); } diff --git a/src/libs/map_locations.c b/src/libs/map_locations.c index f7d5952ae4b0..3a3e1ffb7b0c 100644 --- a/src/libs/map_locations.c +++ b/src/libs/map_locations.c @@ -774,10 +774,10 @@ static void _pop_menu_view(GtkWidget *view, GdkEventButton *event, dt_lib_module const gboolean children = gtk_tree_model_iter_children(model, &child, &parent); menuitem = gtk_menu_item_new_with_label(_("edit location")); - g_signal_connect(menuitem, "activate", (GCallback)_pop_menu_edit_location, self); + g_signal_connect(menuitem, "activate", G_CALLBACK(_pop_menu_edit_location), self); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = gtk_menu_item_new_with_label(_("delete location")); - g_signal_connect(menuitem, "activate", (GCallback)_pop_menu_delete_location, self); + g_signal_connect(menuitem, "activate", G_CALLBACK(_pop_menu_delete_location), self); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); if(children) { @@ -792,10 +792,10 @@ static void _pop_menu_view(GtkWidget *view, GdkEventButton *event, dt_lib_module { gtk_widget_set_sensitive(menuitem, FALSE); } - g_signal_connect(menuitem, "activate", (GCallback)_pop_menu_update_filmstrip, self); + g_signal_connect(menuitem, "activate", G_CALLBACK(_pop_menu_update_filmstrip), self); menuitem = gtk_menu_item_new_with_label(_("go to collection (lighttable)")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - g_signal_connect(menuitem, "activate", (GCallback)_pop_menu_goto_collection, self); + g_signal_connect(menuitem, "activate", G_CALLBACK(_pop_menu_goto_collection), self); if(!locid) { gtk_widget_set_sensitive(menuitem, FALSE); diff --git a/src/libs/masks.c b/src/libs/masks.c index 2e02dae44bb7..866bc850d6f7 100644 --- a/src/libs/masks.c +++ b/src/libs/masks.c @@ -524,7 +524,7 @@ static void _add_tree_operation(GtkMenuShell *menu, gtk_widget_set_sensitive(item, sensitive); if(selected_states & state) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE); - g_signal_connect(item, "activate", (GCallback)_tree_operation, + g_signal_connect(item, "activate", G_CALLBACK(_tree_operation), GINT_TO_POINTER(state)); gtk_menu_shell_append(menu, item); } @@ -982,27 +982,27 @@ static int _tree_button_pressed(GtkWidget *treeview, if(nb == 0 || (grp && grp->type & DT_MASKS_GROUP)) { item = gtk_menu_item_new_with_label(_("add brush")); - g_signal_connect(item, "activate", (GCallback)_tree_add_shape, + g_signal_connect(item, "activate", G_CALLBACK(_tree_add_shape), GINT_TO_POINTER(DT_MASKS_BRUSH)); gtk_menu_shell_append(menu, item); item = gtk_menu_item_new_with_label(_("add circle")); - g_signal_connect(item, "activate", (GCallback)_tree_add_shape, + g_signal_connect(item, "activate", G_CALLBACK(_tree_add_shape), GINT_TO_POINTER(DT_MASKS_CIRCLE)); gtk_menu_shell_append(menu, item); item = gtk_menu_item_new_with_label(_("add ellipse")); - g_signal_connect(item, "activate", (GCallback)_tree_add_shape, + g_signal_connect(item, "activate", G_CALLBACK(_tree_add_shape), GINT_TO_POINTER(DT_MASKS_ELLIPSE)); gtk_menu_shell_append(menu, item); item = gtk_menu_item_new_with_label(_("add path")); - g_signal_connect(item, "activate", (GCallback)_tree_add_shape, + g_signal_connect(item, "activate", G_CALLBACK(_tree_add_shape), GINT_TO_POINTER(DT_MASKS_PATH)); gtk_menu_shell_append(menu, item); item = gtk_menu_item_new_with_label(_("add gradient")); - g_signal_connect(item, "activate", (GCallback)_tree_add_shape, + g_signal_connect(item, "activate", G_CALLBACK(_tree_add_shape), GINT_TO_POINTER(DT_MASKS_GRADIENT)); gtk_menu_shell_append(menu, item); } @@ -1085,24 +1085,24 @@ static int _tree_button_pressed(GtkWidget *treeview, if(nb == 1) { item = gtk_menu_item_new_with_label(_("duplicate this shape")); - g_signal_connect(item, "activate", (GCallback)_tree_duplicate_shape, self); + g_signal_connect(item, "activate", G_CALLBACK(_tree_duplicate_shape), self); gtk_menu_shell_append(menu, item); } item = gtk_menu_item_new_with_label(_("delete this shape")); - g_signal_connect(item, "activate", (GCallback)_tree_delete_shape, self); + g_signal_connect(item, "activate", G_CALLBACK(_tree_delete_shape), self); gtk_menu_shell_append(menu, item); } else { item = gtk_menu_item_new_with_label(_("delete group")); - g_signal_connect(item, "activate", (GCallback)_tree_delete_shape, self); + g_signal_connect(item, "activate", G_CALLBACK(_tree_delete_shape), self); gtk_menu_shell_append(menu, item); } } else if(nb > 0 && depth < 3) { item = gtk_menu_item_new_with_label(_("remove from group")); - g_signal_connect(item, "activate", (GCallback)_tree_delete_shape, self); + g_signal_connect(item, "activate", G_CALLBACK(_tree_delete_shape), self); gtk_menu_shell_append(menu, item); } @@ -1110,7 +1110,7 @@ static int _tree_button_pressed(GtkWidget *treeview, { gtk_menu_shell_append(menu, gtk_separator_menu_item_new()); item = gtk_menu_item_new_with_label(_("group the forms")); - g_signal_connect(item, "activate", (GCallback)_tree_group, self); + g_signal_connect(item, "activate", G_CALLBACK(_tree_group), self); gtk_menu_shell_append(menu, item); } @@ -1135,18 +1135,18 @@ static int _tree_button_pressed(GtkWidget *treeview, gtk_menu_shell_append(menu, gtk_separator_menu_item_new()); item = gtk_menu_item_new_with_label(_("move up")); gtk_widget_set_sensitive(item, !is_first_row); - g_signal_connect(item, "activate", (GCallback)_tree_moveup, self); + g_signal_connect(item, "activate", G_CALLBACK(_tree_moveup), self); gtk_menu_shell_append(menu, item); item = gtk_menu_item_new_with_label(_("move down")); gtk_widget_set_sensitive(item, !is_last_row); - g_signal_connect(item, "activate", (GCallback)_tree_movedown, self); + g_signal_connect(item, "activate", G_CALLBACK(_tree_movedown), self); gtk_menu_shell_append(menu, item); } gtk_menu_shell_append(menu, gtk_separator_menu_item_new()); item = gtk_menu_item_new_with_label(_("delete unused shapes")); - g_signal_connect(item, "activate", (GCallback)_tree_cleanup, self); + g_signal_connect(item, "activate", G_CALLBACK(_tree_cleanup), self); gtk_menu_shell_append(menu, item); gtk_widget_show_all(GTK_WIDGET(menu)); @@ -1850,7 +1850,7 @@ void gui_init(dt_lib_module_t *self) gtk_tree_view_column_pack_start(col, renderer, TRUE); gtk_tree_view_column_add_attribute(col, renderer, "text", TREE_TEXT); gtk_tree_view_column_add_attribute(col, renderer, "editable", TREE_EDITABLE); - g_signal_connect(renderer, "edited", (GCallback)_tree_cell_edited, self); + g_signal_connect(renderer, "edited", G_CALLBACK(_tree_cell_edited), self); dt_gui_commit_on_focus_loss(renderer, NULL); renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_end(col, renderer, FALSE); @@ -1865,7 +1865,7 @@ void gui_init(dt_lib_module_t *self) g_signal_connect(d->treeview, "query-tooltip", G_CALLBACK(_tree_query_tooltip), NULL); g_signal_connect(selection, "changed", G_CALLBACK(_tree_selection_change), d); g_signal_connect(d->treeview, "button-press-event", - (GCallback)_tree_button_pressed, self); + G_CALLBACK(_tree_button_pressed), self); self->widget = dt_gui_vbox (dt_gui_hbox diff --git a/src/libs/modulegroups.c b/src/libs/modulegroups.c index 7690e939dbfc..abea8f0e78c2 100644 --- a/src/libs/modulegroups.c +++ b/src/libs/modulegroups.c @@ -2376,7 +2376,7 @@ static void _manage_module_add_popup(GtkWidget *widget, gtk_widget_set_tooltip_text(GTK_WIDGET(smir), _("add this module")); g_object_set_data(G_OBJECT(smir), "module_op", module->op); g_object_set_data(G_OBJECT(smir), "group", gr); - g_signal_connect(G_OBJECT(smir), "activate", callback, data); + g_signal_connect_data(G_OBJECT(smir), "activate", callback, data, NULL, 0); gtk_menu_shell_insert(GTK_MENU_SHELL(pop), GTK_WIDGET(smir), nba); } GtkMenuItem *smi = (GtkMenuItem *)gtk_menu_item_new_with_label(module->name()); @@ -2384,7 +2384,7 @@ static void _manage_module_add_popup(GtkWidget *widget, gtk_widget_set_tooltip_text(GTK_WIDGET(smi), _("add this module")); g_object_set_data(G_OBJECT(smi), "module_op", module->op); g_object_set_data(G_OBJECT(smi), "group", gr); - g_signal_connect(G_OBJECT(smi), "activate", callback, data); + g_signal_connect_data(G_OBJECT(smi), "activate", callback, data, NULL, 0); gtk_menu_shell_prepend(GTK_MENU_SHELL(sm_all), GTK_WIDGET(smi)); } else if(toggle) @@ -2394,7 +2394,7 @@ static void _manage_module_add_popup(GtkWidget *widget, gtk_widget_set_tooltip_text(GTK_WIDGET(smi), _("remove this module")); g_object_set_data(G_OBJECT(smi), "module_op", module->op); g_object_set_data(G_OBJECT(smi), "group", gr); - g_signal_connect(G_OBJECT(smi), "activate", callback, data); + g_signal_connect_data(G_OBJECT(smi), "activate", callback, data, NULL, 0); gtk_menu_shell_insert(GTK_MENU_SHELL(pop), GTK_WIDGET(smi), 0); nba++; } @@ -2548,7 +2548,7 @@ static GtkWidget *_build_menu_from_actions(dt_action_t *actions, gtk_widget_set_tooltip_text(item_top, _("remove this widget")); gtk_widget_set_name(item_top, "modulegroups-popup-item"); g_object_set_data(G_OBJECT(item_top), "widget_id", action); - g_signal_connect(G_OBJECT(item_top), "activate", callback, self); + g_signal_connect_data(G_OBJECT(item_top), "activate", callback, self, NULL, 0); gtk_menu_shell_insert(GTK_MENU_SHELL(base_menu), item_top, *num_selected); ++*num_selected; } @@ -2565,7 +2565,7 @@ static GtkWidget *_build_menu_from_actions(dt_action_t *actions, gtk_widget_set_tooltip_text(item_top, _("add this widget")); gtk_widget_set_name(item_top, "modulegroups-popup-item"); g_object_set_data(G_OBJECT(item_top), "widget_id", action); - g_signal_connect(G_OBJECT(item_top), "activate", callback, self); + g_signal_connect_data(G_OBJECT(item_top), "activate", callback, self, NULL, 0); gtk_menu_shell_append(GTK_MENU_SHELL(base_menu), item_top); } g_free(delimited_id); @@ -2583,7 +2583,7 @@ static GtkWidget *_build_menu_from_actions(dt_action_t *actions, } g_object_set_data(G_OBJECT(item), "widget_id", action); - g_signal_connect(G_OBJECT(item), "activate", callback, self); + g_signal_connect_data(G_OBJECT(item), "activate", callback, self, NULL, 0); g_free(action_id); } g_free(action_label); diff --git a/src/libs/tagging.c b/src/libs/tagging.c index 07055024ed13..b89a2dc8ab83 100644 --- a/src/libs/tagging.c +++ b/src/libs/tagging.c @@ -1414,7 +1414,7 @@ static void _pop_menu_attached(GtkWidget *treeview, { menuitem = gtk_menu_item_new_with_label(_("attach tag to all")); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_attached_attach_to_all, self); + G_CALLBACK(_pop_menu_attached_attach_to_all), self); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); @@ -1423,15 +1423,14 @@ static void _pop_menu_attached(GtkWidget *treeview, menuitem = gtk_menu_item_new_with_label(_("detach tag")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - g_signal_connect(menuitem, "activate", (GCallback)_pop_menu_attached_detach, self); + g_signal_connect(menuitem, "activate", G_CALLBACK(_pop_menu_attached_detach), self); menuitem = gtk_menu_item_new_with_label(_("find tag")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - g_signal_connect(menuitem, "activate", (GCallback)_pop_menu_attached_find, self); - + g_signal_connect(menuitem, "activate", G_CALLBACK(_pop_menu_attached_find), self); menuitem = gtk_menu_item_new_with_label(_("copy to clipboard")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - g_signal_connect(menuitem, "activate", (GCallback)_pop_menu_attached_clipboard, self); + g_signal_connect(menuitem, "activate", G_CALLBACK(_pop_menu_attached_clipboard), self); gtk_widget_show_all(GTK_WIDGET(menu)); @@ -2494,12 +2493,12 @@ static void _pop_menu_dictionary(GtkWidget *treeview, { menuitem = gtk_menu_item_new_with_label(_("attach tag")); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_attach_tag, self); + G_CALLBACK(_pop_menu_dictionary_attach_tag), self); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = gtk_menu_item_new_with_label(_("detach tag")); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_detach_tag, self); + G_CALLBACK(_pop_menu_dictionary_detach_tag), self); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = gtk_separator_menu_item_new(); @@ -2510,14 +2509,14 @@ static void _pop_menu_dictionary(GtkWidget *treeview, menuitem = gtk_menu_item_new_with_label(_("create tag...")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_create_tag, self); + G_CALLBACK(_pop_menu_dictionary_create_tag), self); if(tagid) { menuitem = gtk_menu_item_new_with_label(_("delete tag")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_delete_tag, self); + G_CALLBACK(_pop_menu_dictionary_delete_tag), self); } if(gtk_tree_model_iter_children(model, &child, &iter)) @@ -2525,13 +2524,13 @@ static void _pop_menu_dictionary(GtkWidget *treeview, menuitem = gtk_menu_item_new_with_label(_("delete node")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_delete_node, self); + G_CALLBACK(_pop_menu_dictionary_delete_node), self); } menuitem = gtk_menu_item_new_with_label(_("edit...")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_edit_tag, self); + G_CALLBACK(_pop_menu_dictionary_edit_tag), self); } if(d->tree_flag) @@ -2539,7 +2538,7 @@ static void _pop_menu_dictionary(GtkWidget *treeview, menuitem = gtk_menu_item_new_with_label(_("change path...")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_change_path, self); + G_CALLBACK(_pop_menu_dictionary_change_path), self); } if(d->tree_flag && !tagid) @@ -2550,7 +2549,7 @@ static void _pop_menu_dictionary(GtkWidget *treeview, menuitem = gtk_menu_item_new_with_label(_("set as a tag")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_set_as_tag, self); + G_CALLBACK(_pop_menu_dictionary_set_as_tag), self); } if(!d->suggestion_flag) @@ -2561,13 +2560,13 @@ static void _pop_menu_dictionary(GtkWidget *treeview, menuitem = gtk_menu_item_new_with_label(_("copy to entry")); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_copy_tag, self); + G_CALLBACK(_pop_menu_dictionary_copy_tag), self); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); menuitem = gtk_menu_item_new_with_label(_("copy to clipboard")); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_clipboard, self); + G_CALLBACK(_pop_menu_dictionary_clipboard), self); if(d->collection[0]) { @@ -2587,14 +2586,14 @@ static void _pop_menu_dictionary(GtkWidget *treeview, { menuitem = gtk_menu_item_new_with_label(_("go to tag collection")); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_goto_tag_collection, self); + G_CALLBACK(_pop_menu_dictionary_goto_tag_collection), self); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); } if(d->collection[0]) { menuitem = gtk_menu_item_new_with_label(_("go back to work")); g_signal_connect(menuitem, "activate", - (GCallback)_pop_menu_dictionary_goto_collection_back, self); + G_CALLBACK(_pop_menu_dictionary_goto_collection_back), self); gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); } } diff --git a/src/lua/widget/widget.c b/src/lua/widget/widget.c index f0fbe7abbdf8..d8194ac9417d 100644 --- a/src/lua/widget/widget.c +++ b/src/lua/widget/widget.c @@ -107,7 +107,7 @@ static int get_widget_params(lua_State *L) lua_pushnil(L); /* first key */ while(lua_next(L, -2) != 0) { - g_signal_connect(widget->widget, lua_tostring(L,-2), G_CALLBACK(lua_touserdata(L,-1)), widget); + g_signal_connect_data(widget->widget, lua_tostring(L,-2), G_CALLBACK(lua_touserdata(L,-1)), widget, NULL, 0); lua_pop(L,1); } lua_pop(L,1); From 9276c59774e4fff2f9934a2e662c774c08dcaa64 Mon Sep 17 00:00:00 2001 From: Diederik ter Rahe Date: Mon, 8 Dec 2025 20:26:15 +0100 Subject: [PATCH 2/2] fix all detected incorrect callback return types --- src/develop/blend_gui.c | 7 +------ src/develop/imageop.c | 9 +++------ src/gui/gtk.c | 8 +++----- src/iop/channelmixerrgb.c | 9 +++------ src/iop/colorbalance.c | 3 ++- src/iop/colorequal.c | 9 ++++----- src/iop/lut3d.c | 2 +- src/iop/overlay.c | 7 ++++--- src/iop/temperature.c | 7 ++++--- src/libs/duplicate.c | 15 +++++++++------ src/libs/export.c | 15 +++++++++------ src/libs/image.c | 4 ++-- src/libs/map_locations.c | 4 ++-- src/libs/masks.c | 5 +++-- src/libs/modulegroups.c | 36 ++++++++++++++--------------------- src/libs/select.c | 2 +- src/libs/styles.c | 10 +++------- src/libs/tools/colorlabels.c | 13 +++++++------ src/libs/tools/viewswitcher.c | 3 ++- src/views/view.c | 3 +-- 20 files changed, 78 insertions(+), 93 deletions(-) diff --git a/src/develop/blend_gui.c b/src/develop/blend_gui.c index 6394bd0fc427..eb1c54ba3977 100644 --- a/src/develop/blend_gui.c +++ b/src/develop/blend_gui.c @@ -2007,13 +2007,8 @@ static void _blendif_hide_output_channels(GtkMenuItem *menuitem, } static void _blendif_options_callback(GtkButton *button, - GdkEventButton *event, dt_iop_module_t *module) { - if(event->button != 1 - && event->button != 2) - return; - const dt_iop_gui_blend_data_t *bd = module->blend_data; if(!bd @@ -3476,7 +3471,7 @@ void dt_iop_gui_init_blending(GtkWidget *iopw, gtk_widget_set_tooltip_text(presets_button, _("blending options")); if(bd->blendif_support) { - g_signal_connect(G_OBJECT(presets_button), "button-press-event", + g_signal_connect(G_OBJECT(presets_button), "clicked", G_CALLBACK(_blendif_options_callback), module); } else diff --git a/src/develop/imageop.c b/src/develop/imageop.c index d09ad452a740..f524a4cf2f0f 100644 --- a/src/develop/imageop.c +++ b/src/develop/imageop.c @@ -875,9 +875,8 @@ static gboolean _rename_module_key_press(GtkWidget *entry, return FALSE; /* event not handled */ } -static gboolean _rename_module_resize(GtkWidget *entry, - GdkEventKey *event, - dt_iop_module_t *module) +static void _rename_module_resize(GtkWidget *entry, + gpointer user) { int width = 0; GtkBorder padding; @@ -887,8 +886,6 @@ static gboolean _rename_module_resize(GtkWidget *entry, gtk_widget_get_state_flags (entry), &padding); gtk_widget_set_size_request(entry, width + padding.left + padding.right + 1, -1); - - return TRUE; } void dt_iop_gui_rename_module(dt_iop_module_t *module) @@ -3011,7 +3008,7 @@ GtkWidget *dt_iop_gui_header_button(dt_iop_module_t *module, g_signal_connect(button, "enter-notify-event", G_CALLBACK(_header_enter_notify_callback), GINT_TO_POINTER(element)); - g_signal_connect(button, "button-press-event", G_CALLBACK(callback), module); + g_signal_connect_data(button, "button-press-event", G_CALLBACK(callback), module, NULL, 0); dt_action_define(&module->so->actions, NULL, NULL, button, NULL); gtk_widget_show(button); diff --git a/src/gui/gtk.c b/src/gui/gtk.c index 7604e4e2ce89..b861d26fe846 100644 --- a/src/gui/gtk.c +++ b/src/gui/gtk.c @@ -752,10 +752,10 @@ static gboolean _borders_scrolled(GtkWidget *widget, return TRUE; } -static gboolean _scrollbar_changed(GtkWidget *widget, - gpointer user_data) +static void _scrollbar_changed(GtkWidget *widget, + gpointer user_data) { - if(darktable.gui->reset) return FALSE; + if(darktable.gui->reset) return; GtkAdjustment *adjustment_x = gtk_range_get_adjustment(GTK_RANGE(darktable.gui->scrollbars.hscrollbar)); @@ -766,8 +766,6 @@ static gboolean _scrollbar_changed(GtkWidget *widget, const gdouble value_y = gtk_adjustment_get_value(adjustment_y); dt_view_manager_scrollbar_changed(darktable.view_manager, value_x, value_y); - - return TRUE; } gboolean _valid_window_placement(const gint saved_x, diff --git a/src/iop/channelmixerrgb.c b/src/iop/channelmixerrgb.c index 657cf81b3793..3c8d71a305f5 100644 --- a/src/iop/channelmixerrgb.c +++ b/src/iop/channelmixerrgb.c @@ -2874,7 +2874,6 @@ static void _start_profiling_callback(GtkWidget *togglebutton, dt_iop_module_t * } static void _run_profile_callback(GtkWidget *widget, - GdkEventButton *event, dt_iop_module_t *self) { if(darktable.gui->reset) return; @@ -2888,7 +2887,6 @@ static void _run_profile_callback(GtkWidget *widget, } static void _run_validation_callback(GtkWidget *widget, - GdkEventButton *event, dt_iop_module_t *self) { if(darktable.gui->reset) return; @@ -2902,7 +2900,6 @@ static void _run_validation_callback(GtkWidget *widget, } static void _commit_profile_callback(GtkWidget *widget, - GdkEventButton *event, dt_iop_module_t *self) { if(darktable.gui->reset) return; @@ -4693,7 +4690,7 @@ void gui_init(dt_iop_module_t *self) g->button_commit = dtgtk_button_new(dtgtk_cairo_paint_check_mark, 0, NULL); dt_action_define_iop(self, N_("calibrate"), N_("accept"), g->button_commit, &dt_action_def_button); - g_signal_connect(G_OBJECT(g->button_commit), "button-press-event", + g_signal_connect(G_OBJECT(g->button_commit), "clicked", G_CALLBACK(_commit_profile_callback), (gpointer)self); gtk_widget_set_tooltip_text(g->button_commit, _("accept the computed profile and set it in the module")); @@ -4701,14 +4698,14 @@ void gui_init(dt_iop_module_t *self) g->button_profile = dtgtk_button_new(dtgtk_cairo_paint_refresh, 0, NULL); dt_action_define_iop(self, N_("calibrate"), N_("recompute"), g->button_profile, &dt_action_def_button); - g_signal_connect(G_OBJECT(g->button_profile), "button-press-event", + g_signal_connect(G_OBJECT(g->button_profile), "clicked", G_CALLBACK(_run_profile_callback), (gpointer)self); gtk_widget_set_tooltip_text(g->button_profile, _("recompute the profile")); g->button_validate = dtgtk_button_new(dtgtk_cairo_paint_softproof, 0, NULL); dt_action_define_iop(self, N_("calibrate"), N_("validate"), g->button_validate, &dt_action_def_button); - g_signal_connect(G_OBJECT(g->button_validate), "button-press-event", + g_signal_connect(G_OBJECT(g->button_validate), "clicked", G_CALLBACK(_run_validation_callback), (gpointer)self); gtk_widget_set_tooltip_text(g->button_validate, _("check the output delta E")); diff --git a/src/iop/colorbalance.c b/src/iop/colorbalance.c index 0ca694cb4b5e..157750ecde0c 100644 --- a/src/iop/colorbalance.c +++ b/src/iop/colorbalance.c @@ -1798,7 +1798,7 @@ static void _configure_slider_blocks(gpointer instance, dt_iop_module_t *self) if(old_container) gtk_widget_show(new_container); } -static void _cycle_layout_callback(GtkWidget *label, GdkEventButton *event, dt_iop_module_t *self) +static gboolean _cycle_layout_callback(GtkWidget *label, GdkEventButton *event, dt_iop_module_t *self) { gchar *layout = dt_conf_get_string("plugins/darkroom/colorbalance/layout"); @@ -1809,6 +1809,7 @@ static void _cycle_layout_callback(GtkWidget *label, GdkEventButton *event, dt_i g_free(layout); _configure_slider_blocks(NULL, self); + return TRUE; } #define HSL_CALLBACK(which) \ diff --git a/src/iop/colorequal.c b/src/iop/colorequal.c index eb44791463e4..eac83bdf195a 100644 --- a/src/iop/colorequal.c +++ b/src/iop/colorequal.c @@ -2814,13 +2814,12 @@ static gboolean _area_button_release_callback(GtkWidget *widget, return FALSE; } -static gboolean _area_size_callback(GtkWidget *widget, - GdkEventButton *event, - const dt_iop_module_t *self) +static void _area_size_callback(GtkWidget *widget, + GdkRectangle *allocation, + const dt_iop_module_t *self) { dt_iop_colorequal_gui_data_t *g = self->gui_data; g->gradients_cached = FALSE; - return FALSE; } void gui_changed(dt_iop_module_t *self, GtkWidget *w, void *previous) @@ -3033,7 +3032,7 @@ void gui_init(dt_iop_module_t *self) G_CALLBACK(_area_motion_notify_callback), self); g_signal_connect(G_OBJECT(g->area), "scroll-event", G_CALLBACK(_area_scrolled_callback), self); - g_signal_connect(G_OBJECT(g->area), "size_allocate", + g_signal_connect(G_OBJECT(g->area), "size-allocate", G_CALLBACK(_area_size_callback), self); GtkWidget *box = self->widget = dt_gui_vbox(g->notebook, g->area); diff --git a/src/iop/lut3d.c b/src/iop/lut3d.c index 1c1e5ae8a2a8..f29c2a1d55be 100644 --- a/src/iop/lut3d.c +++ b/src/iop/lut3d.c @@ -1733,7 +1733,7 @@ void gui_init(dt_iop_module_t *self) gtk_tree_view_append_column((GtkTreeView *)g->lutname, col); GtkTreeSelection *selection = gtk_tree_view_get_selection((GtkTreeView *)g->lutname); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); - g->lutname_handler_id = g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(_lutname_callback), self); + g->lutname_handler_id = g_signal_connect_data(G_OBJECT(selection), "changed", G_CALLBACK(_lutname_callback), self, NULL, 0); dt_gui_box_add(self->widget, g->lutwindow); g_signal_connect(G_OBJECT(g->lutentry), "changed", G_CALLBACK(_entry_callback), self); diff --git a/src/iop/overlay.c b/src/iop/overlay.c index 4021887b7004..ec25d9e480dd 100644 --- a/src/iop/overlay.c +++ b/src/iop/overlay.c @@ -734,9 +734,9 @@ void process(dt_iop_module_t *self, dt_free_align(buf); } -static void _draw_thumb(GtkWidget *area, - cairo_t *crf, - const dt_iop_module_t *self) +static gboolean _draw_thumb(GtkWidget *area, + cairo_t *crf, + const dt_iop_module_t *self) { const dt_iop_overlay_gui_data_t *g = self->gui_data; const dt_iop_overlay_params_t *p = self->params; @@ -807,6 +807,7 @@ static void _draw_thumb(GtkWidget *area, pango_font_description_free(desc); g_object_unref(layout); } + return FALSE; } static void _alignment_callback(const GtkWidget *tb, dt_iop_module_t *self) diff --git a/src/iop/temperature.c b/src/iop/temperature.c index 4b7c5a7cd0ff..f2f35d699e0f 100644 --- a/src/iop/temperature.c +++ b/src/iop/temperature.c @@ -2011,9 +2011,9 @@ static void _gui_sliders_update(dt_iop_module_t *self) gtk_widget_set_visible(GTK_WIDGET(g->scale_y), (img->flags & DT_IMAGE_4BAYER)); } -static void temp_label_click(GtkWidget *label, - GdkEventButton *event, - dt_iop_module_t *self) +static gboolean temp_label_click(GtkWidget *label, + GdkEventButton *event, + dt_iop_module_t *self) { dt_iop_temperature_gui_data_t *g = self->gui_data; @@ -2043,6 +2043,7 @@ static void temp_label_click(GtkWidget *label, _color_temptint_sliders(self); _color_rgb_sliders(self); _color_finetuning_slider(self); + return TRUE; } static void _preference_changed(gpointer instance, dt_iop_module_t *self) diff --git a/src/libs/duplicate.c b/src/libs/duplicate.c index 2a2b27013709..85e8f7352447 100644 --- a/src/libs/duplicate.c +++ b/src/libs/duplicate.c @@ -157,9 +157,9 @@ static void _lib_duplicate_delete(GtkButton *button, dt_lib_module_t *self) g_list_prepend(NULL, GINT_TO_POINTER(imgid))); } -static void _lib_duplicate_thumb_press_callback(GtkWidget *widget, - GdkEventButton *event, - dt_lib_module_t *self) +static gboolean _lib_duplicate_thumb_press_callback(GtkWidget *widget, + GdkEventButton *event, + dt_lib_module_t *self) { dt_lib_duplicate_t *d = self->data; dt_thumbnail_t *thumb = (dt_thumbnail_t *)g_object_get_data(G_OBJECT(widget), "thumb"); @@ -178,16 +178,19 @@ static void _lib_duplicate_thumb_press_callback(GtkWidget *widget, DT_CONTROL_SIGNAL_RAISE(DT_SIGNAL_VIEWMANAGER_THUMBTABLE_ACTIVATE, imgid); } } + return TRUE; } -static void _lib_duplicate_thumb_release_callback(GtkWidget *widget, - GdkEventButton *event, - dt_lib_module_t *self) +static gboolean _lib_duplicate_thumb_release_callback(GtkWidget *widget, + GdkEventButton *event, + dt_lib_module_t *self) { dt_lib_duplicate_t *d = self->data; d->imgid = NO_IMGID; dt_control_queue_redraw_center(); + + return TRUE; } void view_leave(struct dt_lib_module_t *self, diff --git a/src/libs/export.c b/src/libs/export.c index f0fde6b71cd0..11317d72dd42 100644 --- a/src/libs/export.c +++ b/src/libs/export.c @@ -570,9 +570,9 @@ static gboolean _scale_mdlclick(GtkEntry *spin, return FALSE; } -static void _widht_mdlclick(GtkEntry *spin, - GdkEventButton *event, - gpointer user_data) +static gboolean _widht_mdlclick(GtkEntry *spin, + GdkEventButton *event, + gpointer user_data) { if(event->button == GDK_BUTTON_MIDDLE) { @@ -585,11 +585,13 @@ static void _widht_mdlclick(GtkEntry *spin, { _width_changed(GTK_EDITABLE(spin), user_data); } + + return FALSE; } -static void _height_mdlclick(GtkEntry *spin, - GdkEventButton *event, - gpointer user_data) +static gboolean _height_mdlclick(GtkEntry *spin, + GdkEventButton *event, + gpointer user_data) { if(event->button == GDK_BUTTON_MIDDLE) { @@ -602,6 +604,7 @@ static void _height_mdlclick(GtkEntry *spin, { _height_changed(GTK_EDITABLE(spin), user_data); } + return FALSE; } static void _size_in_px_update(dt_lib_export_t *d) diff --git a/src/libs/image.c b/src/libs/image.c index 01276b1b49b3..b48f95b12b2c 100644 --- a/src/libs/image.c +++ b/src/libs/image.c @@ -762,8 +762,8 @@ static int lua_register_action(lua_State *L) lua_callback_data * data = malloc(sizeof(lua_callback_data)); data->key = strdup(name); data->self = self; - const gulong s = g_signal_connect(G_OBJECT(button), "clicked", - G_CALLBACK(lua_button_clicked), data); + const gulong s = g_signal_connect_data(G_OBJECT(button), "clicked", + G_CALLBACK(lua_button_clicked), data, NULL, 0); // save the signal connection in case we need to destroy it later dt_lua_module_entry_push(L, "lib", self->plugin_name); diff --git a/src/libs/map_locations.c b/src/libs/map_locations.c index 3a3e1ffb7b0c..0d2c4222cb35 100644 --- a/src/libs/map_locations.c +++ b/src/libs/map_locations.c @@ -945,8 +945,8 @@ void gui_init(dt_lib_module_t *self) } d->shape_button = dtgtk_togglebutton_new(location_shapes[shape], 0, NULL); gtk_box_pack_start(hbox, d->shape_button, FALSE, TRUE, 0); - d->shape_button_handler = g_signal_connect(G_OBJECT(d->shape_button), "clicked", - G_CALLBACK(_shape_button_clicked), self); + d->shape_button_handler = g_signal_connect_data(G_OBJECT(d->shape_button), "clicked", + G_CALLBACK(_shape_button_clicked), self, NULL, 0); gtk_widget_set_tooltip_text(GTK_WIDGET(d->shape_button ), _("select the shape of the location\'s limits on the map, circle or rectangle" "\nor even polygon if available (select first a polygon place in 'find location' module)")); diff --git a/src/libs/masks.c b/src/libs/masks.c index 866bc850d6f7..91ac059f0d2f 100644 --- a/src/libs/masks.c +++ b/src/libs/masks.c @@ -309,9 +309,9 @@ static void _tree_add_shape(GtkButton *button, gpointer shape) dt_control_queue_redraw_center(); } -static void _bt_add_shape(GtkWidget *widget, GdkEventButton *event, gpointer shape) +static gboolean _bt_add_shape(GtkWidget *widget, GdkEventButton *event, gpointer shape) { - if(darktable.gui->reset) return; + if(darktable.gui->reset) return FALSE; if(event->button == GDK_BUTTON_PRIMARY) { @@ -326,6 +326,7 @@ static void _bt_add_shape(GtkWidget *widget, GdkEventButton *event, gpointer sha _lib_masks_inactivate_icons(darktable.develop->proxy.masks.module); } + return TRUE; } static void _tree_add_exist(GtkButton *button, dt_masks_form_t *grp) diff --git a/src/libs/modulegroups.c b/src/libs/modulegroups.c index abea8f0e78c2..9ed4212d6059 100644 --- a/src/libs/modulegroups.c +++ b/src/libs/modulegroups.c @@ -409,9 +409,10 @@ static gboolean _basics_goto_module(GtkWidget *w, GdkEventButton *e, gpointer us return TRUE; } -static void _basics_on_off_label_callback(GtkWidget *widget, GdkEventButton *e, GtkToggleButton *btn) +static gboolean _basics_on_off_label_callback(GtkWidget *widget, GdkEventButton *e, GtkToggleButton *btn) { gtk_toggle_button_set_active(btn, !gtk_toggle_button_get_active(btn)); + return TRUE; } static void _sync_visibility(GtkWidget *widget, @@ -1938,7 +1939,6 @@ static void _manage_editor_groups_cleanup(dt_lib_module_t *self, } static void _manage_editor_basics_remove(GtkWidget *widget, - GdkEventButton *event, dt_lib_module_t *self) { dt_lib_modulegroups_t *d = self->data; @@ -2006,7 +2006,7 @@ static void _manage_editor_basics_update_list(dt_lib_module_t *self) gtk_widget_set_tooltip_text(btn, _("remove this widget")); g_object_set_data(G_OBJECT(btn), "widget_id", item->id); - g_signal_connect(G_OBJECT(btn), "button-press-event", + g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(_manage_editor_basics_remove), self); gtk_box_pack_end(GTK_BOX(hb), btn, FALSE, TRUE, 0); } @@ -2074,7 +2074,6 @@ static void _manage_editor_save(dt_lib_module_t *self) } static void _manage_editor_module_remove(GtkWidget *widget, - GdkEventButton *event, dt_lib_module_t *self) { const char *module = (char *)g_object_get_data(G_OBJECT(widget), "module_name"); @@ -2130,7 +2129,7 @@ static void _manage_editor_module_update_list(dt_lib_module_t *self, gtk_widget_set_tooltip_text(btn, _("remove this module")); g_object_set_data(G_OBJECT(btn), "module_name", module->op); g_object_set_data(G_OBJECT(btn), "group", gr); - g_signal_connect(G_OBJECT(btn), "button-press-event", + g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(_manage_editor_module_remove), self); gtk_box_pack_end(GTK_BOX(hb), btn, FALSE, TRUE, 0); } @@ -2639,14 +2638,12 @@ static void _manage_basics_add_popup(GtkWidget *widget, } static void _manage_editor_basics_add_popup(GtkWidget *widget, - GdkEvent *event, dt_lib_module_t *self) { _manage_basics_add_popup(widget, self, FALSE); } static void _manage_editor_module_add_popup(GtkWidget *widget, - GdkEventButton *event, dt_lib_module_t *self) { dt_lib_modulegroups_group_t *gr = g_object_get_data(G_OBJECT(widget), "group"); @@ -3089,7 +3086,6 @@ static void _buttons_update(dt_lib_module_t *self) } static void _manage_editor_group_move_right(GtkWidget *widget, - GdkEventButton *event, dt_lib_module_t *self) { dt_lib_modulegroups_t *d = self->data; @@ -3109,7 +3105,6 @@ static void _manage_editor_group_move_right(GtkWidget *widget, } static void _manage_editor_group_move_left(GtkWidget *widget, - GdkEventButton *event, dt_lib_module_t *self) { dt_lib_modulegroups_t *d = self->data; @@ -3129,7 +3124,6 @@ static void _manage_editor_group_move_left(GtkWidget *widget, } static void _manage_editor_group_remove(GtkWidget *widget, - GdkEventButton *event, dt_lib_module_t *self) { dt_lib_modulegroups_t *d = self->data; @@ -3169,7 +3163,7 @@ static void _manage_editor_group_name_changed(GtkWidget *tb, gr->name = g_strdup(txt); } -static void _manage_editor_group_icon_changed(GtkWidget *widget, +static gboolean _manage_editor_group_icon_changed(GtkWidget *widget, GdkEventButton *event, dt_lib_modulegroups_group_t *gr) { @@ -3180,10 +3174,10 @@ static void _manage_editor_group_icon_changed(GtkWidget *widget, GtkWidget *btn = gtk_popover_get_relative_to(GTK_POPOVER(pop)); dtgtk_button_set_paint(DTGTK_BUTTON(btn), _buttons_get_icon_fct(ic), 0, NULL); gtk_popover_popdown(GTK_POPOVER(pop)); + return TRUE; } static void _manage_editor_group_icon_popup(GtkWidget *btn, - GdkEventButton *event, dt_lib_module_t *self) { dt_lib_modulegroups_group_t *gr = g_object_get_data(G_OBJECT(btn), "group"); @@ -3345,7 +3339,7 @@ static GtkWidget *_manage_editor_group_init_basics_box(dt_lib_module_t *self) CPF_DIRECTION_LEFT, NULL); gtk_widget_set_tooltip_text(bt, _("add widget to the quick access panel")); gtk_widget_set_name(bt, "modulegroups-btn"); - g_signal_connect(G_OBJECT(bt), "button-press-event", + g_signal_connect(G_OBJECT(bt), "clicked", G_CALLBACK(_manage_editor_basics_add_popup), self); gtk_widget_set_halign(hb4, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(hb4), bt, FALSE, FALSE, 0); @@ -3378,7 +3372,7 @@ static GtkWidget *_manage_editor_group_init_modules_box(dt_lib_module_t *self, gtk_widget_set_name(btn, "modulegroups-group-icon"); gtk_widget_set_tooltip_text(btn, _("group icon")); gtk_widget_set_sensitive(btn, !d->edit_ro); - g_signal_connect(G_OBJECT(btn), "button-press-event", + g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(_manage_editor_group_icon_popup), self); g_object_set_data(G_OBJECT(btn), "group", gr); gtk_box_pack_start(GTK_BOX(hb3), btn, FALSE, TRUE, 0); @@ -3400,7 +3394,7 @@ static GtkWidget *_manage_editor_group_init_modules_box(dt_lib_module_t *self, btn = dtgtk_button_new(dtgtk_cairo_paint_remove, 0, NULL); gtk_widget_set_tooltip_text(btn, _("remove group")); g_object_set_data(G_OBJECT(btn), "group", gr); - g_signal_connect(G_OBJECT(btn), "button-press-event", + g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(_manage_editor_group_remove), self); gtk_box_pack_end(GTK_BOX(hb3), btn, FALSE, TRUE, 0); } @@ -3428,7 +3422,7 @@ static GtkWidget *_manage_editor_group_init_modules_box(dt_lib_module_t *self, gtk_widget_set_name(btn, "modulegroups-btn"); gtk_widget_set_tooltip_text(btn, _("move group to the left")); g_object_set_data(G_OBJECT(btn), "group", gr); - g_signal_connect(G_OBJECT(btn), "button-press-event", + g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(_manage_editor_group_move_left), self); gtk_box_pack_start(GTK_BOX(hb4), btn, FALSE, FALSE, 2); @@ -3439,7 +3433,7 @@ static GtkWidget *_manage_editor_group_init_modules_box(dt_lib_module_t *self, gtk_widget_set_tooltip_text(bt, _("add module to the group")); gtk_widget_set_name(bt, "modulegroups-btn"); g_object_set_data(G_OBJECT(bt), "group", gr); - g_signal_connect(G_OBJECT(bt), "button-press-event", + g_signal_connect(G_OBJECT(bt), "clicked", G_CALLBACK(_manage_editor_module_add_popup), self); gtk_widget_set_halign(plusbox, GTK_ALIGN_CENTER); gtk_box_pack_start(GTK_BOX(plusbox), bt, FALSE, FALSE, 0); @@ -3450,7 +3444,7 @@ static GtkWidget *_manage_editor_group_init_modules_box(dt_lib_module_t *self, gtk_widget_set_name(btn, "modulegroups-btn"); gtk_widget_set_tooltip_text(btn, _("move group to the right")); g_object_set_data(G_OBJECT(btn), "group", gr); - g_signal_connect(G_OBJECT(btn), "button-press-event", + g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(_manage_editor_group_move_right), self); gtk_box_pack_end(GTK_BOX(hb4), btn, FALSE, FALSE, 2); @@ -3463,7 +3457,6 @@ static GtkWidget *_manage_editor_group_init_modules_box(dt_lib_module_t *self, } static void _manage_editor_reset(GtkWidget *widget, - GdkEventButton *event, dt_lib_module_t *self) { dt_lib_modulegroups_t *d = self->data; @@ -3474,7 +3467,6 @@ static void _manage_editor_reset(GtkWidget *widget, } static void _manage_editor_group_add(GtkWidget *widget, - GdkEventButton *event, dt_lib_module_t *self) { dt_lib_modulegroups_t *d = self->data; @@ -4055,7 +4047,7 @@ static void _manage_show_window(dt_lib_module_t *self) gtk_box_pack_start(GTK_BOX(hb), gtk_label_new(_("module groups")), FALSE, TRUE, 0); d->preset_btn_add_group = dtgtk_button_new(dtgtk_cairo_paint_square_plus, CPF_DIRECTION_LEFT, NULL); - g_signal_connect(G_OBJECT(d->preset_btn_add_group), "button-press-event", + g_signal_connect(G_OBJECT(d->preset_btn_add_group), "clicked", G_CALLBACK(_manage_editor_group_add), self); gtk_box_pack_start(GTK_BOX(hb), d->preset_btn_add_group, FALSE, FALSE, 0); @@ -4080,7 +4072,7 @@ static void _manage_show_window(dt_lib_module_t *self) hb2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); d->preset_reset_btn = gtk_button_new_with_label(_("reset")); - g_signal_connect(G_OBJECT(d->preset_reset_btn), "button-press-event", + g_signal_connect(G_OBJECT(d->preset_reset_btn), "clicked", G_CALLBACK(_manage_editor_reset), self); gtk_box_pack_end(GTK_BOX(hb2), d->preset_reset_btn, FALSE, TRUE, 0); diff --git a/src/libs/select.c b/src/libs/select.c index 020a43a308bc..441f027fd40f 100644 --- a/src/libs/select.c +++ b/src/libs/select.c @@ -259,7 +259,7 @@ static int lua_register_selection(lua_State *L) lua_callback_data * data = malloc(sizeof(lua_callback_data)); data->key = strdup(name); data->self = self; - gulong s = g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(lua_button_clicked), data); + gulong s = g_signal_connect_data(G_OBJECT(button), "clicked", G_CALLBACK(lua_button_clicked), data, NULL, 0); dt_lua_module_entry_push(L, "lib", self->plugin_name); lua_getiuservalue(L, -1, 1); diff --git a/src/libs/styles.c b/src/libs/styles.c index 2dbc8aaf3a85..c8accaeff4a1 100644 --- a/src/libs/styles.c +++ b/src/libs/styles.c @@ -734,13 +734,12 @@ static void _import_clicked(GtkWidget *w, dt_lib_styles_t *d) g_object_unref(filechooser); } -static gboolean _entry_callback(GtkEntry *entry, dt_lib_styles_t *d) +static void _entry_callback(GtkEntry *entry, dt_lib_styles_t *d) { _gui_styles_update_view(d); - return FALSE; } -static gboolean _entry_activated(GtkEntry *entry, dt_lib_styles_t *d) +static void _entry_activated(GtkEntry *entry, dt_lib_styles_t *d) { const gchar *name = gtk_entry_get_text(d->entry); if(name) @@ -753,15 +752,12 @@ static gboolean _entry_activated(GtkEntry *entry, dt_lib_styles_t *d) dt_control_apply_styles(imgs, styles, duplicate); } } - - return FALSE; } -static gboolean _duplicate_callback(GtkEntry *entry, dt_lib_styles_t *d) +static void _duplicate_callback(GtkWidget *widget, dt_lib_styles_t *d) { dt_conf_set_bool("ui_last/styles_create_duplicate", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(d->duplicate))); - return FALSE; } static void _applymode_combobox_changed(GtkWidget *widget, gpointer user_data) diff --git a/src/libs/tools/colorlabels.c b/src/libs/tools/colorlabels.c index 2c6831bd627e..4ae700946041 100644 --- a/src/libs/tools/colorlabels.c +++ b/src/libs/tools/colorlabels.c @@ -44,9 +44,9 @@ typedef struct dt_lib_colorlabels_t } dt_lib_colorlabels_t; /* callback when a colorlabel button is clicked */ -static void _lib_colorlabels_button_clicked_callback(GtkWidget *w, - GdkEventButton *event, - dt_lib_module_t *self); +static gboolean _lib_colorlabels_button_clicked_callback(GtkWidget *w, + GdkEventButton *event, + dt_lib_module_t *self); gint _get_colorlabel(dt_lib_module_t *self, GtkWidget *w) { @@ -267,9 +267,9 @@ static void _lib_colorlabels_edit(dt_lib_module_t *self, } } -static void _lib_colorlabels_button_clicked_callback(GtkWidget *w, - GdkEventButton *event, - dt_lib_module_t *self) +static gboolean _lib_colorlabels_button_clicked_callback(GtkWidget *w, + GdkEventButton *event, + dt_lib_module_t *self) { dt_lib_colorlabels_t *d = self->data; @@ -290,6 +290,7 @@ static void _lib_colorlabels_button_clicked_callback(GtkWidget *w, DT_COLLECTION_CHANGE_RELOAD, DT_COLLECTION_PROP_COLORLABEL, imgs); } + return TRUE; } // clang-format off diff --git a/src/libs/tools/viewswitcher.c b/src/libs/tools/viewswitcher.c index c6743058d7a8..b8f1f7ef77d1 100644 --- a/src/libs/tools/viewswitcher.c +++ b/src/libs/tools/viewswitcher.c @@ -171,7 +171,7 @@ void gui_cleanup(dt_lib_module_t *self) self->data = NULL; } -static void _lib_viewswitcher_enter_leave_notify_callback(GtkWidget *w, GdkEventCrossing *e, GtkLabel *l) +static gboolean _lib_viewswitcher_enter_leave_notify_callback(GtkWidget *w, GdkEventCrossing *e, GtkLabel *l) { /* if not active view lets highlight */ if(e->type == GDK_ENTER_NOTIFY && @@ -179,6 +179,7 @@ static void _lib_viewswitcher_enter_leave_notify_callback(GtkWidget *w, GdkEvent gtk_widget_set_state_flags(GTK_WIDGET(l), GTK_STATE_FLAG_PRELIGHT, FALSE); else gtk_widget_unset_state_flags(GTK_WIDGET(l), GTK_STATE_FLAG_PRELIGHT); + return FALSE; } static void _lib_viewswitcher_view_cannot_change_callback(gpointer instance, dt_view_t *old_view, diff --git a/src/views/view.c b/src/views/view.c index bebc33493f90..33860214692c 100644 --- a/src/views/view.c +++ b/src/views/view.c @@ -1445,7 +1445,6 @@ static void _accels_window_destroy(GtkWidget *widget, dt_view_manager_t *vm) } static void _accels_window_sticky(GtkWidget *widget, - GdkEventButton *event, dt_view_manager_t *vm) { if(!vm->accels_window.window) return; @@ -1501,7 +1500,7 @@ void dt_view_accels_show(dt_view_manager_t *vm) vm->accels_window.sticky_btn = dtgtk_button_new(dtgtk_cairo_paint_multiinstance, 0, NULL); gtk_widget_set_tooltip_text(vm->accels_window.sticky_btn, _("switch to a classic window which will stay open after key release")); - g_signal_connect(G_OBJECT(vm->accels_window.sticky_btn), "button-press-event", + g_signal_connect(G_OBJECT(vm->accels_window.sticky_btn), "clicked", G_CALLBACK(_accels_window_sticky), vm); dt_gui_add_class(vm->accels_window.sticky_btn, "dt_accels_stick");