The first argument of `g_signal_connect()` is a gpointer (i.e. a `void*`), so you don't need a cast at all — C will implicitly cast any pointer to `void*`, and from `void*` to any other pointer.
Additionally, as you discovered, signals are GTypeInstance features — you can emit signals on anything that inherits from GTypeInstance, not just GObjects. The reason why you see a cast macro is a layer of "extra security": you can check that you're passing the object you meant to be passing, instead of a NULL pointer or some garbage. This "extra security" is mostly cargo-culted through tutorials, so people learn the habit and transmit it. Personally, I find it pointless; internal state should be checked with `g_assert()`, and all cast macros can be compiled away with `G_DISABLE_CAST_CHECKS`, so that buys you almost nothing. Ciao, Emmanuele. On 30 June 2017 at 11:20, Ingo Brückl <i...@wupperonline.de> wrote: > Hi, > > it seems that it was common practice to cast the first argument of > g_signal_connect() to G_OBJECT when I started developing applications with > GTK+ quite a while ago. At least I've learned it that way and am doing it > ever since. > > I repeatedly see usage of g_signal_connect() without that cast which seems > to make sense since "instance" only has to be a gpointer and will be checked > G_TYPE_CHECK_INSTANCE at run time. > > So I'm just curious. Is/was there a reason for the G_OBJECT cast? Was it > necessary back in the days (when GTK+ 2 took over from GTK+ 1)? > > Ingo > _______________________________________________ > gtk-app-devel-list mailing list > gtk-app-devel-list@gnome.org > https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list -- https://www.bassi.io [@] ebassi [@gmail.com] _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list