GtkSettings: Add a new provider for the theme CSS file.
This commit is contained in:
parent
ac73a8f7a8
commit
cc68e62e24
@ -207,6 +207,7 @@ static void settings_update_font_options (GtkSettings *setting
|
|||||||
static gboolean settings_update_fontconfig (GtkSettings *settings);
|
static gboolean settings_update_fontconfig (GtkSettings *settings);
|
||||||
#endif
|
#endif
|
||||||
static void settings_update_color_scheme (GtkSettings *settings);
|
static void settings_update_color_scheme (GtkSettings *settings);
|
||||||
|
static void settings_update_theme (GtkSettings *settings);
|
||||||
|
|
||||||
static void merge_color_scheme (GtkSettings *settings,
|
static void merge_color_scheme (GtkSettings *settings,
|
||||||
const GValue *value,
|
const GValue *value,
|
||||||
@ -1556,6 +1557,10 @@ gtk_settings_notify (GObject *object,
|
|||||||
break;
|
break;
|
||||||
case PROP_COLOR_SCHEME:
|
case PROP_COLOR_SCHEME:
|
||||||
settings_update_color_scheme (settings);
|
settings_update_color_scheme (settings);
|
||||||
|
gtk_style_context_reset_widgets (settings->screen);
|
||||||
|
break;
|
||||||
|
case PROP_THEME_NAME:
|
||||||
|
settings_update_theme (settings);
|
||||||
break;
|
break;
|
||||||
#ifdef GDK_WINDOWING_X11
|
#ifdef GDK_WINDOWING_X11
|
||||||
case PROP_XFT_DPI:
|
case PROP_XFT_DPI:
|
||||||
@ -2594,6 +2599,49 @@ settings_update_color_scheme (GtkSettings *settings)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
settings_update_theme (GtkSettings *settings)
|
||||||
|
{
|
||||||
|
static GQuark quark_theme_name = 0;
|
||||||
|
GtkCssProvider *provider, *new_provider = NULL;
|
||||||
|
gboolean prefer_dark_theme;
|
||||||
|
gchar *theme_name;
|
||||||
|
|
||||||
|
if (G_UNLIKELY (!quark_theme_name))
|
||||||
|
quark_theme_name = g_quark_from_static_string ("gtk-settings-theme-name");
|
||||||
|
|
||||||
|
provider = g_object_get_qdata (G_OBJECT (settings), quark_theme_name);
|
||||||
|
|
||||||
|
g_object_get (settings,
|
||||||
|
"gtk-theme-name", &theme_name,
|
||||||
|
"gtk-application-prefer-dark-theme", &prefer_dark_theme,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
if (theme_name && *theme_name)
|
||||||
|
{
|
||||||
|
gchar *variant = NULL;
|
||||||
|
|
||||||
|
if (prefer_dark_theme)
|
||||||
|
variant = "dark";
|
||||||
|
|
||||||
|
new_provider = gtk_css_provider_get_named (theme_name, variant);
|
||||||
|
g_free (theme_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (new_provider != provider)
|
||||||
|
{
|
||||||
|
if (provider)
|
||||||
|
gtk_style_context_remove_provider_for_screen (settings->screen, provider);
|
||||||
|
|
||||||
|
if (new_provider)
|
||||||
|
gtk_style_context_add_provider_for_screen (settings->screen, new_provider,
|
||||||
|
GTK_STYLE_PROVIDER_PRIORITY_SETTINGS + 1);
|
||||||
|
|
||||||
|
g_object_set_qdata_full (G_OBJECT (settings), quark_theme_name,
|
||||||
|
new_provider, (GDestroyNotify) g_object_unref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
add_color_to_hash (gchar *name,
|
add_color_to_hash (gchar *name,
|
||||||
GdkColor *color,
|
GdkColor *color,
|
||||||
|
Loading…
Reference in New Issue
Block a user