From add7102e9c45443a1ddc4ffb6518cd189317effe Mon Sep 17 00:00:00 2001 From: Romano Giannetti Date: Sat, 30 Dec 2023 18:35:20 +0100 Subject: [PATCH] TouchpadOnOff extension: first commit --- .gitignore | 2 + README.md | 35 ++++ TouchpadOnOff@romano.rgtti.com/extension.js | 89 +++++++++ .../icons/touchpadoff.svg | 181 ++++++++++++++++++ .../icons/touchpadon.svg | 181 ++++++++++++++++++ TouchpadOnOff@romano.rgtti.com/metadata.json | 12 ++ TouchpadOnOff@romano.rgtti.com/prefs.js | 44 +++++ .../schemas/gschemas.compiled | Bin 0 -> 372 bytes ...shell.extensions.touchpadonoff.gschema.xml | 22 +++ screenshot.png | Bin 0 -> 29594 bytes 10 files changed, 566 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 TouchpadOnOff@romano.rgtti.com/extension.js create mode 100644 TouchpadOnOff@romano.rgtti.com/icons/touchpadoff.svg create mode 100644 TouchpadOnOff@romano.rgtti.com/icons/touchpadon.svg create mode 100644 TouchpadOnOff@romano.rgtti.com/metadata.json create mode 100644 TouchpadOnOff@romano.rgtti.com/prefs.js create mode 100644 TouchpadOnOff@romano.rgtti.com/schemas/gschemas.compiled create mode 100644 TouchpadOnOff@romano.rgtti.com/schemas/org.gnome.shell.extensions.touchpadonoff.gschema.xml create mode 100644 screenshot.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b72f9be --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*~ +*.swp diff --git a/README.md b/README.md new file mode 100644 index 0000000..bb47139 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# TouchPad On-Off + +By Romano Giannetti , + +### Rationale + +Most laptops have a key combination (usually some Fn-*thing*) to enable/disable the touchpad. +But not all of them. My Lenovo Yoga L13, for example, doesn't have one. +This extension just enables/disables the touchpad; +by default it restores the touchpad in the enabled state when you logout and login, +but you can choose to just remember the old state in the options. + +### Features + +Click on the icon to change from Touchpad On to Off. + +Each click toggle the status. + +### Options + +* You can choose to have a notification for each change of status or not. +(default yes) +* You can choose if the touchpad starts enabled after login (default yes) or if it remembers the last value. + +![screenshot](screenshot.png) + +### I'm stuck! + +If you are stuck without mouse or touchpad, open a terminal window +or the command prompt of gnome shell (with Alt-F2) and issue + + dconf write /org/gnome/desktop/peripherals/touchpad/send-events true + +...and you'll have your touchpad back. + diff --git a/TouchpadOnOff@romano.rgtti.com/extension.js b/TouchpadOnOff@romano.rgtti.com/extension.js new file mode 100644 index 0000000..9115e00 --- /dev/null +++ b/TouchpadOnOff@romano.rgtti.com/extension.js @@ -0,0 +1,89 @@ +// Touchpad On Off extension (c) 2024 Romano Giannetti +// License: GPLv2+, see http://www.gnu.org/licenses/gpl-2.0.txt +// +import Clutter from 'gi://Clutter'; +import St from 'gi://St'; +import Gio from 'gi://Gio'; +import * as Main from 'resource:///org/gnome/shell/ui/main.js'; + +import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js'; + +let button, icon_on, icon_off, wm_prefs, my_prefs; + +function _switch() { + let what=wm_prefs.get_string('send-events'); + let pNotify=my_prefs.get_boolean('show-notifications'); + if (what == 'enabled') { + if (pNotify) { + Main.notify("Touchpad On Off", "Switching touchpad off"); + } + // not needed, set by the callback + // button.set_child(icon_off); + wm_prefs.set_string('send-events', 'disabled'); + } else { + if (pNotify) { + Main.notify("Touchpad On Off", "Switchin touchpad on"); + } + // not needed, set by the callback + // button.set_child(icon_on); + wm_prefs.set_string('send-events', 'enabled'); + } +} + +function _sync() { + let what=wm_prefs.get_string('send-events'); + if (what == 'enabled') { + button.set_child(icon_on); + } else { + button.set_child(icon_off); + } +} + +export default class TouchpadOnOff extends Extension { + constructor(metadata) { + super(metadata); + this._metadata = metadata; + this._first_time = true; + } + enable() { + button = new St.Bin({ style_class: 'panel-button', + reactive: true, + can_focus: true, + track_hover: true }); + let dir; + dir = this._metadata.path; + icon_on = new St.Icon({ style_class: 'system-status-icon'}); + icon_on.gicon = Gio.icon_new_for_string(dir + '/icons/touchpadon.svg'); + icon_off = new St.Icon({ style_class: 'system-status-icon'}); + icon_off.gicon = Gio.icon_new_for_string(dir + '/icons/touchpadoff.svg'); + wm_prefs=new Gio.Settings({schema: 'org.gnome.desktop.peripherals.touchpad'}); + // get settings + my_prefs= this.getSettings(); + // let activate the touchpad on login. Useful if you get stuck + // without any pointing device! + if (this._first_time) { + let enable_on_login=my_prefs.get_boolean('enable-on-login'); + if (enable_on_login) { + wm_prefs.set_string('send-events', 'enabled'); + this._first_time = false; + } + } + this._connectionId = button.connect('button-press-event', _switch); + this._setconnectionId = wm_prefs.connect('changed::send-events', (s, k) => { _sync() }); + // start with the current status --- sync icon + _sync(); + Main.panel._rightBox.insert_child_at_index(button, 0); + } + disable() { + button.disconnect(this._connectionId); + wm_prefs.disconnect(this._setconnectionId); + Main.panel._rightBox.remove_child(button); + button?.destroy(); + button = null; + wm_prefs = null; + my_prefs = null; + icon_on = null; + icon_off = null; + } +} + diff --git a/TouchpadOnOff@romano.rgtti.com/icons/touchpadoff.svg b/TouchpadOnOff@romano.rgtti.com/icons/touchpadoff.svg new file mode 100644 index 0000000..937ec61 --- /dev/null +++ b/TouchpadOnOff@romano.rgtti.com/icons/touchpadoff.svg @@ -0,0 +1,181 @@ + + + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + + + + Gnome Symbolic Icon Theme + + + + + + + + + + + + + + +   + + + + + + diff --git a/TouchpadOnOff@romano.rgtti.com/icons/touchpadon.svg b/TouchpadOnOff@romano.rgtti.com/icons/touchpadon.svg new file mode 100644 index 0000000..68ca37e --- /dev/null +++ b/TouchpadOnOff@romano.rgtti.com/icons/touchpadon.svg @@ -0,0 +1,181 @@ + + + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + + + + Gnome Symbolic Icon Theme + + + + + + + + + + + + + + +   + + + + + + diff --git a/TouchpadOnOff@romano.rgtti.com/metadata.json b/TouchpadOnOff@romano.rgtti.com/metadata.json new file mode 100644 index 0000000..1c7591b --- /dev/null +++ b/TouchpadOnOff@romano.rgtti.com/metadata.json @@ -0,0 +1,12 @@ +{ + "description": "Toggle touchpad on or off", + "name": "Touchpad On Off", + "original-authors": "Romano Giannetti ", + "shell-version": [ + "45" + ], + "url": "https://github.com/Rmano/gse-touchpad-onoff", + "uuid": "TouchpadOnOff@romano.rgtti.com", + "settings-schema": "org.gnome.shell.extensions.touchpadonoff", + "version": 1 +} diff --git a/TouchpadOnOff@romano.rgtti.com/prefs.js b/TouchpadOnOff@romano.rgtti.com/prefs.js new file mode 100644 index 0000000..54a94d1 --- /dev/null +++ b/TouchpadOnOff@romano.rgtti.com/prefs.js @@ -0,0 +1,44 @@ +// TouchPad On Off (c) 2024 Romano Giannetti +// License: GPLv2+, see http://www.gnu.org/licenses/gpl-2.0.txt +// +import Gio from 'gi://Gio'; +import Adw from 'gi://Adw'; + +import {ExtensionPreferences} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; + +export default class SwitchFocusTypePreferences extends ExtensionPreferences { + fillPreferencesWindow(window) { + // Create a preferences page, with a single group + const page = new Adw.PreferencesPage({ + title: 'General', + icon_name: 'dialog-information-symbolic', + }); + window.add(page); + + const group = new Adw.PreferencesGroup({ + title: 'Behavior', + description: 'Configure the behavior of the extension', + }); + page.add(group); + + // Create a new preferences row + const rowNotification = new Adw.SwitchRow({ + title: 'Show Notifications', + subtitle: 'Whether to show a notification on change', + }); + group.add(rowNotification); + + const rowActivate = new Adw.SwitchRow({ + title: 'Enable the touchpad at login', + subtitle: 'Avoid getting stuck with no pointing device', + }); + group.add(rowActivate); + // + // Create a settings object and bind the row to the `show-indicator` key + window._settings = this.getSettings(); + window._settings.bind('show-notifications', rowNotification, 'active', + Gio.SettingsBindFlags.DEFAULT); + window._settings.bind('enable-on-login', rowActivate, 'active', + Gio.SettingsBindFlags.DEFAULT); + } +} diff --git a/TouchpadOnOff@romano.rgtti.com/schemas/gschemas.compiled b/TouchpadOnOff@romano.rgtti.com/schemas/gschemas.compiled new file mode 100644 index 0000000000000000000000000000000000000000..66a7743e48b1a1077d71d8373dffaec1cf5bcc2c GIT binary patch literal 372 zcmY*UJ4ysW5Uo)c1Q9`4*dvS!(|rnY0|O&5?Ol7O8)mD9?e-I>cn7_UiGerp6o%$z z`f6rGEO@-vUEgvnQQrBoIceE9u`&27lU*^yH)*T0QO}m)654_z! z?CCz$6a3G>$EwFWRO=lJ@EPzqZ3>;E`VjR2thai0%hp%IRVz(oDyUo@na<^){X`Z9 mY;VB!2JD{!`_F(SN<#~6gHw>3iY3Q7u3T2XL$aSg*8KoNvQmry literal 0 HcmV?d00001 diff --git a/TouchpadOnOff@romano.rgtti.com/schemas/org.gnome.shell.extensions.touchpadonoff.gschema.xml b/TouchpadOnOff@romano.rgtti.com/schemas/org.gnome.shell.extensions.touchpadonoff.gschema.xml new file mode 100644 index 0000000..5b8b40f --- /dev/null +++ b/TouchpadOnOff@romano.rgtti.com/schemas/org.gnome.shell.extensions.touchpadonoff.gschema.xml @@ -0,0 +1,22 @@ + + + + + true + Show a notification when toggling + Normally we show a notification each time + the user changes the touchpad status. It is a bit slow, + so maybe you prefer not to enable it. + + + + true + Enable the touchpad at login + If you set this to on, the touchpad will be enabled + at each login. Otherwise, the last status is remembered. + Switching this to false can be dangerous if your only + pointing device is the touchpad! + + + + diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ee74ae8ef8153ecc453be0ca60314629ab53126f GIT binary patch literal 29594 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 literal 0 HcmV?d00001