bool isThemeAvailable() { const char* themeName = g_getenv("GTK_THEME"); if (!themeName) return true; if (0 == strcasecmp(themeName, "Adwaita")) return true; // When GTK doesn't find a theme, it simply loads Adwaita. GtkCssProvider* selectedTheme = gtk_css_provider_get_named(themeName, NULL); GtkCssProvider* adwaitaTheme = gtk_css_provider_get_named("Adwaita", NULL); char* selectedThemeString = gtk_css_provider_to_string(selectedTheme); char* adwaitaThemeString = gtk_css_provider_to_string(adwaitaTheme); const bool isAdwaita =(0 == strcmp(selectedThemeString, adwaitaThemeString)); g_free(selectedThemeString); g_free(adwaitaThemeString); if (isAdwaita) { printf("Error: Theme %s not found\n", themeName); return false; } return true; }
static void test_css_file (GFile *file) { GtkCssProvider *provider; char *css, *diff; char *css_file, *reference_file, *errors_file; GString *errors; GError *error = NULL; css_file = g_file_get_path (file); errors = g_string_new (""); provider = gtk_css_provider_new (); g_signal_connect (provider, "parsing-error", G_CALLBACK (parsing_error_cb), errors); gtk_css_provider_load_from_path (provider, css_file, NULL); css = gtk_css_provider_to_string (provider); reference_file = test_get_reference_file (css_file); diff = diff_with_file (reference_file, css, -1, &error); g_assert_no_error (error); if (diff && diff[0]) { g_test_message ("Resulting CSS doesn't match reference:\n%s", diff); g_test_fail (); } g_free (css); g_free (reference_file); errors_file = test_get_errors_file (css_file); if (errors_file) { diff = diff_with_file (errors_file, errors->str, errors->len, &error); g_assert_no_error (error); if (diff && diff[0]) { g_test_message ("Errors don't match expected errors:\n%s", diff); g_test_fail (); } } else if (errors->str[0]) { g_test_message ("Unexpected errors:\n%s", errors->str); g_test_fail (); } g_free (errors_file); g_string_free (errors, TRUE); g_free (diff); g_free (css_file); }