Mercurial > minori
diff src/sys/glib/dark_theme.cc @ 258:862d0d8619f6
*: HUUUGE changes
animia has been renamed to animone, so instead of thinking of a
health condition, you think of a beautiful flower :)
I've also edited some of the code for animone, but I have no idea
if it even works or not because I don't have a mac or windows
machine lying around. whoops!
... anyway, all of the changes divergent from Anisthesia are now
licensed under BSD. it's possible that I could even rewrite most
of the code to where I don't even have to keep the MIT license,
but that's thinking too far into the future
I've been slacking off on implementing the anime seasons page,
mostly out of laziness. I think I'd have to create another db file
specifically for the seasons
anyway, this code is being pushed *primarily* because the hard drive
it's on is failing! yay :)
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Mon, 01 Apr 2024 02:43:44 -0400 |
parents | c130f47f6f48 |
children | ac1451035c85 |
line wrap: on
line diff
--- a/src/sys/glib/dark_theme.cc Sun Feb 18 16:02:14 2024 -0500 +++ b/src/sys/glib/dark_theme.cc Mon Apr 01 02:43:44 2024 -0400 @@ -1,51 +1,72 @@ +#include <cstring> #include <gio/gio.h> -#include <cstring> #include <string_view> namespace glib { bool IsInDarkTheme() { - bool success = false; - GSettings* settings = ::g_settings_new("org.gnome.desktop.interface"); if (!settings) return false; - GVariant* val = ::g_settings_get_value(settings, "color-scheme"); - if (!val) - return false; + { + GVariant* val = ::g_settings_get_value(settings, "color-scheme"); + if (!val) { + ::g_object_unref(settings); + return false; + } - const gchar* str; - ::g_variant_get(val, "&s", &str); /* should not be freed */ - if (!str) /* how */ - return false; + const gchar* str = nullptr; + ::g_variant_get(val, "&s", &str); /* should not be freed */ + if (!str) { /* how */ + ::g_variant_unref(val); + ::g_object_unref(settings); + return false; + } - success |= !std::strcmp(str, "prefer-dark"); - - ::g_variant_unref(val); + bool success = !std::strcmp(str, "prefer-dark"); - if (success) { - ::g_object_unref(settings); - return success; + ::g_variant_unref(val); + + if (success) + return true; } - GVariant* gtk_theme = ::g_settings_get_value(settings, "gtk-theme"); - if (!gtk_theme) - return false; + { + GVariant* gtk_theme = ::g_settings_get_value(settings, "gtk-theme"); + if (!gtk_theme) { + ::g_object_unref(settings); + return false; + } - const gchar* gtk_theme_str; - ::g_variant_get(gtk_theme, "&s", gtk_theme_str); - if (!gtk_theme_str) - return false; + const gchar* gtk_theme_str = nullptr; + ::g_variant_get(gtk_theme, "&s", gtk_theme_str); + if (!gtk_theme_str) { + ::g_variant_unref(gtk_theme); + ::g_object_unref(settings); + return false; + } + + static constexpr std::string_view suffix = "-dark"; - static constexpr std::string_view suffix = "-dark"; + size_t gtk_theme_len = strlen(gtk_theme_str); - size_t gtk_theme_len = strlen(gtk_theme_str); + if (gtk_theme_len < suffix.length()) { + ::g_variant_unref(gtk_theme); + ::g_object_unref(settings); + return false; + } - success |= !std::strncmp(gtk_theme_str + gtk_theme_len - suffix.length(), suffix.data(), suffix.length()); + bool success = !std::strncmp(gtk_theme_str + gtk_theme_len - suffix.length(), suffix.data(), suffix.length()); + + ::g_variant_unref(gtk_theme); + ::g_object_unref(settings); - ::g_object_unref(settings); - return success; + if (success) + return true; + } + + return false; } -} +} // namespace glib