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
c1a6effea0
commit
f0a7395b30
@ -10,6 +10,7 @@ const Animation = imports.ui.animation;
|
|||||||
const Batch = imports.gdm.batch;
|
const Batch = imports.gdm.batch;
|
||||||
const GdmUtil = imports.gdm.util;
|
const GdmUtil = imports.gdm.util;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
const ShellEntry = imports.ui.shellEntry;
|
const ShellEntry = imports.ui.shellEntry;
|
||||||
const Tweener = imports.ui.tweener;
|
const Tweener = imports.ui.tweener;
|
||||||
const UserWidget = imports.ui.userWidget;
|
const UserWidget = imports.ui.userWidget;
|
||||||
@ -96,7 +97,7 @@ var AuthPrompt = class {
|
|||||||
x_align: St.Align.START });
|
x_align: St.Align.START });
|
||||||
this._entry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
this._entry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
|
||||||
can_focus: true });
|
can_focus: true });
|
||||||
ShellEntry.addContextMenu(this._entry, { isPassword: true });
|
ShellEntry.addContextMenu(this._entry, { isPassword: true, actionMode: Shell.ActionMode.NONE });
|
||||||
|
|
||||||
this.actor.add(this._entry,
|
this.actor.add(this._entry,
|
||||||
{ expand: true,
|
{ expand: true,
|
||||||
|
@ -334,7 +334,8 @@ var SessionMenuButton = class {
|
|||||||
this._button.remove_style_pseudo_class('active');
|
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._manager.addMenu(this._menu);
|
||||||
|
|
||||||
this._button.connect('clicked', () => { this._menu.toggle(); });
|
this._button.connect('clicked', () => { this._menu.toggle(); });
|
||||||
|
@ -7,6 +7,7 @@ const BoxPointer = imports.ui.boxpointer;
|
|||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Params = imports.misc.params;
|
const Params = imports.misc.params;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const Shell = imports.gi.Shell;
|
||||||
|
|
||||||
var EntryMenu = class extends PopupMenu.PopupMenu {
|
var EntryMenu = class extends PopupMenu.PopupMenu {
|
||||||
constructor(entry) {
|
constructor(entry) {
|
||||||
@ -145,11 +146,12 @@ function addContextMenu(entry, params) {
|
|||||||
if (entry.menu)
|
if (entry.menu)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
params = Params.parse (params, { isPassword: false });
|
params = Params.parse (params, { isPassword: false, actionMode: Shell.ActionMode.POPUP });
|
||||||
|
|
||||||
entry.menu = new EntryMenu(entry);
|
entry.menu = new EntryMenu(entry);
|
||||||
entry.menu.isPassword = params.isPassword;
|
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);
|
entry._menuManager.addMenu(entry.menu);
|
||||||
|
|
||||||
// Add an event handler to both the entry and its clutter_text; the former
|
// Add an event handler to both the entry and its clutter_text; the former
|
||||||
|
Loading…
Reference in New Issue
Block a user