[evince] Fix a crash during the build with introspection enabled



commit a203fc1bf0b6f4f4c920c3144ebae77e41686751
Author: Gustau Perez <gustau perez gmail com>
Date:   Fri Mar 28 19:31:08 2014 +0000

    Fix a crash during the build with introspection enabled
    
    Using GI_SCANNER_DEBUG=save-temps, the temporal files remained.
    It has been suggested that calling gtk_style_context_add_provider_for_screen()
    should, inside a g_once_init(), be in the class's _init() (not class_init()) hook.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=726812

 libview/ev-view-presentation.c |   28 +++++++++++++++++-----------
 1 files changed, 17 insertions(+), 11 deletions(-)
---
diff --git a/libview/ev-view-presentation.c b/libview/ev-view-presentation.c
index 3bdf4e6..678b456 100644
--- a/libview/ev-view-presentation.c
+++ b/libview/ev-view-presentation.c
@@ -1419,7 +1419,6 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass)
        GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
        GObjectClass   *gobject_class = G_OBJECT_CLASS (klass);
        GtkBindingSet  *binding_set;
-        GtkCssProvider *provider;
 
        klass->change_page = ev_view_presentation_change_page;
 
@@ -1533,23 +1532,30 @@ ev_view_presentation_class_init (EvViewPresentationClass *klass)
        gtk_binding_entry_add_signal (binding_set, GDK_KEY_K, 0,
                                      "change_page", 1,
                                      GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
-
-        provider = gtk_css_provider_new ();
-        gtk_css_provider_load_from_data (provider,
-                                         "EvViewPresentation {\n"
-                                         " background-color: black; }",
-                                         -1, NULL);
-        gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
-                                                   GTK_STYLE_PROVIDER (provider),
-                                                   GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-        g_object_unref (provider);
 }
 
 static void
 ev_view_presentation_init (EvViewPresentation *pview)
 {
+        static gsize initialization_value = 0;
+
        gtk_widget_set_can_focus (GTK_WIDGET (pview), TRUE);
         pview->is_constructing = TRUE;
+
+       if (g_once_init_enter (&initialization_value)) {
+               GtkCssProvider *provider;
+
+               provider = gtk_css_provider_new ();
+               gtk_css_provider_load_from_data (provider,
+                                                "EvViewPresentation {\n"
+                                                " background-color: black; }",
+                                                -1, NULL);
+               gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+                                                          GTK_STYLE_PROVIDER (provider),
+                                                          GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+               g_object_unref (provider);
+               g_once_init_leave (&initialization_value, 1);
+       }
 }
 
 GtkWidget *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]