shellActionModes: disable POPUP keybindings in unlock 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, since commit c79d24b6 they do. This commit addresses the problem by forcing the action mode to NONE at the unlock screen when popups are visible. CVE-2019-3820 Closes https://gitlab.gnome.org/GNOME/gnome-shell/issues/851
This commit is contained in:
parent
511e8c6584
commit
e23f4d6c7c
@ -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,
|
||||
|
@ -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(); });
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user