mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-17 14:30:15 +00:00
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.
This commit is contained in:
parent
35db0819ff
commit
57386285fa
@ -985,6 +985,7 @@ struct _GtkCssProviderPrivate
|
|||||||
GHashTable *symbolic_colors;
|
GHashTable *symbolic_colors;
|
||||||
|
|
||||||
GArray *rulesets;
|
GArray *rulesets;
|
||||||
|
GResource *resource;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
@ -1591,6 +1592,13 @@ gtk_css_provider_finalize (GObject *object)
|
|||||||
if (priv->symbolic_colors)
|
if (priv->symbolic_colors)
|
||||||
g_hash_table_destroy (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);
|
G_OBJECT_CLASS (gtk_css_provider_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2901,8 +2909,20 @@ gtk_css_provider_get_named (const gchar *name,
|
|||||||
|
|
||||||
if (path)
|
if (path)
|
||||||
{
|
{
|
||||||
|
char *dir, *resource_file;
|
||||||
|
GResource *resource;
|
||||||
|
|
||||||
provider = gtk_css_provider_new ();
|
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))
|
if (!gtk_css_provider_load_from_path (provider, path, NULL))
|
||||||
{
|
{
|
||||||
g_object_unref (provider);
|
g_object_unref (provider);
|
||||||
|
Loading…
Reference in New Issue
Block a user