[gtkmm] Gtk::Builder: Replace a GQuark by member data
- From: Kjell Ahlstedt <kjellahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtkmm] Gtk::Builder: Replace a GQuark by member data
- Date: Mon, 14 Nov 2016 09:46:47 +0000 (UTC)
commit 3271ccd69da613b502dfc626fca5572715ab0be6
Author: Kjell Ahlstedt <kjell ahlstedt bredband net>
Date: Mon Nov 14 10:42:04 2016 +0100
Gtk::Builder: Replace a GQuark by member data
Replace quark_no_gtkmm_derived_types by Builder::no_gtkmm_derived_types.
Replace the local get_type_from_name_vfunc_callback() in builder.ccg by
Gtk::Builder_Class::get_type_from_name_vfunc_callback(). That makes it more
like a gmmproc-generated vfunc callback.
gtk/src/builder.ccg | 23 ++++++++---------------
gtk/src/builder.hg | 3 +++
2 files changed, 11 insertions(+), 15 deletions(-)
---
diff --git a/gtk/src/builder.ccg b/gtk/src/builder.ccg
index 92eb6b6..2570a9f 100644
--- a/gtk/src/builder.ccg
+++ b/gtk/src/builder.ccg
@@ -20,16 +20,13 @@
#include <gtk/gtk.h>
-namespace
+namespace Gtk
{
-//TODO: When we can break ABI, replace this GQuark by member data in Gtk::Builder.
-GQuark quark_no_gtkmm_derived_types = g_quark_from_static_string("gtkmm__Builder::no_gtkmm_derived_types");
-
// Allow GtkBuilder to instantiate a gtkmm derived GType instead of the regular
// GTK+ GType, so we can, for instance, use our vfuncs and default signal handlers.
-static GType
-get_type_from_name_vfunc_callback(GtkBuilder* self, const char* type_name)
+// static
+GType Builder_Class::get_type_from_name_vfunc_callback(GtkBuilder* self, const char* type_name)
{
if (!type_name)
return G_TYPE_INVALID;
@@ -39,7 +36,9 @@ get_type_from_name_vfunc_callback(GtkBuilder* self, const char* type_name)
// If a TreeModel (such as ListStore or TreeStore) is being built,
// Buildable_Class may have requested no search for gtkmm-derived types.
// See https://bugzilla.gnome.org/show_bug.cgi?id=742637
- if (!g_object_get_qdata((GObject*)self, quark_no_gtkmm_derived_types))
+ const auto obj = dynamic_cast<Builder*>(
+ Glib::ObjectBase::_get_current_wrapper((GObject*)self));
+ if (!(obj && obj->no_gtkmm_derived_types))
{
// See if there is a gtkmm version of the gclass:
Glib::ustring classname_prefixed ("gtkmm__"); // gtkmm uses a prefix
@@ -51,8 +50,7 @@ get_type_from_name_vfunc_callback(GtkBuilder* self, const char* type_name)
if (gtype == G_TYPE_INVALID) // If it's not a registered typename
{
// Get the parent class of the object class (the original underlying C class).
- Gtk::Builder_Class::BaseClassType* const base =
- static_cast<Gtk::Builder_Class::BaseClassType*>(
+ const auto base = static_cast<BaseClassType*>(
g_type_class_peek_parent(G_OBJECT_GET_CLASS(self)));
// Call the original underlying C function.
@@ -65,15 +63,10 @@ get_type_from_name_vfunc_callback(GtkBuilder* self, const char* type_name)
return gtype;
}
-} // anonymous namespace
-
-namespace Gtk
-{
-
// Called from Buildable
void Builder::set_no_gtkmm_derived_types(bool status)
{
- g_object_set_qdata((GObject*)gobj(), quark_no_gtkmm_derived_types, (gpointer)status);
+ no_gtkmm_derived_types = status;
}
// static
diff --git a/gtk/src/builder.hg b/gtk/src/builder.hg
index dccbd0e..c0e1752 100644
--- a/gtk/src/builder.hg
+++ b/gtk/src/builder.hg
@@ -591,6 +591,7 @@ protected:
private:
void set_no_gtkmm_derived_types(bool status);
+ bool no_gtkmm_derived_types {false};
friend class Buildable_Class;
#m4begin
@@ -598,6 +599,8 @@ dnl Custom-coded vfunc:
dnl
_PUSH(SECTION_PCC_CLASS_INIT_VFUNCS)
klass->get_type_from_name = &get_type_from_name_vfunc_callback;
+ _SECTION(SECTION_PH_VFUNCS)
+ static GType get_type_from_name_vfunc_callback(GtkBuilder* self, const char* type_name);
_POP()
#m4end
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]