summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorTristan Van Berkom <tristanvb@openismus.com>2013-03-24 17:16:20 +0900
committerTristan Van Berkom <tristanvb@openismus.com>2013-04-08 21:19:27 +0900
commit4ec6d6006e36f3f51074750534a8ab20b51abb5b (patch)
treea8d778d3a7ec2024000b4b251a81ccb8a355a4fb /gtk
parentc6ab5157358bc364eede018acc14de976add195c (diff)
downloadgtk+-4ec6d6006e36f3f51074750534a8ab20b51abb5b.tar.gz
Work around access to global resources without calling gtk_init()
Some utilities such as GIR and gtk-doc, initialize class vtables without initializing GTK+, with composite templates accessing resources this causes a hand full of unneeded warnings. The workaround for now is the use a private function _gtk_ensure_resources() which is both called while initializing GTK+, and at the beginning of gtk_widget_class_set_template_from_resource() (the private function ensures that the resource will only ever be registered GOnce).
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkmain.c3
-rw-r--r--gtk/gtkprivate.c16
-rw-r--r--gtk/gtkprivate.h2
-rw-r--r--gtk/tests/Makefile.am1
4 files changed, 20 insertions, 2 deletions
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index 18f2171898..36a5604584 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -120,7 +120,6 @@
#include "gtkmodulesprivate.h"
#include "gtkprivate.h"
#include "gtkrecentmanager.h"
-#include "gtkresources.h"
#include "gtkselectionprivate.h"
#include "gtksettingsprivate.h"
#include "gtktooltip.h"
@@ -707,7 +706,7 @@ do_post_parse_initialization (int *argc,
g_warning ("Whoever translated default:LTR did so wrongly.\n");
}
- _gtk_register_resource ();
+ _gtk_ensure_resources ();
_gtk_accel_map_init ();
diff --git a/gtk/gtkprivate.c b/gtk/gtkprivate.c
index 70151f9bfe..3177d4761d 100644
--- a/gtk/gtkprivate.c
+++ b/gtk/gtkprivate.c
@@ -30,6 +30,7 @@
#include "gdk/gdk.h"
#include "gtkprivate.h"
+#include "gtkresources.h"
#if !defined G_OS_WIN32 && !(defined GDK_WINDOWING_QUARTZ && defined QUARTZ_RELOCATION)
@@ -251,3 +252,18 @@ _gtk_translate_keyboard_accel_state (GdkKeymap *keymap,
return retval;
}
+
+static gpointer
+register_resources (gpointer data)
+{
+ _gtk_register_resource ();
+ return NULL;
+}
+
+void
+_gtk_ensure_resources (void)
+{
+ static GOnce register_resources_once = G_ONCE_INIT;
+
+ g_once (&register_resources_once, register_resources, NULL);
+}
diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h
index 5b05f5bb47..093334f84c 100644
--- a/gtk/gtkprivate.h
+++ b/gtk/gtkprivate.h
@@ -59,6 +59,8 @@ gboolean _gtk_fnmatch (const char *pattern,
gchar * _gtk_get_lc_ctype (void);
+void _gtk_ensure_resources (void);
+
gboolean _gtk_boolean_handled_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
diff --git a/gtk/tests/Makefile.am b/gtk/tests/Makefile.am
index ba24328fa5..0f2dd781e8 100644
--- a/gtk/tests/Makefile.am
+++ b/gtk/tests/Makefile.am
@@ -148,6 +148,7 @@ regression_tests_LDADD = $(progs_ldadd)
TEST_PROGS += keyhash
keyhash_SOURCES = keyhash.c \
../gtkkeyhash.c ../gtkkeyhash.h \
+ ../gtkresources.c ../gtkresources.h \
../gtkprivate.c ../gtkprivate.h
keyhash_LDADD = $(progs_ldadd)
keyhash_CFLAGS = -DGTK_COMPILATION \