@@ -639,26 +639,37 @@ void dt_gui_dialog_restore_size(GtkDialog *dialog, const char *conf);
639639dt_gui_session_type_t dt_gui_get_session_type (void );
640640
641641#if !defined(__cplusplus)
642- gulong dt_signal_connect_data_with_caller (gpointer instance,
643- const gchar *detailed_signal,
644- GCallback c_handler,
645- gpointer data,
646- GClosureNotify destroy_data,
647- GConnectFlags connect_flags,
648- gboolean gboolean_return,
649- const char *file,
650- const int line);
651642#undef G_CALLBACK
652643static inline GCallback G_CALLBACK (void *f) { return (GCallback)f; } // as a macro it gets expanded before reaching here
653644#define DISABLINGPREFIXG_CALLBACK
645+ #define BOOLSIGNAL (s, signal ) || !strcmp(s, #signal)
646+ #undef _Static_assert
654647#undef g_signal_connect
655- #define g_signal_connect (instance, signal, c_handler, user_data ) \
656- dt_signal_connect_data_with_caller ((instance), (signal), (GCallback)(c_handler), (user_data), NULL, (GConnectFlags) 0, \
657- _Generic((DISABLINGPREFIX##c_handler), \
658- gboolean(*)() : TRUE, \
659- void(*)() : FALSE, \
660- gpointer: FALSE), \
661- __FILE__, __LINE__)
648+ #define g_signal_connect (instance, signal, c_handler, user_data ) do { \
649+ _Static_assert ((FALSE \
650+ BOOLSIGNAL (signal, button-press-event) \
651+ BOOLSIGNAL (signal, button-release-event) \
652+ BOOLSIGNAL (signal, motion-notify-event) \
653+ BOOLSIGNAL (signal, enter-notify-event) \
654+ BOOLSIGNAL (signal, leave-notify-event) \
655+ BOOLSIGNAL (signal, key-press-event) \
656+ BOOLSIGNAL (signal, configure-event) \
657+ BOOLSIGNAL (signal, focus-out-event) \
658+ BOOLSIGNAL (signal, focus-in-event) \
659+ BOOLSIGNAL (signal, scroll-event) \
660+ BOOLSIGNAL (signal, delete -event) \
661+ BOOLSIGNAL (signal, drag-motion) \
662+ BOOLSIGNAL (signal, drag-failed) \
663+ BOOLSIGNAL (signal, drag-drop) \
664+ BOOLSIGNAL (signal, event) \
665+ BOOLSIGNAL (signal, focus) \
666+ BOOLSIGNAL (signal, draw) \
667+ BOOLSIGNAL (signal, popup-menu) \
668+ BOOLSIGNAL (signal, query-tooltip) \
669+ BOOLSIGNAL (signal, match-selected) \
670+ ) == _Generic ((DISABLINGPREFIX##c_handler), gboolean (*)(): TRUE , default : FALSE ), \
671+ " signal " signal " return type does not match specified handler " #c_handler); \
672+ g_signal_connect_data ((instance), (signal), (GCallback)(c_handler), (user_data), NULL , (GConnectFlags) 0 ); } while (0 )
662673#endif // __cplusplus
663674
664675G_END_DECLS
0 commit comments