92 lines
3.7 KiB
Diff
92 lines
3.7 KiB
Diff
From 74b372212f649984b79337c7118495be29cd4871 Mon Sep 17 00:00:00 2001
|
|
From: Ray Strode <rstrode@redhat.com>
|
|
Date: Wed, 23 Jan 2019 15:59:42 -0500
|
|
Subject: [PATCH] shellActionModes: disable POPUP keybindings in lock screen
|
|
|
|
Certain keybindings should continue to work even when a popup
|
|
menu is on screen. For instance, the keybinding for showing
|
|
the app menu and the keyinding for showing the calendar are
|
|
examples.
|
|
|
|
This is achieved by putting in place a special "POPUP" action
|
|
mode, whenever a popup menu is active. This mode replaces
|
|
the (e.g., "NORMAL" or "OVERVIEW") action mode that was in place
|
|
for as long as the popup menu is active.
|
|
|
|
But those keybindings should not work when the user is at the
|
|
unlock dialog (which uses an action mode of "UNLOCK").
|
|
|
|
Unfortunately, right now they do.
|
|
|
|
This commit addresses the problem by using a compound action
|
|
mode when a popup menu is open at the unlock dialog (the bitwise
|
|
OR of POPUP and UNLOCK).
|
|
|
|
Closes https://gitlab.gnome.org/GNOME/gnome-shell/issues/851
|
|
|
|
patch proved:
|
|
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=921490
|
|
|
|
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
|
|
index a6a0374..ac441b1 100644
|
|
--- a/js/gdm/authPrompt.js
|
|
+++ b/js/gdm/authPrompt.js
|
|
@@ -11,6 +11,7 @@ const Animation = imports.ui.animation;
|
|
const Batch = imports.gdm.batch;
|
|
const GdmUtil = imports.gdm.util;
|
|
const Params = imports.misc.params;
|
|
+const Shell = imports.gi.Shell;
|
|
const ShellEntry = imports.ui.shellEntry;
|
|
const Tweener = imports.ui.tweener;
|
|
const UserWidget = imports.ui.userWidget;
|
|
@@ -99,7 +100,7 @@ var AuthPrompt = new Lang.Class({
|
|
x_align: St.Align.START });
|
|
this._entry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
|
can_focus: true });
|
|
- ShellEntry.addContextMenu(this._entry, { isPassword: true });
|
|
+ ShellEntry.addContextMenu(this._entry, { isPassword: true, actionMode: Shell.ActionMode.NONE });
|
|
|
|
this.actor.add(this._entry,
|
|
{ expand: true,
|
|
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
|
|
index 2f89140..1bf8d6f 100644
|
|
--- a/js/gdm/loginDialog.js
|
|
+++ b/js/gdm/loginDialog.js
|
|
@@ -342,7 +342,8 @@ var SessionMenuButton = new Lang.Class({
|
|
this._button.remove_style_pseudo_class('active');
|
|
});
|
|
|
|
- this._manager = new PopupMenu.PopupMenuManager({ actor: this._button });
|
|
+ this._manager = new PopupMenu.PopupMenuManager({ actor: this._button },
|
|
+ { actionMode: Shell.ActionMode.NONE });
|
|
this._manager.addMenu(this._menu);
|
|
|
|
this._button.connect('clicked', () => { this._menu.toggle(); });
|
|
diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js
|
|
index 9db5136..09bb9bb 100644
|
|
--- a/js/ui/shellEntry.js
|
|
+++ b/js/ui/shellEntry.js
|
|
@@ -9,6 +9,7 @@ const BoxPointer = imports.ui.boxpointer;
|
|
const Main = imports.ui.main;
|
|
const Params = imports.misc.params;
|
|
const PopupMenu = imports.ui.popupMenu;
|
|
+const Shell = imports.gi.Shell;
|
|
|
|
var EntryMenu = new Lang.Class({
|
|
Name: 'ShellEntryMenu',
|
|
@@ -150,11 +151,12 @@ function addContextMenu(entry, params) {
|
|
if (entry.menu)
|
|
return;
|
|
|
|
- params = Params.parse (params, { isPassword: false });
|
|
+ params = Params.parse (params, { isPassword: false, actionMode: Shell.ActionMode.POPUP });
|
|
|
|
entry.menu = new EntryMenu(entry);
|
|
entry.menu.isPassword = params.isPassword;
|
|
- entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry });
|
|
+ entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry },
|
|
+ { actionMode: params.actionMode });
|
|
entry._menuManager.addMenu(entry.menu);
|
|
|
|
// Add an event handler to both the entry and its clutter_text; the former
|