diff --git a/gdk/x11/gdkevents-x11.c b/gdk/x11/gdkevents-x11.c index 186a8f5cb2..f5c39b5afe 100644 --- a/gdk/x11/gdkevents-x11.c +++ b/gdk/x11/gdkevents-x11.c @@ -3000,6 +3000,50 @@ check_transform (const gchar *xsettings_name, return TRUE; } +static gchar * +gtk_rc_get_theme_dir (void) +{ + const gchar *var; + gchar *path; + + var = g_getenv ("GTK_DATA_PREFIX"); + + if (var) + path = g_build_filename (var, "share", "themes", NULL); + else + path = g_build_filename ("/app", "share", "themes", NULL); + + return path; +} + +static gboolean +theme_name_valid (XSettingsSetting *setting) +{ + gboolean res = FALSE; + + if (setting->type == XSETTINGS_TYPE_STRING) + { + char *theme_name = setting->data.v_string; + gchar *theme_dir = gtk_rc_get_theme_dir (); + gchar *path = g_build_filename (theme_dir, theme_name, "gtk-2.0", "gtkrc", NULL); + + if (g_file_test (path, G_FILE_TEST_EXISTS)) + res = TRUE; + else if (g_str_has_suffix (theme_name, "-Dark") || + g_str_has_suffix (theme_name, "-dark")) + { + setting->data.v_string = g_strdup ("Adwaita-dark"); + g_free (theme_name); + res = TRUE; + } + + g_free (theme_dir); + g_free (path); + } + + return res; +} + /** * gdk_screen_get_setting: * @screen: the #GdkScreen where the setting is located @@ -3050,6 +3094,11 @@ gdk_screen_get_setting (GdkScreen *screen, if (result != XSETTINGS_SUCCESS) goto out; + if (strcmp (name, "gtk-theme-name") == 0 && + (setting->type != XSETTINGS_TYPE_STRING || + !theme_name_valid (setting))) + goto out; + switch (setting->type) { case XSETTINGS_TYPE_INT: diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index 3fbbf00548..5c0a4b33d2 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -312,7 +312,7 @@ gtk_settings_class_init (GtkSettingsClass *class) #ifdef G_OS_WIN32 "MS-Windows", #else - "Raleigh", + "Adwaita", #endif GTK_PARAM_READWRITE), NULL);