From 14b0ef320ae4654e1d1f45a067489577b612e346 Mon Sep 17 00:00:00 2001 From: wxlyyy <1556588440@qq.com> Date: Thu, 13 Nov 2025 17:36:28 +0800 Subject: [PATCH] SessionMenu: add hibernate option --- Assets/Translations/de.json | 3 +- Assets/Translations/en.json | 1 + Assets/Translations/es.json | 1 + Assets/Translations/fr.json | 1 + Assets/Translations/nl.json | 1 + Assets/Translations/pt.json | 1 + Assets/Translations/ru.json | 1 + Assets/Translations/tr.json | 1 + Assets/Translations/uk-UA.json | 1 + Assets/Translations/zh-CN.json | 1 + Assets/settings-default.json | 6 ++- Commons/IconsTabler.qml | 1 + Commons/Settings.qml | 3 ++ Modules/LockScreen/LockScreen.qml | 48 +++++++++++++++++++ Modules/Panels/SessionMenu/SessionMenu.qml | 8 ++++ .../Panels/Settings/Tabs/SessionMenuTab.qml | 5 ++ Services/Compositor/CompositorService.qml | 5 ++ 17 files changed, 86 insertions(+), 2 deletions(-) diff --git a/Assets/Translations/de.json b/Assets/Translations/de.json index d7aea21cd..5be307dda 100644 --- a/Assets/Translations/de.json +++ b/Assets/Translations/de.json @@ -652,7 +652,8 @@ "logout": "Abmelden", "reboot": "Neu starten", "shutdown": "Herunterfahren", - "suspend": "Ruhezustand", + "suspend": "Energiesparmodus", + "hibernate": "Ruhezustand", "title": "Sitzungsmenü" }, "settings": { diff --git a/Assets/Translations/en.json b/Assets/Translations/en.json index bb26852e1..3155b7bb6 100644 --- a/Assets/Translations/en.json +++ b/Assets/Translations/en.json @@ -653,6 +653,7 @@ "reboot": "Reboot", "shutdown": "Shutdown", "suspend": "Suspend", + "hibernate": "Hibernate", "title": "Session Menu" }, "settings": { diff --git a/Assets/Translations/es.json b/Assets/Translations/es.json index b556ddeb3..9499bab15 100644 --- a/Assets/Translations/es.json +++ b/Assets/Translations/es.json @@ -653,6 +653,7 @@ "reboot": "Reiniciar", "shutdown": "Apagar", "suspend": "Suspender", + "hibernate": "Hibernación", "title": "Menú de sesión" }, "settings": { diff --git a/Assets/Translations/fr.json b/Assets/Translations/fr.json index ebeba4ca8..c8b5a6c1a 100644 --- a/Assets/Translations/fr.json +++ b/Assets/Translations/fr.json @@ -653,6 +653,7 @@ "reboot": "Redémarrer", "shutdown": "Éteindre", "suspend": "Mettre en veille", + "hibernate": "Mise en veille prolongée", "title": "Menu de session" }, "settings": { diff --git a/Assets/Translations/nl.json b/Assets/Translations/nl.json index 2c87c2f67..421984099 100644 --- a/Assets/Translations/nl.json +++ b/Assets/Translations/nl.json @@ -653,6 +653,7 @@ "reboot": "Opnieuw opstarten", "shutdown": "Uitschakelen", "suspend": "Onderbreken", + "hibernate": "Slaperstand", "title": "Sessie-menu" }, "settings": { diff --git a/Assets/Translations/pt.json b/Assets/Translations/pt.json index b24bc15eb..7b3218d2a 100644 --- a/Assets/Translations/pt.json +++ b/Assets/Translations/pt.json @@ -653,6 +653,7 @@ "reboot": "Reiniciar", "shutdown": "Desligar", "suspend": "Suspender", + "hibernate": "Hibernação", "title": "Menu da Sessão" }, "settings": { diff --git a/Assets/Translations/ru.json b/Assets/Translations/ru.json index 3d0b98306..db9da8132 100644 --- a/Assets/Translations/ru.json +++ b/Assets/Translations/ru.json @@ -653,6 +653,7 @@ "reboot": "Перезагрузить", "shutdown": "Выключить", "suspend": "Приостановить", + "hibernate": "Гибернация", "title": "Меню сеанса" }, "settings": { diff --git a/Assets/Translations/tr.json b/Assets/Translations/tr.json index 560d859ad..61ba6c78c 100644 --- a/Assets/Translations/tr.json +++ b/Assets/Translations/tr.json @@ -653,6 +653,7 @@ "reboot": "Yeniden başlat", "shutdown": "Bilgisayarı kapat", "suspend": "Askıya al", + "hibernate": "Hazırda Bekletme", "title": "Oturum Menüsü" }, "settings": { diff --git a/Assets/Translations/uk-UA.json b/Assets/Translations/uk-UA.json index 9223e582c..fd8d3c620 100644 --- a/Assets/Translations/uk-UA.json +++ b/Assets/Translations/uk-UA.json @@ -653,6 +653,7 @@ "reboot": "Перезавантажити", "shutdown": "Вимкнути", "suspend": "Призупинити", + "hibernate": "Гібернація", "title": "Меню сеансу" }, "settings": { diff --git a/Assets/Translations/zh-CN.json b/Assets/Translations/zh-CN.json index 197d2533b..473359beb 100644 --- a/Assets/Translations/zh-CN.json +++ b/Assets/Translations/zh-CN.json @@ -653,6 +653,7 @@ "reboot": "重启", "shutdown": "关机", "suspend": "挂起", + "hibernate": "休眠", "title": "会话菜单" }, "settings": { diff --git a/Assets/settings-default.json b/Assets/settings-default.json index f648641bc..b98def90e 100644 --- a/Assets/settings-default.json +++ b/Assets/settings-default.json @@ -219,6 +219,10 @@ "action": "suspend", "enabled": true }, + { + "action": "hibernate", + "enabled": true + }, { "action": "reboot", "enabled": true @@ -317,4 +321,4 @@ "battery": { "chargingMode": 0 } -} \ No newline at end of file +} diff --git a/Commons/IconsTabler.qml b/Commons/IconsTabler.qml index f700360b1..0b85a2bb8 100644 --- a/Commons/IconsTabler.qml +++ b/Commons/IconsTabler.qml @@ -49,6 +49,7 @@ Singleton { "logout": "logout", "reboot": "refresh", "suspend": "player-pause", + "hibernate": "zzz", "nightlight-on": "moon", "nightlight-off": "moon-off", "nightlight-forced": "moon-stars", diff --git a/Commons/Settings.qml b/Commons/Settings.qml index d1a8ae176..1e31fe25d 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -352,6 +352,9 @@ Singleton { }, { "action": "suspend", "enabled": true + }, { + "action": "hibernate", + "enabled": true }, { "action": "reboot", "enabled": true diff --git a/Modules/LockScreen/LockScreen.qml b/Modules/LockScreen/LockScreen.qml index 4c87d1ca0..4bf8b4d5d 100644 --- a/Modules/LockScreen/LockScreen.qml +++ b/Modules/LockScreen/LockScreen.qml @@ -1188,6 +1188,54 @@ Loader { } } + Rectangle { + Layout.fillWidth: true + Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 + radius: Settings.data.general.compactLockScreen ? 18 : 24 + color: hibernateButtonArea.containsMouse ? Color.mHover : "transparent" + border.color: Color.mOutline + border.width: 1 + + RowLayout { + anchors.centerIn: parent + spacing: 6 + + NIcon { + icon: "hibernate" + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeM : Style.fontSizeL + color: hibernateButtonArea.containsMouse ? Color.mOnHover : Color.mOnSurfaceVariant + } + + NText { + text: I18n.tr("session-menu.hibernate") + pointSize: Settings.data.general.compactLockScreen ? Style.fontSizeS : Style.fontSizeM + color: hibernateButtonArea.containsMouse ? Color.mOnHover : Color.mOnSurfaceVariant + font.weight: Font.Medium + } + } + + MouseArea { + id: hibernateButtonArea + anchors.fill: parent + hoverEnabled: true + onClicked: CompositorService.hibernate() + } + + Behavior on color { + ColorAnimation { + duration: 200 + easing.type: Easing.OutCubic + } + } + + Behavior on border.color { + ColorAnimation { + duration: 200 + easing.type: Easing.OutCubic + } + } + } + Rectangle { Layout.fillWidth: true Layout.preferredHeight: Settings.data.general.compactLockScreen ? 36 : 48 diff --git a/Modules/Panels/SessionMenu/SessionMenu.qml b/Modules/Panels/SessionMenu/SessionMenu.qml index 07b071ed5..4c99a47d1 100644 --- a/Modules/Panels/SessionMenu/SessionMenu.qml +++ b/Modules/Panels/SessionMenu/SessionMenu.qml @@ -65,6 +65,11 @@ SmartPanel { "title": I18n.tr("session-menu.suspend"), "isShutdown": false }, + "hibernate": { + "icon": "hibernate", + "title": I18n.tr("session-menu.hibernate"), + "isShutdown": false + }, "reboot": { "icon": "reboot", "title": I18n.tr("session-menu.reboot"), @@ -159,6 +164,9 @@ SmartPanel { CompositorService.suspend() } break + case "hibernate": + CompositorService.hibernate() + break case "reboot": CompositorService.reboot() break diff --git a/Modules/Panels/Settings/Tabs/SessionMenuTab.qml b/Modules/Panels/Settings/Tabs/SessionMenuTab.qml index 184f2cbaa..0ce810e63 100644 --- a/Modules/Panels/Settings/Tabs/SessionMenuTab.qml +++ b/Modules/Panels/Settings/Tabs/SessionMenuTab.qml @@ -22,6 +22,11 @@ ColumnLayout { "text": I18n.tr("session-menu.suspend"), "enabled": true, "required": false + }, { + "id": "hibernate", + "text": I18n.tr("session-menu.hibernate"), + "enabled": true, + "required": false }, { "id": "reboot", "text": I18n.tr("session-menu.reboot"), diff --git a/Services/Compositor/CompositorService.qml b/Services/Compositor/CompositorService.qml index 0ce10ffa7..069e468d3 100644 --- a/Services/Compositor/CompositorService.qml +++ b/Services/Compositor/CompositorService.qml @@ -342,6 +342,11 @@ Singleton { Quickshell.execDetached(["sh", "-c", "systemctl suspend || loginctl suspend"]) } + function hibernate() { + Logger.i("Compositor", "Hibernate requested") + Quickshell.execDetached(["sh", "-c", "systemctl hibernate || loginctl hibernate"]) + } + function lockAndSuspend() { Logger.i("Compositor", "Lock and suspend requested") try {