From d26083c41219958e802d5da733d4b4d3c342ec89 Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Sun, 5 Jul 2026 16:49:52 +0200 Subject: [PATCH] Gio: Emblem and DBus::ActionGroup: Don't derive gtkmm__Gxxx types GEmblem and GDBusActionGroup are declared G_DECLARE_FINAL_TYPE. Add _DO_NOT_DERIVE_GTYPE, _ABI_AS_WITH_DERIVED_GTYPE and _STRUCT_NOT_HIDDEN to the corresponding glibmm classes. --- gio/src/dbusactiongroup.hg | 14 ++++++++++++++ gio/src/emblem.hg | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/gio/src/dbusactiongroup.hg b/gio/src/dbusactiongroup.hg index ae9bb6fd..27359bfe 100644 --- a/gio/src/dbusactiongroup.hg +++ b/gio/src/dbusactiongroup.hg @@ -21,6 +21,17 @@ _DEFS(giomm,gio) _PINCLUDE(glibmm/private/object_p.h) +#ifndef DOXYGEN_SHOULD_SKIP_THIS +// Necessary if compiled against glib < 2.89.1, where GDBusActionGroup is not +// a final type, and GDBusActionGroupClass is not defined by G_DECLARE_FINAL_TYPE(). +// (It was declared a final type somewhere between 2.89.1 and 2.89.2. +// The compiler will probably complain if you compile against a glib 2.89.1 +// where GDBusActionGroup is not a final type.) +#if !GLIB_CHECK_VERSION(2,89,1) +using GDBusActionGroupClass = struct _GDBusActionGroupClass; +#endif +#endif /* DOXYGEN_SHOULD_SKIP_THIS */ + namespace Gio { @@ -43,6 +54,9 @@ class GIOMM_API ActionGroup _CLASS_GOBJECT(ActionGroup, GDBusActionGroup, G_DBUS_ACTION_GROUP, Glib::Object, GObject, , , GIOMM_API) _IMPLEMENTS_INTERFACE(::Gio::ActionGroup) _IMPLEMENTS_INTERFACE(RemoteActionGroup) + _DO_NOT_DERIVE_GTYPE dnl// GDBusActionGroup is a final type since glib 2.89.2 + _ABI_AS_WITH_DERIVED_GTYPE dnl// Remove when we can break ABI + _STRUCT_NOT_HIDDEN protected: _CTOR_DEFAULT diff --git a/gio/src/emblem.hg b/gio/src/emblem.hg index 3a0d3316..737fff24 100644 --- a/gio/src/emblem.hg +++ b/gio/src/emblem.hg @@ -16,6 +16,7 @@ #include #include +#include _DEFS(giomm,gio) _PINCLUDE(glibmm/private/object_p.h) @@ -42,6 +43,9 @@ class GIOMM_API Emblem { _CLASS_GOBJECT(Emblem, GEmblem, G_EMBLEM, Glib::Object, GObject, , , GIOMM_API) _IMPLEMENTS_INTERFACE(Icon) + _DO_NOT_DERIVE_GTYPE dnl// GEmblem is a final type since glib 2.89.2 + _ABI_AS_WITH_DERIVED_GTYPE dnl// Remove when we can break ABI + _STRUCT_NOT_HIDDEN protected: /** Creates a new emblem for @a icon. -- GitLab From b353a8b0afc1aa78f3eec58229f02acd9fab6d3e Mon Sep 17 00:00:00 2001 From: Kjell Ahlstedt Date: Mon, 6 Jul 2026 12:23:57 +0200 Subject: [PATCH] Gio::DBus::ActionGroup: Improve the test whether GDBusActionGroup is final --- gio/src/dbusactiongroup.hg | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/gio/src/dbusactiongroup.hg b/gio/src/dbusactiongroup.hg index 27359bfe..777e8fd7 100644 --- a/gio/src/dbusactiongroup.hg +++ b/gio/src/dbusactiongroup.hg @@ -22,13 +22,14 @@ _DEFS(giomm,gio) _PINCLUDE(glibmm/private/object_p.h) #ifndef DOXYGEN_SHOULD_SKIP_THIS -// Necessary if compiled against glib < 2.89.1, where GDBusActionGroup is not -// a final type, and GDBusActionGroupClass is not defined by G_DECLARE_FINAL_TYPE(). -// (It was declared a final type somewhere between 2.89.1 and 2.89.2. -// The compiler will probably complain if you compile against a glib 2.89.1 -// where GDBusActionGroup is not a final type.) -#if !GLIB_CHECK_VERSION(2,89,1) -using GDBusActionGroupClass = struct _GDBusActionGroupClass; +// GDBusActionGroup was declared a final type between GLib 2.89.1 and 2.89.2. +// Before that, GDBusActionGroupClass was not declared in GLib. +// The preprocessor macro G_DBUS_ACTION_GROUP_CLASS was defined, though. +#if !GLIB_CHECK_VERSION(2,89,1) || (!GLIB_CHECK_VERSION(2,89,2) && defined(G_DBUS_ACTION_GROUP_CLASS)) + // glib < 2.89.1 or (glib == 2.89.1 and G_DBUS_ACTION_GROUP_CLASS is a preprocessor macro) + // GDBusActionGroup is not a final type, + // GDBusActionGroupClass is not declared in GLib. + using GDBusActionGroupClass = struct _GDBusActionGroupClass; #endif #endif /* DOXYGEN_SHOULD_SKIP_THIS */ -- GitLab