[gtk+] Support a gtk.gresource file in themes



commit 57386285fa23db6879efaccd2cfa7ed501b6056f
Author: Alexander Larsson <alexl redhat com>
Date:   Fri Feb 3 15:50:49 2012 +0100

    Support a gtk.gresource file in themes
    
    This lets themes install a .gresource for efficient loading
    of resources. This resource file will (if it exists) be automatically
    loaded (mmaped) when the theme is used and unloaded when not used.

 gtk/gtkcssprovider.c |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index dbbf92a..e499db5 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -985,6 +985,7 @@ struct _GtkCssProviderPrivate
   GHashTable *symbolic_colors;
 
   GArray *rulesets;
+  GResource *resource;
 };
 
 enum {
@@ -1591,6 +1592,13 @@ gtk_css_provider_finalize (GObject *object)
   if (priv->symbolic_colors)
     g_hash_table_destroy (priv->symbolic_colors);
 
+  if (priv->resource)
+    {
+      g_resources_unregister (priv->resource);
+      g_resource_unref (priv->resource);
+      priv->resource = NULL;
+    }
+
   G_OBJECT_CLASS (gtk_css_provider_parent_class)->finalize (object);
 }
 
@@ -2901,8 +2909,20 @@ gtk_css_provider_get_named (const gchar *name,
 
       if (path)
         {
+	  char *dir, *resource_file;
+	  GResource *resource;
+
           provider = gtk_css_provider_new ();
 
+	  dir = g_path_get_dirname (path);
+	  resource_file = g_build_filename (dir, "gtk.gresource", NULL);
+	  resource = g_resource_load (resource_file, NULL);
+	  if (resource != NULL)
+	    {
+	      provider->priv->resource = resource;
+	      g_resources_register (resource);
+	    }
+
           if (!gtk_css_provider_load_from_path (provider, path, NULL))
             {
               g_object_unref (provider);



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