Fix incompatible pointer types for GtkItemFactoryCallbacks on gcc-14

Review Request #3282 — Created July 6, 2024 and submitted — Latest diff uploaded

Information

pidgin/pidgin
release-2.x.y

Reviewers

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.

Built with gcc-14, started and clicked on some affected menus

Commits

Files