From 4ec6d6006e36f3f51074750534a8ab20b51abb5b Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Sun, 24 Mar 2013 17:16:20 +0900 Subject: [PATCH] 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). --- gtk/gtkmain.c | 3 +-- gtk/gtkprivate.c | 16 ++++++++++++++++ gtk/gtkprivate.h | 2 ++ gtk/tests/Makefile.am | 1 + 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 (®ister_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 \