Fix GNOME wallpaper not visually updating in dark theme

(picture-uri-dark)
This commit is contained in:
AnmiTaliDev 2026-08-15 21:08:45 +05:00
parent 792c555250
commit 3bef7945ac
No known key found for this signature in database
GPG key ID: C15CE1C091FF3004

View file

@ -45,6 +45,8 @@
// GNOME settings // GNOME settings
static GSettings *bgsetting; static GSettings *bgsetting;
static std::string defPictureURI, defPictureOptions, defPrimaryColor, defColorShading; static std::string defPictureURI, defPictureOptions, defPrimaryColor, defColorShading;
static std::string defPictureURIDark;
static bool hasPictureURIDark = false;
// XFCE settings // XFCE settings
static XfconfChannel* bgchannel; static XfconfChannel* bgchannel;
static int defPictureStyle; static int defPictureStyle;
@ -70,6 +72,16 @@
#endif #endif
#ifdef unix_like #ifdef unix_like
static bool gsettingsHasKey(GSettings *settings, const char *key){
GSettingsSchema *schema = NULL;
g_object_get(settings, "settings-schema", &schema, NULL);
if (!schema)
return false;
bool has = g_settings_schema_has_key(schema, key);
g_settings_schema_unref(schema);
return has;
}
void desktopEnvironmentInit(){ void desktopEnvironmentInit(){
printf("[desktopEnvironmentInit] desktopEnvironmentInit()\n"); printf("[desktopEnvironmentInit] desktopEnvironmentInit()\n");
if (desktop != "uninitialized") if (desktop != "uninitialized")
@ -165,6 +177,9 @@
else if (desktop == "deepin") bgsetting = g_settings_new("com.deepin.wrap.gnome.desktop.background"); else if (desktop == "deepin") bgsetting = g_settings_new("com.deepin.wrap.gnome.desktop.background");
else bgsetting = g_settings_new("org.gnome.desktop.background"); else bgsetting = g_settings_new("org.gnome.desktop.background");
defPictureURI = g_settings_get_string(bgsetting, "picture-uri"); defPictureURI = g_settings_get_string(bgsetting, "picture-uri");
hasPictureURIDark = gsettingsHasKey(bgsetting, "picture-uri-dark");
if (hasPictureURIDark)
defPictureURIDark = g_settings_get_string(bgsetting, "picture-uri-dark");
} else { } else {
bgsetting = g_settings_new("org.mate.background"); bgsetting = g_settings_new("org.mate.background");
defPictureURI = g_settings_get_string(bgsetting, "picture-filename"); defPictureURI = g_settings_get_string(bgsetting, "picture-filename");
@ -428,6 +443,8 @@ end:
g_settings_set_string(bgsetting, "color-shading-type", "solid"); g_settings_set_string(bgsetting, "color-shading-type", "solid");
if (desktop == "cinnamon" || desktop == "gnome" || desktop == "deepin" || desktop == "budgie" || desktop == "pantheon") { if (desktop == "cinnamon" || desktop == "gnome" || desktop == "deepin" || desktop == "budgie" || desktop == "pantheon") {
g_settings_set_string(bgsetting, "picture-uri", ("file://" + gameDirStr + path).c_str()); g_settings_set_string(bgsetting, "picture-uri", ("file://" + gameDirStr + path).c_str());
if (hasPictureURIDark)
g_settings_set_string(bgsetting, "picture-uri-dark", ("file://" + gameDirStr + path).c_str());
} else { } else {
g_settings_set_string(bgsetting, "picture-filename", (gameDirStr + path).c_str()); g_settings_set_string(bgsetting, "picture-filename", (gameDirStr + path).c_str());
} }
@ -596,6 +613,8 @@ RB_METHOD(wallpaperReset){
if (desktop == "cinnamon" || desktop == "gnome" || desktop == "mate" || desktop == "deepin" || desktop == "budgie" || desktop == "pantheon") { if (desktop == "cinnamon" || desktop == "gnome" || desktop == "mate" || desktop == "deepin" || desktop == "budgie" || desktop == "pantheon") {
if (desktop == "cinnamon" || desktop == "gnome" || desktop == "deepin" || desktop == "budgie" || desktop == "pantheon") { if (desktop == "cinnamon" || desktop == "gnome" || desktop == "deepin" || desktop == "budgie" || desktop == "pantheon") {
g_settings_set_string(bgsetting, "picture-uri", defPictureURI.c_str()); g_settings_set_string(bgsetting, "picture-uri", defPictureURI.c_str());
if (hasPictureURIDark)
g_settings_set_string(bgsetting, "picture-uri-dark", defPictureURIDark.c_str());
} else { } else {
g_settings_set_string(bgsetting, "picture-filename", defPictureURI.c_str()); g_settings_set_string(bgsetting, "picture-filename", defPictureURI.c_str());
} }