From 4daeff917b69638ec5dd2caba5e7bd3fa1fbe965 Mon Sep 17 00:00:00 2001 From: Shock-OS Date: Mon, 15 Sep 2025 17:52:41 -0700 Subject: [PATCH] Laptop Suspend Inhibitor: When clicked, disables/re-enables laptop suspension when the lid is closed. Usefull for quickly toggling suspension to switch between saving power and listening to music with the lid closed. Pull request adds this applet. Changes to be committed: new file: laptop-suspend-inhibitor@carsongfromjpt/applet.js new file: laptop-suspend-inhibitor@carsongfromjpt/icon.png new file: laptop-suspend-inhibitor@carsongfromjpt/icons/lock-screen-symbolic.svg new file: laptop-suspend-inhibitor@carsongfromjpt/icons/suspend-symbolic.svg new file: laptop-suspend-inhibitor@carsongfromjpt/metadata.json new file: laptop-suspend-inhibitor@carsongfromjpt/switch-mode.sh --- .../applet.js | 41 +++++++++++ .../icon.png | Bin 0 -> 9728 bytes .../icons/lock-screen-symbolic.svg | 67 ++++++++++++++++++ .../icons/suspend-symbolic.svg | 60 ++++++++++++++++ .../metadata.json | 7 ++ .../switch-mode.sh | 11 +++ 6 files changed, 186 insertions(+) create mode 100644 laptop-suspend-inhibitor@carsongfromjpt/applet.js create mode 100644 laptop-suspend-inhibitor@carsongfromjpt/icon.png create mode 100644 laptop-suspend-inhibitor@carsongfromjpt/icons/lock-screen-symbolic.svg create mode 100644 laptop-suspend-inhibitor@carsongfromjpt/icons/suspend-symbolic.svg create mode 100644 laptop-suspend-inhibitor@carsongfromjpt/metadata.json create mode 100755 laptop-suspend-inhibitor@carsongfromjpt/switch-mode.sh diff --git a/laptop-suspend-inhibitor@carsongfromjpt/applet.js b/laptop-suspend-inhibitor@carsongfromjpt/applet.js new file mode 100644 index 00000000000..b456feee7ff --- /dev/null +++ b/laptop-suspend-inhibitor@carsongfromjpt/applet.js @@ -0,0 +1,41 @@ +const Applet = imports.ui.applet; +const GLib = imports.gi.GLib; +const Gio = imports.gi.Gio; + +class MyTrayApplet extends Applet.IconApplet { + constructor(metadata, orientation, panelHeight, instanceId) { + super(orientation, panelHeight, instanceId); + + this.appletPath = metadata.path + "/"; + + this.set_applet_tooltip("Laptop Suspend Inhibitor: Click to disable suspension when the laptop lid is closed, click again to re-enable. Useful for playing music with the laptop closed."); + + // dconf schema and key + this.dconfKey = "/org/cinnamon/settings-daemon/plugins/power/"; + this.dconfClient = new Gio.Settings({ schema_id: "org.cinnamon.settings-daemon.plugins.power" }); + + // Watch dconf for changes + this.dconfClient.connect("changed", () => this.updateIcon()); + + this.updateIcon(); + } + + updateIcon() { + let value = this.dconfClient.get_string("lid-close-battery-action"); + if (value === "suspend") { + this.set_applet_icon_symbolic_name("suspend"); + } else { + this.set_applet_icon_symbolic_name("lock-screen"); + } + } + + on_applet_clicked(event) { + // Run your script when clicked + GLib.spawn_command_line_async(this.appletPath + "switch-mode.sh"); + } +} + +function main(metadata, orientation, panelHeight, instanceId) { + return new MyTrayApplet(metadata, orientation, panelHeight, instanceId); +} + diff --git a/laptop-suspend-inhibitor@carsongfromjpt/icon.png b/laptop-suspend-inhibitor@carsongfromjpt/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9bad96d76bad2a12fd71047a4e0bf65a08452f68 GIT binary patch literal 9728 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 H{Eq$)>I6mo literal 0 HcmV?d00001 diff --git a/laptop-suspend-inhibitor@carsongfromjpt/icons/lock-screen-symbolic.svg b/laptop-suspend-inhibitor@carsongfromjpt/icons/lock-screen-symbolic.svg new file mode 100644 index 00000000000..1b575b02d1b --- /dev/null +++ b/laptop-suspend-inhibitor@carsongfromjpt/icons/lock-screen-symbolic.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/laptop-suspend-inhibitor@carsongfromjpt/icons/suspend-symbolic.svg b/laptop-suspend-inhibitor@carsongfromjpt/icons/suspend-symbolic.svg new file mode 100644 index 00000000000..e93fdb2fbde --- /dev/null +++ b/laptop-suspend-inhibitor@carsongfromjpt/icons/suspend-symbolic.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/laptop-suspend-inhibitor@carsongfromjpt/metadata.json b/laptop-suspend-inhibitor@carsongfromjpt/metadata.json new file mode 100644 index 00000000000..e80ec5495bb --- /dev/null +++ b/laptop-suspend-inhibitor@carsongfromjpt/metadata.json @@ -0,0 +1,7 @@ +{ + "uuid": "laptop-suspend-inhibitor@carsongfromjpt", + "name": "Laptop Suspend Inhibitor", + "description": "Click to disable suspension when the laptop lid is closed. Click again to re-enable suspension. Useful for playing music with the lid closed.", + "icon": "icon.png" +} + diff --git a/laptop-suspend-inhibitor@carsongfromjpt/switch-mode.sh b/laptop-suspend-inhibitor@carsongfromjpt/switch-mode.sh new file mode 100755 index 00000000000..552e070f131 --- /dev/null +++ b/laptop-suspend-inhibitor@carsongfromjpt/switch-mode.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +if [[ "$(gsettings get org.cinnamon.settings-daemon.plugins.power lid-close-battery-action)" == "'suspend'" ]] +then + action="blank" +else + action="suspend" +fi +gsettings set org.cinnamon.settings-daemon.plugins.power lid-close-ac-action "$action" +gsettings set org.cinnamon.settings-daemon.plugins.power lid-close-battery-action "$action" +