Ensure icon themes are loaded with other themes
authorMatthias Clasen <mclasen@redhat.com>
Thu, 23 Jan 2020 03:20:17 +0000 (22:20 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 23 Jan 2020 04:44:01 +0000 (23:44 -0500)
Trigger icon theme loading from the code in GtkApplication
where we set up the icon theme search path. This makes
it happen before the first frame.

gtk/gtkapplication.c
gtk/gtkicontheme.c
gtk/gtkiconthemeprivate.h

index 82eea35e73697690864ada2c2894bf4706e3ad88..6bea5400b6f06b7fc062975d7e58d4eb6cd4d689 100644 (file)
@@ -38,7 +38,7 @@
 #include "gtkmain.h"
 #include "gtkrecentmanager.h"
 #include "gtkaccelmapprivate.h"
-#include "gtkicontheme.h"
+#include "gtkiconthemeprivate.h"
 #include "gtkbuilder.h"
 #include "gtkshortcutswindow.h"
 #include "gtkintl.h"
@@ -218,6 +218,7 @@ gtk_application_load_resources (GtkApplication *application)
     iconspath = g_strconcat (base_path, "/icons/", NULL);
     gtk_icon_theme_add_resource_path (default_theme, iconspath);
     g_free (iconspath);
+    gtk_icon_theme_ensure_loaded (default_theme);
   }
 
   /* Load the menus */
index 38a0bd276198a516add0bbddb79632dd0cd1d322..820ef733481f86c381dcd324423e3ee883fdaefe 100644 (file)
@@ -762,7 +762,6 @@ do_theme_change (GtkIconTheme *self)
   blow_themes (self);
 
   queue_theme_changed (self);
-
 }
 
 static void
@@ -1270,6 +1269,7 @@ load_themes (GtkIconTheme *self)
   IconThemeDirMtime *dir_mtime;
   GStatBuf stat_buf;
   GList *d;
+  gint64 before = g_get_monotonic_time ();
 
   if (self->current_theme)
     insert_theme (self, self->current_theme);
@@ -1356,6 +1356,9 @@ load_themes (GtkIconTheme *self)
     g_message ("%s", s->str);
     g_string_free (s, TRUE);
   });
+
+  self->loading_themes = FALSE;
+    gdk_profiler_add_mark (before * 1000, (g_get_monotonic_time () - before) * 1000, "icon theme load", self->current_theme);
 }
 
 static void
@@ -1363,7 +1366,6 @@ ensure_valid_themes (GtkIconTheme *self)
 {
   GTimeVal tv;
   gboolean was_valid = self->themes_valid;
-  gint64 before = g_get_monotonic_time ();
 
   if (self->loading_themes)
     return;
@@ -1389,11 +1391,12 @@ ensure_valid_themes (GtkIconTheme *self)
       if (was_valid)
         queue_theme_changed (self);
     }
+}
 
-  if (gdk_profiler_is_running ())
-    gdk_profiler_add_mark (before * 1000, (g_get_monotonic_time () - before) * 1000, "icon theme load", NULL);
-
-  self->loading_themes = FALSE;
+void
+gtk_icon_theme_ensure_loaded (GtkIconTheme *self)
+{
+  ensure_valid_themes (self);
 }
 
 static inline gboolean
index 132d5154ee541b319638574de2d1c16ebd2ceb01..1c54944817419c58c320b4eabd20578cf70448bb 100644 (file)
@@ -27,4 +27,6 @@ void        gtk_icon_theme_lookup_symbolic_colors       (GtkCssStyle    *style,
                                                          GdkRGBA        *warning_out,
                                                          GdkRGBA        *error_out);
 
+void        gtk_icon_theme_ensure_loaded (GtkIconTheme *self);
+
 #endif /* __GTK_ICON_THEME_PRIVATE_H__ */