summaryrefslogtreecommitdiff
path: root/0001-Add-gesture-inhibitor-extension.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-Add-gesture-inhibitor-extension.patch')
-rw-r--r--0001-Add-gesture-inhibitor-extension.patch438
1 files changed, 438 insertions, 0 deletions
diff --git a/0001-Add-gesture-inhibitor-extension.patch b/0001-Add-gesture-inhibitor-extension.patch
new file mode 100644
index 0000000..cb0b56c
--- /dev/null
+++ b/0001-Add-gesture-inhibitor-extension.patch
@@ -0,0 +1,438 @@
+From cca3ca69a5b5a5551a9130ab4b9ea6909666108a Mon Sep 17 00:00:00 2001
+From: rpm-build <rpm-build>
+Date: Thu, 28 Jan 2021 00:06:12 +0100
+Subject: [PATCH 1/5] Add gesture-inhibitor extension
+
+This extension may disable default GNOME Shell gestures.
+---
+ extensions/gesture-inhibitor/extension.js | 75 +++++++++++++++++++
+ extensions/gesture-inhibitor/meson.build | 8 ++
+ extensions/gesture-inhibitor/metadata.json.in | 12 +++
+ ...l.extensions.gesture-inhibitor.gschema.xml | 25 +++++++
+ extensions/gesture-inhibitor/stylesheet.css | 1 +
+ meson.build | 1 +
+ 6 files changed, 122 insertions(+)
+ create mode 100644 extensions/gesture-inhibitor/extension.js
+ create mode 100644 extensions/gesture-inhibitor/meson.build
+ create mode 100644 extensions/gesture-inhibitor/metadata.json.in
+ create mode 100644 extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
+ create mode 100644 extensions/gesture-inhibitor/stylesheet.css
+
+diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
+new file mode 100644
+index 00000000..e74ede2f
+--- /dev/null
++++ b/extensions/gesture-inhibitor/extension.js
+@@ -0,0 +1,75 @@
++/* extension.js
++ *
++ * This program is free software: you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation, either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program. If not, see <http://www.gnu.org/licenses/>.
++ *
++ * SPDX-License-Identifier: GPL-2.0-or-later
++ */
++
++/* exported init */
++
++const Clutter = imports.gi.Clutter;
++const ExtensionUtils = imports.misc.extensionUtils;
++const Me = ExtensionUtils.getCurrentExtension();
++const ViewSelector = imports.ui.viewSelector;
++const EdgeDragAction = imports.ui.edgeDragAction;
++const WindowManager = imports.ui.windowManager;
++const St = imports.gi.St;
++const Gio = imports.gi.Gio;
++
++class Extension {
++ constructor() {
++ this._settings = ExtensionUtils.getSettings();
++ let actions = global.stage.get_actions();
++
++ actions.forEach(a => {
++ if (a instanceof ViewSelector.ShowOverviewAction)
++ this._showOverview = a;
++ else if (a instanceof WindowManager.AppSwitchAction)
++ this._appSwitch = a;
++ else if (a instanceof EdgeDragAction.EdgeDragAction &&
++ a._side == St.Side.BOTTOM)
++ this._showOsk = a;
++ else if (a instanceof EdgeDragAction.EdgeDragAction &&
++ a._side == St.Side.TOP)
++ this._unfullscreen = a;
++ else if (a instanceof EdgeDragAction.EdgeDragAction)
++ this._showAppGrid = a;
++ });
++
++ this._map = [
++ { setting: 'overview', action: this._showOverview },
++ { setting: 'app-switch', action: this._appSwitch },
++ { setting: 'show-osk', action: this._showOsk },
++ { setting: 'unfullscreen', action: this._unfullscreen },
++ { setting: 'show-app-grid', action: this._showAppGrid }
++ ];
++ }
++
++ enable() {
++ this._map.forEach(m => {
++ this._settings.bind(m.setting, m.action, 'enabled',
++ Gio.SettingsBindFlags.DEFAULT);
++ });
++ }
++
++ disable() {
++ this._map.forEach(m => {
++ m.action.enabled = true;
++ });
++ }
++}
++
++function init() {
++ return new Extension();
++}
+diff --git a/extensions/gesture-inhibitor/meson.build b/extensions/gesture-inhibitor/meson.build
+new file mode 100644
+index 00000000..fdad5cc8
+--- /dev/null
++++ b/extensions/gesture-inhibitor/meson.build
+@@ -0,0 +1,8 @@
++extension_data += configure_file(
++ input: metadata_name + '.in',
++ output: metadata_name,
++ configuration: metadata_conf
++)
++
++# extension_sources += files('prefs.js')
++extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
+diff --git a/extensions/gesture-inhibitor/metadata.json.in b/extensions/gesture-inhibitor/metadata.json.in
+new file mode 100644
+index 00000000..37d6a117
+--- /dev/null
++++ b/extensions/gesture-inhibitor/metadata.json.in
+@@ -0,0 +1,12 @@
++{
++ "uuid": "@uuid@",
++ "extension-id": "@extension_id@",
++ "settings-schema": "@gschemaname@",
++ "gettext-domain": "@gettext_domain@",
++ "name": "Gesture Inhibitor",
++ "description": "Makes touchscreen gestures optional.",
++ "shell-version": [ "@shell_current@" ],
++ "original-authors": [ "cgarnach@redhat.com" ],
++ "url": "@url@"
++}
++
+diff --git a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
+new file mode 100644
+index 00000000..1d67dcc0
+--- /dev/null
++++ b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
+@@ -0,0 +1,25 @@
++<schemalist>
++ <schema id="org.gnome.shell.extensions.gesture-inhibitor" path="/org/gnome/shell/extensions/gesture-inhibitor/">
++ <key name="show-app-grid" type="b">
++ <default>true</default>
++ <summary>Show app grid gesture</summary>
++ </key>
++ <key name="show-osk" type="b">
++ <default>true</default>
++ <summary>Show OSK gesture</summary>
++ </key>
++ <key name="overview" type="b">
++ <default>true</default>
++ <summary>Show Overview gesture</summary>
++ </key>
++ <key name="app-switch" type="b">
++ <default>true</default>
++ <summary>Application switch gesture</summary>
++ </key>
++ <key name="unfullscreen" type="b">
++ <default>true</default>
++ <summary>Unfullscreen gesture</summary>
++ </key>
++ </schema>
++</schemalist>
++
+diff --git a/extensions/gesture-inhibitor/stylesheet.css b/extensions/gesture-inhibitor/stylesheet.css
+new file mode 100644
+index 00000000..37b93f21
+--- /dev/null
++++ b/extensions/gesture-inhibitor/stylesheet.css
+@@ -0,0 +1 @@
++/* Add your custom extension styling here */
+diff --git a/meson.build b/meson.build
+index ec600041..615dc5b0 100644
+--- a/meson.build
++++ b/meson.build
+@@ -50,6 +50,7 @@ all_extensions += [
+ 'custom-menu',
+ 'dash-to-dock',
+ 'dash-to-panel',
++ 'gesture-inhibitor',
+ 'native-window-placement',
+ 'panel-favorites',
+ 'systemMonitor',
+--
+2.41.0
+
+
+From 45e88e7b5bb9537c44384a23af7d00f023d55793 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Wed, 20 Oct 2021 19:48:46 +0200
+Subject: [PATCH 2/5] gesture-inhibitor: Fix up indentation
+
+---
+ extensions/gesture-inhibitor/extension.js | 59 +++++++++++------------
+ 1 file changed, 29 insertions(+), 30 deletions(-)
+
+diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
+index e74ede2f..734d61cc 100644
+--- a/extensions/gesture-inhibitor/extension.js
++++ b/extensions/gesture-inhibitor/extension.js
+@@ -29,44 +29,43 @@ const Gio = imports.gi.Gio;
+
+ class Extension {
+ constructor() {
+- this._settings = ExtensionUtils.getSettings();
+- let actions = global.stage.get_actions();
++ this._settings = ExtensionUtils.getSettings();
++ let actions = global.stage.get_actions();
+
+- actions.forEach(a => {
+- if (a instanceof ViewSelector.ShowOverviewAction)
+- this._showOverview = a;
+- else if (a instanceof WindowManager.AppSwitchAction)
+- this._appSwitch = a;
+- else if (a instanceof EdgeDragAction.EdgeDragAction &&
+- a._side == St.Side.BOTTOM)
+- this._showOsk = a;
+- else if (a instanceof EdgeDragAction.EdgeDragAction &&
+- a._side == St.Side.TOP)
+- this._unfullscreen = a;
+- else if (a instanceof EdgeDragAction.EdgeDragAction)
+- this._showAppGrid = a;
+- });
++ actions.forEach(a => {
++ if (a instanceof ViewSelector.ShowOverviewAction)
++ this._showOverview = a;
++ else if (a instanceof WindowManager.AppSwitchAction)
++ this._appSwitch = a;
++ else if (a instanceof EdgeDragAction.EdgeDragAction &&
++ a._side == St.Side.BOTTOM)
++ this._showOsk = a;
++ else if (a instanceof EdgeDragAction.EdgeDragAction &&
++ a._side == St.Side.TOP)
++ this._unfullscreen = a;
++ else if (a instanceof EdgeDragAction.EdgeDragAction)
++ this._showAppGrid = a;
++ });
+
+- this._map = [
+- { setting: 'overview', action: this._showOverview },
+- { setting: 'app-switch', action: this._appSwitch },
+- { setting: 'show-osk', action: this._showOsk },
+- { setting: 'unfullscreen', action: this._unfullscreen },
+- { setting: 'show-app-grid', action: this._showAppGrid }
+- ];
++ this._map = [
++ { setting: 'overview', action: this._showOverview },
++ { setting: 'app-switch', action: this._appSwitch },
++ { setting: 'show-osk', action: this._showOsk },
++ { setting: 'unfullscreen', action: this._unfullscreen },
++ { setting: 'show-app-grid', action: this._showAppGrid }
++ ];
+ }
+
+ enable() {
+- this._map.forEach(m => {
+- this._settings.bind(m.setting, m.action, 'enabled',
+- Gio.SettingsBindFlags.DEFAULT);
+- });
++ this._map.forEach(m => {
++ this._settings.bind(m.setting, m.action, 'enabled',
++ Gio.SettingsBindFlags.DEFAULT);
++ });
+ }
+
+ disable() {
+- this._map.forEach(m => {
+- m.action.enabled = true;
+- });
++ this._map.forEach(
++ m => (m.action.enabled = true));
+ }
+ }
+
+--
+2.41.0
+
+
+From fe0dd05f0c8c5cfeb5edbc6b9bb73417d42f6ee8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Wed, 20 Oct 2021 19:47:05 +0200
+Subject: [PATCH 3/5] gesture-inhibitor: Adjust for GNOME 40 changes
+
+---
+ extensions/gesture-inhibitor/extension.js | 11 +++--------
+ ...ome.shell.extensions.gesture-inhibitor.gschema.xml | 4 ----
+ 2 files changed, 3 insertions(+), 12 deletions(-)
+
+diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
+index 734d61cc..13586108 100644
+--- a/extensions/gesture-inhibitor/extension.js
++++ b/extensions/gesture-inhibitor/extension.js
+@@ -21,8 +21,8 @@
+ const Clutter = imports.gi.Clutter;
+ const ExtensionUtils = imports.misc.extensionUtils;
+ const Me = ExtensionUtils.getCurrentExtension();
+-const ViewSelector = imports.ui.viewSelector;
+ const EdgeDragAction = imports.ui.edgeDragAction;
++const Main = imports.ui.main;
+ const WindowManager = imports.ui.windowManager;
+ const St = imports.gi.St;
+ const Gio = imports.gi.Gio;
+@@ -33,9 +33,7 @@ class Extension {
+ let actions = global.stage.get_actions();
+
+ actions.forEach(a => {
+- if (a instanceof ViewSelector.ShowOverviewAction)
+- this._showOverview = a;
+- else if (a instanceof WindowManager.AppSwitchAction)
++ if (a instanceof WindowManager.AppSwitchAction)
+ this._appSwitch = a;
+ else if (a instanceof EdgeDragAction.EdgeDragAction &&
+ a._side == St.Side.BOTTOM)
+@@ -43,16 +41,13 @@ class Extension {
+ else if (a instanceof EdgeDragAction.EdgeDragAction &&
+ a._side == St.Side.TOP)
+ this._unfullscreen = a;
+- else if (a instanceof EdgeDragAction.EdgeDragAction)
+- this._showAppGrid = a;
+ });
+
+ this._map = [
+- { setting: 'overview', action: this._showOverview },
++ { setting: 'overview', action: Main.overview._swipeTracker },
+ { setting: 'app-switch', action: this._appSwitch },
+ { setting: 'show-osk', action: this._showOsk },
+ { setting: 'unfullscreen', action: this._unfullscreen },
+- { setting: 'show-app-grid', action: this._showAppGrid }
+ ];
+ }
+
+diff --git a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
+index 1d67dcc0..4bdf9260 100644
+--- a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
++++ b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
+@@ -1,9 +1,5 @@
+ <schemalist>
+ <schema id="org.gnome.shell.extensions.gesture-inhibitor" path="/org/gnome/shell/extensions/gesture-inhibitor/">
+- <key name="show-app-grid" type="b">
+- <default>true</default>
+- <summary>Show app grid gesture</summary>
+- </key>
+ <key name="show-osk" type="b">
+ <default>true</default>
+ <summary>Show OSK gesture</summary>
+--
+2.41.0
+
+
+From 952fa19311faecf50b02ab0f8807c2bc890848be Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Thu, 18 Nov 2021 15:54:23 +0100
+Subject: [PATCH 4/5] gesture-inhibitor: Unbind setting on disable
+
+---
+ extensions/gesture-inhibitor/extension.js | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
+index 13586108..02b34ec4 100644
+--- a/extensions/gesture-inhibitor/extension.js
++++ b/extensions/gesture-inhibitor/extension.js
+@@ -59,8 +59,10 @@ class Extension {
+ }
+
+ disable() {
+- this._map.forEach(
+- m => (m.action.enabled = true));
++ this._map.forEach(m => {
++ Gio.Settings.unbind(m.action, 'enabled');
++ m.action.enabled = true;
++ });
+ }
+ }
+
+--
+2.41.0
+
+
+From ef7a6cb1eac7b3d6d4d047174502d88f4e78959e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
+Date: Thu, 18 Nov 2021 16:06:09 +0100
+Subject: [PATCH 5/5] gesture-inhibitor: Override :enabled property
+
+Otherwise gnome-shell can re-enable an inhibited gesture behind our
+back.
+---
+ extensions/gesture-inhibitor/extension.js | 23 ++++++++++++++++++++++-
+ 1 file changed, 22 insertions(+), 1 deletion(-)
+
+diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
+index 02b34ec4..fb8a6dc0 100644
+--- a/extensions/gesture-inhibitor/extension.js
++++ b/extensions/gesture-inhibitor/extension.js
+@@ -49,18 +49,39 @@ class Extension {
+ { setting: 'show-osk', action: this._showOsk },
+ { setting: 'unfullscreen', action: this._unfullscreen },
+ ];
++
++ this._enabledDesc = Object.getOwnPropertyDescriptor(
++ Clutter.ActorMeta.prototype, 'enabled');
++ }
++
++ _overrideEnabledSetter(obj, set) {
++ if (!(obj instanceof Clutter.ActorMeta))
++ return;
++
++ const desc = set
++ ? { ...this._enabledDesc, set }
++ : { ...this._enabledDesc };
++ Object.defineProperty(obj, 'enabled', desc);
+ }
+
+ enable() {
++ const settings = this._settings;
++
+ this._map.forEach(m => {
+- this._settings.bind(m.setting, m.action, 'enabled',
++ settings.bind(m.setting, m.action, 'enabled',
+ Gio.SettingsBindFlags.DEFAULT);
++
++ this._overrideEnabledSetter(m.action, function (value) {
++ if (settings.get_boolean(m.setting))
++ this.set_enabled(value);
++ });
+ });
+ }
+
+ disable() {
+ this._map.forEach(m => {
+ Gio.Settings.unbind(m.action, 'enabled');
++ this._overrideEnabledSetter(m.action);
+ m.action.enabled = true;
+ });
+ }
+--
+2.41.0
+