diff --git a/Assets/Translations/de.json b/Assets/Translations/de.json index c13ea1c95..f1ac6e338 100644 --- a/Assets/Translations/de.json +++ b/Assets/Translations/de.json @@ -2066,6 +2066,8 @@ "categories-people": "Personen", "color-extraction-disabled": "Hintergrundbild-Farbenextraktion verwenden", "color-extraction-enabled": "Vordefinierte Farbschemata nutzen", + "link-light-dark-description": "Einen Hintergrund für helles und dunkles Erscheinungsbild verwenden. Deaktivieren, um verschiedene Bilder auszuwählen.", + "link-light-dark-label": "Gleiches Hintergrundbild für hell und dunkel", "order-asc": "Aufsteigend", "order-desc": "Absteigend", "order-label": "Reihenfolge", diff --git a/Assets/Translations/en-GB.json b/Assets/Translations/en-GB.json index 35b066a00..042d4b290 100644 --- a/Assets/Translations/en-GB.json +++ b/Assets/Translations/en-GB.json @@ -2066,6 +2066,8 @@ "categories-people": "People", "color-extraction-disabled": "Use wallpaper colour extraction", "color-extraction-enabled": "Use predefined colour schemes", + "link-light-dark-description": "Use one wallpaper for both light and dark appearance. Turn off to pick different images.", + "link-light-dark-label": "Same wallpaper for light and dark", "order-asc": "Ascending", "order-desc": "Descending", "order-label": "Order", diff --git a/Assets/Translations/en.json b/Assets/Translations/en.json index 236cd6bc4..188290531 100644 --- a/Assets/Translations/en.json +++ b/Assets/Translations/en.json @@ -2066,6 +2066,8 @@ "categories-people": "People", "color-extraction-disabled": "Use wallpaper color extraction", "color-extraction-enabled": "Use predefined color schemes", + "link-light-dark-description": "Use one wallpaper for both light and dark appearance. Turn off to pick different images.", + "link-light-dark-label": "Same wallpaper for light and dark", "order-asc": "Ascending", "order-desc": "Descending", "order-label": "Order", diff --git a/Assets/Translations/es.json b/Assets/Translations/es.json index 181bdf377..de24b5a1e 100644 --- a/Assets/Translations/es.json +++ b/Assets/Translations/es.json @@ -2066,6 +2066,8 @@ "categories-people": "Personas", "color-extraction-disabled": "Usar extracción de colores del fondo de pantalla", "color-extraction-enabled": "Usar esquemas de color predefinidos", + "link-light-dark-description": "Usar un mismo fondo de pantalla para la apariencia clara y oscura. Desactiva para elegir imágenes diferentes.", + "link-light-dark-label": "Mismo fondo de pantalla para claro y oscuro", "order-asc": "Ascendente", "order-desc": "Descendente", "order-label": "Orden", diff --git a/Assets/Translations/fr.json b/Assets/Translations/fr.json index eb8ae88cc..469576912 100644 --- a/Assets/Translations/fr.json +++ b/Assets/Translations/fr.json @@ -2066,6 +2066,8 @@ "categories-people": "Personnes", "color-extraction-disabled": "Utiliser l'extraction des couleurs du fond d'écran", "color-extraction-enabled": "Utiliser les schémas de couleurs prédéfinis", + "link-light-dark-description": "Utiliser un seul fond d'écran pour l'apparence claire et sombre. Désactivez pour choisir différentes images.", + "link-light-dark-label": "Même fond d'écran pour clair et sombre", "order-asc": "Croissant", "order-desc": "Décroissant", "order-label": "Ordre", diff --git a/Assets/Translations/hu.json b/Assets/Translations/hu.json index 18fbb6189..2a1d199fc 100644 --- a/Assets/Translations/hu.json +++ b/Assets/Translations/hu.json @@ -2066,6 +2066,8 @@ "categories-people": "Emberek", "color-extraction-disabled": "Háttérkép színkivonás használata", "color-extraction-enabled": "Előre meghatározott színsémák használata", + "link-light-dark-description": "Egy háttérkép használata világos és sötét megjelenéshez is. Kapcsolja ki, hogy különböző képeket választhasson.", + "link-light-dark-label": "Ugyanaz a háttérkép világos és sötét módhoz", "order-asc": "Növekvő", "order-desc": "Csökkenő", "order-label": "Sorrend", diff --git a/Assets/Translations/it.json b/Assets/Translations/it.json index a34042f87..213a0e01e 100644 --- a/Assets/Translations/it.json +++ b/Assets/Translations/it.json @@ -2066,6 +2066,8 @@ "categories-people": "Persone", "color-extraction-disabled": "Usa estrazione colori dallo sfondo", "color-extraction-enabled": "Usa schemi colore predefiniti", + "link-light-dark-description": "Usa un solo sfondo per l'aspetto chiaro e scuro. Disattiva per scegliere immagini diverse.", + "link-light-dark-label": "Stesso sfondo per chiaro e scuro", "order-asc": "Crescente", "order-desc": "Decrescente", "order-label": "Ordine", diff --git a/Assets/Translations/ja.json b/Assets/Translations/ja.json index a357c732b..0a4110720 100644 --- a/Assets/Translations/ja.json +++ b/Assets/Translations/ja.json @@ -2066,6 +2066,8 @@ "categories-people": "人物", "color-extraction-disabled": "壁紙の色抽出を使用する", "color-extraction-enabled": "事前定義された配色スキームを使用する", + "link-light-dark-description": "ライトとダークの両方の外観に同じ壁紙を使用します。オフにすると、異なる画像を選択できます。", + "link-light-dark-label": "ライトとダークで同じ壁紙", "order-asc": "昇順", "order-desc": "降順", "order-label": "順序", diff --git a/Assets/Translations/ko-KR.json b/Assets/Translations/ko-KR.json index 7a8d36c4f..37a77feaf 100644 --- a/Assets/Translations/ko-KR.json +++ b/Assets/Translations/ko-KR.json @@ -2066,6 +2066,8 @@ "categories-people": "인물", "color-extraction-disabled": "배경화면 색상 추출 사용", "color-extraction-enabled": "사전 정의된 색상 구성표 사용", + "link-light-dark-description": "밝고 어두운 테마 모두에 하나의 배경화면을 사용합니다. 끄면 다른 이미지를 선택할 수 있습니다.", + "link-light-dark-label": "밝고 어두운 모드에 동일한 배경화면", "order-asc": "오름차순", "order-desc": "내림차순", "order-label": "순서", diff --git a/Assets/Translations/nl.json b/Assets/Translations/nl.json index 5bd8330ad..50c746bb0 100644 --- a/Assets/Translations/nl.json +++ b/Assets/Translations/nl.json @@ -2066,6 +2066,8 @@ "categories-people": "Mensen", "color-extraction-disabled": "Achtergrondkleurextractie gebruiken", "color-extraction-enabled": "Voorgedefinieerde kleurenschema's gebruiken", + "link-light-dark-description": "Gebruik één achtergrond voor zowel lichte als donkere weergave. Schakel uit om verschillende afbeeldingen te kiezen.", + "link-light-dark-label": "Zelfde achtergrond voor licht en donker", "order-asc": "Oplopend", "order-desc": "Aflopend", "order-label": "Volgorde", diff --git a/Assets/Translations/pl.json b/Assets/Translations/pl.json index aba885372..a3d939145 100644 --- a/Assets/Translations/pl.json +++ b/Assets/Translations/pl.json @@ -2066,6 +2066,8 @@ "categories-people": "Ludzie", "color-extraction-disabled": "Użyj ekstrakcji kolorów tapety", "color-extraction-enabled": "Użyj predefiniowanych schematów kolorów", + "link-light-dark-description": "Użyj jednej tapety dla jasnego i ciemnego wyglądu. Wyłącz, aby wybrać inne obrazy.", + "link-light-dark-label": "Ta sama tapeta dla trybu jasnego i ciemnego", "order-asc": "Rosnąco", "order-desc": "Malejąco", "order-label": "Kolejność", diff --git a/Assets/Translations/pt.json b/Assets/Translations/pt.json index 81f483b30..e01e0a46b 100644 --- a/Assets/Translations/pt.json +++ b/Assets/Translations/pt.json @@ -2066,6 +2066,8 @@ "categories-people": "Pessoas", "color-extraction-disabled": "Usar extração de cores do papel de parede", "color-extraction-enabled": "Usar esquemas de cores predefinidos", + "link-light-dark-description": "Usar um único papel de parede para a aparência clara e escura. Desative para escolher imagens diferentes.", + "link-light-dark-label": "Mesmo papel de parede para claro e escuro", "order-asc": "Crescente", "order-desc": "Decrescente", "order-label": "Ordem", diff --git a/Assets/Translations/ru.json b/Assets/Translations/ru.json index 292bead80..a55c797fb 100644 --- a/Assets/Translations/ru.json +++ b/Assets/Translations/ru.json @@ -2066,6 +2066,8 @@ "categories-people": "Люди", "color-extraction-disabled": "Использовать извлечение цветов обоев", "color-extraction-enabled": "Использовать предопределенные цветовые схемы", + "link-light-dark-description": "Использовать одни обои для светлого и темного оформления. Отключите, чтобы выбрать другие изображения.", + "link-light-dark-label": "Одни и те же обои для светлой и темной темы", "order-asc": "По возрастанию", "order-desc": "По убыванию", "order-label": "Порядок", diff --git a/Assets/Translations/sv.json b/Assets/Translations/sv.json index 8c992494e..ae973d11b 100644 --- a/Assets/Translations/sv.json +++ b/Assets/Translations/sv.json @@ -2066,6 +2066,8 @@ "categories-people": "Personer", "color-extraction-disabled": "Använd bakgrundsfärgsutvinning", "color-extraction-enabled": "Använd fördefinierade färgscheman", + "link-light-dark-description": "Använd en bakgrundsbild för både ljust och mörkt utseende. Stäng av för att välja olika bilder.", + "link-light-dark-label": "Samma bakgrundsbild för ljust och mörkt", "order-asc": "Stigande", "order-desc": "Fallande", "order-label": "Ordning", diff --git a/Assets/Translations/tr.json b/Assets/Translations/tr.json index 06dd5e98d..e9930d625 100644 --- a/Assets/Translations/tr.json +++ b/Assets/Translations/tr.json @@ -2066,6 +2066,8 @@ "categories-people": "İnsanlar", "color-extraction-disabled": "Duvar kağıdı renk çıkarma kullan", "color-extraction-enabled": "Önceden tanımlanmış renk şemalarını kullan", + "link-light-dark-description": "Hem açık hem de koyu görünüm için tek bir duvar kağıdı kullanın. Farklı görseller seçmek için kapatın.", + "link-light-dark-label": "Açık ve koyu için aynı duvar kağıdı", "order-asc": "Artan", "order-desc": "Azalan", "order-label": "Sıra", diff --git a/Assets/Translations/uk-UA.json b/Assets/Translations/uk-UA.json index d2f66fa1f..330b3ce18 100644 --- a/Assets/Translations/uk-UA.json +++ b/Assets/Translations/uk-UA.json @@ -2066,6 +2066,8 @@ "categories-people": "Люди", "color-extraction-disabled": "Використовувати вилучення кольорів шпалер", "color-extraction-enabled": "Використовувати попередньо визначені кольорові схеми", + "link-light-dark-description": "Використовувати одні шпалери для світлого та темного оформлення. Вимкніть, щоб вибрати інші зображення.", + "link-light-dark-label": "Однакові шпалери для світлого та темного режимів", "order-asc": "За зростанням", "order-desc": "За спаданням", "order-label": "Порядок", diff --git a/Assets/Translations/vi.json b/Assets/Translations/vi.json index 21e635260..21133e056 100644 --- a/Assets/Translations/vi.json +++ b/Assets/Translations/vi.json @@ -2066,6 +2066,8 @@ "categories-people": "Mọi người", "color-extraction-disabled": "Sử dụng trích xuất màu hình nền.", "color-extraction-enabled": "Sử dụng các bảng màu tích hợp sẵn", + "link-light-dark-description": "Sử dụng một hình nền cho cả giao diện sáng và tối. Tắt để chọn các hình ảnh khác.", + "link-light-dark-label": "Cùng hình nền cho chế độ sáng và tối", "order-asc": "Tăng dần", "order-desc": "Giảm dần", "order-label": "Thứ tự", diff --git a/Assets/Translations/zh-CN.json b/Assets/Translations/zh-CN.json index bba07bc45..114f64a20 100644 --- a/Assets/Translations/zh-CN.json +++ b/Assets/Translations/zh-CN.json @@ -2066,6 +2066,8 @@ "categories-people": "人物", "color-extraction-disabled": "使用壁纸颜色提取", "color-extraction-enabled": "使用预设配色方案", + "link-light-dark-description": "为浅色和深色外观使用同一张壁纸。关闭此选项以选择不同的图片。", + "link-light-dark-label": "明暗模式使用相同壁纸", "order-asc": "升序", "order-desc": "降序", "order-label": "顺序", diff --git a/Assets/Translations/zh-TW.json b/Assets/Translations/zh-TW.json index b2638e52b..6a577bb4e 100644 --- a/Assets/Translations/zh-TW.json +++ b/Assets/Translations/zh-TW.json @@ -2066,6 +2066,8 @@ "categories-people": "人物", "color-extraction-disabled": "使用桌布顏色擷取", "color-extraction-enabled": "使用預設配色方案", + "link-light-dark-description": "為淺色和深色外觀使用同一張桌布。關閉此選項以選擇不同的圖片。", + "link-light-dark-label": "明暗模式使用相同桌布", "order-asc": "升序", "order-desc": "降序", "order-label": "排序", diff --git a/Assets/settings-default.json b/Assets/settings-default.json index cbc3f5545..5057d9929 100644 --- a/Assets/settings-default.json +++ b/Assets/settings-default.json @@ -197,6 +197,7 @@ "showHiddenFiles": false, "viewMode": "single", "setWallpaperOnAllMonitors": true, + "linkLightAndDarkWallpapers": true, "fillMode": "crop", "fillColor": "#000000", "useSolidColor": false, diff --git a/Commons/Settings.qml b/Commons/Settings.qml index 9c5f456ef..ad6508e94 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -382,6 +382,7 @@ Singleton { property bool showHiddenFiles: false property string viewMode: "single" // "single" | "recursive" | "browse" property bool setWallpaperOnAllMonitors: true + property bool linkLightAndDarkWallpapers: true property string fillMode: "crop" property color fillColor: "#000000" property bool useSolidColor: false diff --git a/Modules/Panels/Wallpaper/WallpaperPanel.qml b/Modules/Panels/Wallpaper/WallpaperPanel.qml index 617bd38d8..17414ecdb 100644 --- a/Modules/Panels/Wallpaper/WallpaperPanel.qml +++ b/Modules/Panels/Wallpaper/WallpaperPanel.qml @@ -334,9 +334,18 @@ SmartPanel { Layout.fillWidth: true } + NToggle { + label: I18n.tr("wallpaper.panel.link-light-dark-label") + description: I18n.tr("wallpaper.panel.link-light-dark-description") + checked: Settings.data.wallpaper.linkLightAndDarkWallpapers + onToggled: checked => Settings.data.wallpaper.linkLightAndDarkWallpapers = checked + defaultValue: Settings.getDefaultValue("wallpaper.linkLightAndDarkWallpapers") + Layout.fillWidth: true + } + NTabBar { id: appearanceTabBar - visible: Settings.data.wallpaper.enabled + visible: Settings.data.wallpaper.enabled && !Settings.data.wallpaper.linkLightAndDarkWallpapers Layout.fillWidth: true currentIndex: panelContent.appearanceTabIndex spacing: Style.marginM diff --git a/Services/UI/WallpaperService.qml b/Services/UI/WallpaperService.qml index 75a435794..8ca2c1064 100644 --- a/Services/UI/WallpaperService.qml +++ b/Services/UI/WallpaperService.qml @@ -139,11 +139,21 @@ Singleton { function onSortOrderChanged() { root.refreshWallpapersList(); } + function onLinkLightAndDarkWallpapersChanged() { + if (Settings.data.wallpaper.linkLightAndDarkWallpapers) { + root.wallpaperSelectionAppearance = Settings.data.colorSchemes.darkMode ? "dark" : "light"; + root._syncWallpaperSlotsWhenLinking(); + } + root._notifyAllWallpapersChanged(); + } } Connections { target: Settings.data.colorSchemes function onDarkModeChanged() { + if (Settings.data.wallpaper.linkLightAndDarkWallpapers) { + root.wallpaperSelectionAppearance = Settings.data.colorSchemes.darkMode ? "dark" : "light"; + } // Restore scheme from favorite for this light/dark slot before wallpaper refresh root.reapplyFavoriteThemeForActiveWallpaper(); root._notifyAllWallpapersChanged(); @@ -569,9 +579,18 @@ Singleton { return; } var p = _pathsFromEntry(e); - var old = slot === "dark" ? p.dark : p.light; - if (old && old !== newPath) { - paths.push(old); + if (Settings.data.wallpaper.linkLightAndDarkWallpapers) { + if (p.light && p.light !== newPath) { + paths.push(p.light); + } + if (p.dark && p.dark !== newPath && p.dark !== p.light) { + paths.push(p.dark); + } + } else { + var old = slot === "dark" ? p.dark : p.light; + if (old && old !== newPath) { + paths.push(old); + } } } @@ -595,7 +614,16 @@ Singleton { } unique.forEach(function (path) { - if (path && path !== newPath && isFavorite(path, slot)) { + if (!path || path === newPath) { + return; + } + if (Settings.data.wallpaper.linkLightAndDarkWallpapers) { + ["light", "dark"].forEach(function (app) { + if (isFavorite(path, app)) { + updateFavoriteColorScheme(path, app); + } + }); + } else if (isFavorite(path, slot)) { updateFavoriteColorScheme(path, slot); } }); @@ -627,6 +655,36 @@ Singleton { return ""; } + function _syncWallpaperSlotsWhenLinking() { + var names = new Set(Object.keys(currentWallpapers)); + for (var i = 0; i < Quickshell.screens.length; i++) { + names.add(Quickshell.screens[i].name); + } + names.forEach(function (name) { + var e = currentWallpapers[name]; + if (!e) { + return; + } + var eff = _entryToEffectivePath(e); + if (!eff) { + return; + } + var merged = { + light: eff, + dark: eff + }; + if (_entriesEqual(e, merged)) { + return; + } + currentWallpapers[name] = merged; + saveTimer.restart(); + root.wallpaperChanged(name, eff); + }); + if (randomWallpaperTimer.running) { + randomWallpaperTimer.restart(); + } + } + function _setWallpaper(screenName, path, appearanceSlot) { if (path === "" || path === undefined) { return; @@ -641,7 +699,12 @@ Singleton { var oldEntry = currentWallpapers[screenName]; var p = _pathsFromEntry(oldEntry); var newEntry; - if (slot === "dark") { + if (Settings.data.wallpaper.linkLightAndDarkWallpapers) { + newEntry = { + light: path, + dark: path + }; + } else if (slot === "dark") { newEntry = { light: p.light || p.dark || path, dark: path @@ -1432,6 +1495,11 @@ Singleton { root._ensureObjectWallpaperEntries(); + if (Settings.data.wallpaper.linkLightAndDarkWallpapers) { + root.wallpaperSelectionAppearance = Settings.data.colorSchemes.darkMode ? "dark" : "light"; + root._syncWallpaperSlotsWhenLinking(); + } + // Load default wallpaper from cache if it exists, otherwise use Noctalia default if (wallpaperCacheAdapter.defaultWallpaper && wallpaperCacheAdapter.defaultWallpaper !== "") { root.defaultWallpaper = wallpaperCacheAdapter.defaultWallpaper;