[sushi/wip/cosimoc/no-clutter: 15/50] media-bin: don't initialize style with class



commit 8c4788f923419a711733aa3e6fddfc0ddf8e7682
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Sat Jun 15 12:17:04 2019 -0700

    media-bin: don't initialize style with class
    
    Looks like this is a bit too early now that the library does not
    get linked together with the C executable.
    Instead, we just load it in a g_once_init section when the first
    instance is created.

 src/libsushi/sushi-media-bin.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)
---
diff --git a/src/libsushi/sushi-media-bin.c b/src/libsushi/sushi-media-bin.c
index ac37cf8..ebabeb7 100644
--- a/src/libsushi/sushi-media-bin.c
+++ b/src/libsushi/sushi-media-bin.c
@@ -847,6 +847,25 @@ sushi_media_bin_init_volume_button (SushiMediaBin    *self,
   gtk_style_context_add_class (gtk_widget_get_style_context (popup), "sushi-media-bin");
 }
 
+static void
+sushi_media_bin_init_style (SushiMediaBin *self)
+{
+  static gsize style_initialized = 0;
+
+  if (g_once_init_enter (&style_initialized))
+    {
+      GtkCssProvider *css_provider = gtk_css_provider_new ();
+
+      gtk_css_provider_load_from_resource (css_provider, "/org/gnome/Sushi/libsushi/sushi-media-bin.css");
+      gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
+                                                 GTK_STYLE_PROVIDER (css_provider),
+                                                 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION-10);
+      g_object_unref (css_provider);
+
+      g_once_init_leave (&style_initialized, 1);
+    }
+}
+
 static void
 sushi_media_bin_init (SushiMediaBin *self)
 {
@@ -855,6 +874,8 @@ sushi_media_bin_init (SushiMediaBin *self)
 
   gtk_widget_init_template (GTK_WIDGET (self));
 
+  sushi_media_bin_init_style (self);
+
   priv->state = SMB_INITIAL_STATE;
   priv->autohide_timeout = AUTOHIDE_TIMEOUT_DEFAULT;
   priv->pressed_button_type = GDK_NOTHING;
@@ -1228,17 +1249,6 @@ sushi_media_bin_class_init (SushiMediaBinClass *klass)
   /* Setup CSS */
   gtk_widget_class_set_css_name (widget_class, "sushi-media-bin");
 
-  if (gdk_screen_get_default ())
-    {
-      GtkCssProvider *css_provider = gtk_css_provider_new ();
-
-      gtk_css_provider_load_from_resource (css_provider, "/org/gnome/Sushi/libsushi/sushi-media-bin.css");
-      gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
-                                                 GTK_STYLE_PROVIDER (css_provider),
-                                                 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION-10);
-      g_object_unref (css_provider);
-    }
-
   /* Init GStreamer */
   gst_init_check (NULL, NULL, NULL);
   GST_DEBUG_CATEGORY_INIT (sushi_media_bin_debug, "SushiMediaBin", 0, "SushiMediaBin audio/video widget");


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