summaryrefslogtreecommitdiff
path: root/fix-inhibit-shortcut-permission.patch
blob: d20d91ba5b717c3a6c4bed58682fff6fbb4211a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
From 3a89e8597f6f3e7fa468bae93768f8253a3141e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 6 Oct 2022 14:30:20 +0200
Subject: [PATCH 1/2] inhibitShortcutsDialog: Don't override resource

PermissionStore's Set() method takes a complete permission
table, so when setting an app's permission, we are implicitly
removing all previously set entries for other apps.

Switch to the SetPermission() method which sets the permission
for a single app.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5937

Part-of:
<https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2504>
---
 ...g.freedesktop.impl.portal.PermissionStore.xml |  7 +++++++
 js/ui/inhibitShortcutsDialog.js                  | 16 ++++++----------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml b/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml
index 75fbc468a8..55d3fc30cb 100644
--- a/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml
+++ b/data/dbus-interfaces/org.freedesktop.impl.portal.PermissionStore.xml
@@ -13,6 +13,13 @@
       <arg name="app_permissions" type="a{sas}" direction="in"/>
       <arg name="data" type="v" direction="in"/>
     </method>
+    <method name="SetPermission">
+      <arg name='table' type='s' direction='in'/>
+      <arg name='create' type='b' direction='in'/>
+      <arg name='id' type='s' direction='in'/>
+      <arg name='app' type='s' direction='in'/>
+      <arg name='permissions' type='as' direction='in'/>
+    </method>
     <signal name="Changed">
       <arg name="table" type="s" direction="out"/>
       <arg name="id" type="s" direction="out"/>
diff --git a/js/ui/inhibitShortcutsDialog.js b/js/ui/inhibitShortcutsDialog.js
index c59544eaf9..8ef5861261 100644
--- a/js/ui/inhibitShortcutsDialog.js
+++ b/js/ui/inhibitShortcutsDialog.js
@@ -1,5 +1,5 @@
 /* exported InhibitShortcutsDialog */
-const { Clutter, Gio, GLib, GObject, Gtk, Meta, Pango, Shell, St } = imports.gi;
+const {Clutter, Gio, GObject, Gtk, Meta, Pango, Shell, St} = imports.gi;
 
 const Dialog = imports.ui.dialog;
 const ModalDialog = imports.ui.modalDialog;
@@ -57,15 +57,11 @@ var InhibitShortcutsDialog = GObject.registerClass({
         if (!this._shouldUsePermStore() || this._permStore == null)
             return;
 
-        let permissions = {};
-        permissions[this._app.get_id()] = [grant];
-        let data = GLib.Variant.new('av', {});
-
-        this._permStore.SetRemote(APP_PERMISSIONS_TABLE,
-                                  true,
-                                  APP_PERMISSIONS_ID,
-                                  permissions,
-                                  data,
+        this._permStore.SetPermissionRemote(APP_PERMISSIONS_TABLE,
+            true,
+            APP_PERMISSIONS_ID,
+            this._app.get_id(),
+            [grant],
             (result, error) => {
                 if (error != null)
                     log(error.message);
-- 
2.43.0


From 1391efb2356d1b1eac631df2f5fbd61a7a72bf52 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 18 Nov 2022 22:40:31 +0100
Subject: [PATCH 2/2] inhibitShorcutsDialog: Fix permission check

Each permission entry is an array of strings, so checking that against
the expected string itself will always fail.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6107

Part-of:
<https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2548>
---
 js/ui/inhibitShortcutsDialog.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/js/ui/inhibitShortcutsDialog.js b/js/ui/inhibitShortcutsDialog.js
index 8ef5861261..4cd2793c3d 100644
--- a/js/ui/inhibitShortcutsDialog.js
+++ b/js/ui/inhibitShortcutsDialog.js
@@ -145,7 +145,7 @@ var InhibitShortcutsDialog = GObject.registerClass({
                     let [permissions] = res;
                     if (permissions[appId] === undefined) // Not found
                         this._dialog.open();
-                    else if (permissions[appId] == GRANTED)
+                    else if (permissions[appId][0] === GRANTED)
                         this._emitResponse(DialogResponse.ALLOW);
                     else
                         this._emitResponse(DialogResponse.DENY);
-- 
2.43.0