diff options
author | Jasper St. Pierre <jstpierre@mecheye.net> | 2013-11-01 16:03:56 -0400 |
---|---|---|
committer | Jasper St. Pierre <jstpierre@mecheye.net> | 2013-11-01 16:04:02 -0400 |
commit | 1e70ad1cd126942b38e83c2d01712e8dc7ca675e (patch) | |
tree | 346b64f910e721958ce85f5c4848fcfde9968df7 /gtk/gtksettings.c | |
parent | 08053cbbb86c9ded2bddee843e502ae5146997f1 (diff) | |
download | gtk+-1e70ad1cd126942b38e83c2d01712e8dc7ca675e.tar.gz |
gtksettings: Allow setting the GTK+ theme with an envvar
To test with Raleigh much easier.
Diffstat (limited to 'gtk/gtksettings.c')
-rw-r--r-- | gtk/gtksettings.c | 56 |
1 files changed, 34 insertions, 22 deletions
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index 140d15bc90..e61a4b7be5 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -2881,45 +2881,57 @@ settings_update_provider (GdkScreen *screen, } } +static char * +get_theme_name (GtkSettings *settings) +{ + char *theme_name = NULL; + + if (g_getenv ("GTK_THEME")) + theme_name = g_strdup (g_getenv ("GTK_THEME")); + + if (theme_name && *theme_name) + return theme_name; + + g_free (theme_name); + g_object_get (settings, + "gtk-theme-name", &theme_name, + NULL); + + if (theme_name && *theme_name) + return theme_name; + + g_free (theme_name); + return g_strdup ("Raleigh"); +} + static void settings_update_theme (GtkSettings *settings) { GtkSettingsPrivate *priv = settings->priv; gboolean prefer_dark_theme; gchar *theme_name; + gchar *theme_dir; + gchar *path; g_object_get (settings, - "gtk-theme-name", &theme_name, "gtk-application-prefer-dark-theme", &prefer_dark_theme, NULL); - if (!theme_name || !*theme_name) - { - g_free (theme_name); - theme_name = g_strdup ("Raleigh"); - } - + theme_name = get_theme_name (settings); + _gtk_css_provider_load_named (priv->theme_provider, theme_name, prefer_dark_theme ? "dark" : NULL); - if (theme_name && *theme_name) - { - gchar *theme_dir; - gchar *path; - - /* reload per-theme settings */ - theme_dir = _gtk_css_provider_get_theme_dir (); - path = g_build_filename (theme_dir, theme_name, "gtk-3.0", "settings.ini", NULL); - - if (g_file_test (path, G_FILE_TEST_EXISTS)) - gtk_settings_load_from_key_file (settings, path, GTK_SETTINGS_SOURCE_THEME); + /* reload per-theme settings */ + theme_dir = _gtk_css_provider_get_theme_dir (); + path = g_build_filename (theme_dir, theme_name, "gtk-3.0", "settings.ini", NULL); - g_free (theme_dir); - g_free (path); - } + if (g_file_test (path, G_FILE_TEST_EXISTS)) + gtk_settings_load_from_key_file (settings, path, GTK_SETTINGS_SOURCE_THEME); - g_free (theme_name); + g_free (theme_dir); + g_free (path); } static void |