appDisplay: Move click action to dialog

Now that the folder dialog covers the whole primary
monitor, it eats all input events, and doesn't allow
the event blocker to detect clicks.

Move the click action to the folder dialog itself, and
popdown the dialog if a click is triggered on the dialog
(but not on any children).

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1301
This commit is contained in:
Georges Basile Stavracas Neto 2020-06-04 01:49:14 -03:00
parent c790c01a3b
commit 5cfe5bf8c8

View File

@ -387,18 +387,6 @@ class AppDisplay extends BaseAppView {
this._swipeTracker.connect('update', this._swipeUpdate.bind(this)); this._swipeTracker.connect('update', this._swipeUpdate.bind(this));
this._swipeTracker.connect('end', this._swipeEnd.bind(this)); this._swipeTracker.connect('end', this._swipeEnd.bind(this));
this._clickAction = new Clutter.ClickAction();
this._clickAction.connect('clicked', () => {
if (!this._currentDialog)
return;
let [x, y] = this._clickAction.get_coords();
let actor = global.stage.get_actor_at_pos(Clutter.PickMode.ALL, x, y);
if (!this._currentDialog.contains(actor))
this._currentDialog.popdown();
});
this._eventBlocker.add_action(this._clickAction);
this._currentDialog = null; this._currentDialog = null;
this._displayingDialog = false; this._displayingDialog = false;
this._currentDialogDestroyId = 0; this._currentDialogDestroyId = 0;
@ -1449,6 +1437,17 @@ var AppFolderDialog = GObject.registerClass({
work_area: true, work_area: true,
})); }));
const clickAction = new Clutter.ClickAction();
clickAction.connect('clicked', () => {
const [x, y] = clickAction.get_coords();
const actor =
global.stage.get_actor_at_pos(Clutter.PickMode.ALL, x, y);
if (actor === this)
this.popdown();
});
this.add_action(clickAction);
this._source = source; this._source = source;
this._folder = folder; this._folder = folder;
this._view = source.view; this._view = source.view;