Tue, 09 Jul 2024 02:03:20 -0500
Fix incompatible pointer types for GtkItemFactoryCallbacks on gcc-14
The GtkItemFactoryEntry struct callback is of type GtkItemFactoryCallbacks
(aka void (*)(void)) but is initialised with GtkItemFactoryCallback1 types
(aka void (*)(void *, guint, GtkWidget *)).
This is coherent with the gtk-2 documentation:
> gtk_item_factory_create_items(..., GtkItemFactoryEntry *entries,...)
> entries : an array of GtkItemFactoryEntrys whose callback members must by of
> type GtkItemFactoryCallback1
But, under gcc-14, the implicit cast from GtkItemFactoryCallback1 to
GtkItemFactoryCallback triggers an incompatible-pointer-types error (See [gcc-doc]).
An exemple of this error:
pidgin/gtkconv.c:3096:66: error: initialization of 'void (*)(void)' from incompatible pointer type 'void (*)(void *, guint, GtkWidget *)' {aka 'void (*)(void *, unsigned int, struct _GtkWidget *)'} [-Wincompatible-pointer-types]
3096 | { N_("/Conversation/New Instant _Message..."), "<CTL>M", menu_new_conv_cb,
| ^~~~~~~~~~~~~~~~
pidgin/gtkconv.c:3096:66: note: (near initialization for 'menu_items[1].callback')
To fix this, explicitely cast to GtkItemFactoryCallback where needed.
[0]: https://gcc.gnu.org/gcc-14/porting_to.html#incompatible-pointer-types
Testing Done:
Built with gcc-14, started and clicked on some affected menus
Reviewed at https://reviews.imfreedom.org/r/3282/
#ifndef __gtksourceview_marshal_MARSHAL_H__ #define __gtksourceview_marshal_MARSHAL_H__ #include <glib-object.h> G_BEGIN_DECLS /* VOID:VOID (gtksourceview-marshal.list:1) */ #define gtksourceview_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID /* VOID:BOOLEAN (gtksourceview-marshal.list:2) */ #define gtksourceview_marshal_VOID__BOOLEAN g_cclosure_marshal_VOID__BOOLEAN /* VOID:BOXED (gtksourceview-marshal.list:3) */ #define gtksourceview_marshal_VOID__BOXED g_cclosure_marshal_VOID__BOXED /* VOID:BOXED,BOXED (gtksourceview-marshal.list:4) */ extern void gtksourceview_marshal_VOID__BOXED_BOXED (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:STRING (gtksourceview-marshal.list:5) */ #define gtksourceview_marshal_VOID__STRING g_cclosure_marshal_VOID__STRING G_END_DECLS #endif /* __gtksourceview_marshal_MARSHAL_H__ */