appDisplay: Close popup when dragging
When a drag starts inside a folder, and the cursor moves to outside it, close the currently opened folder popup. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/603
This commit is contained in:
parent
717ec0f8a4
commit
87a76a5757
@ -431,6 +431,7 @@ var AllView = class AllView extends BaseAppView {
|
|||||||
Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
|
Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
|
||||||
|
|
||||||
this._nEventBlockerInhibits = 0;
|
this._nEventBlockerInhibits = 0;
|
||||||
|
this._popdownId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
_refilterApps() {
|
_refilterApps() {
|
||||||
@ -864,6 +865,25 @@ var AllView = class AllView extends BaseAppView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_schedulePopdown() {
|
||||||
|
if (this._popdownId > 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this._popdownId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 1000, () => {
|
||||||
|
if (this._currentPopup)
|
||||||
|
this._currentPopup.popdown();
|
||||||
|
this._popdownId = 0;
|
||||||
|
return GLib.SOURCE_REMOVE;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_unschedulePopdown() {
|
||||||
|
if (this._popdownId > 0) {
|
||||||
|
GLib.source_remove(this._popdownId);
|
||||||
|
this._popdownId = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_onDragBegin() {
|
_onDragBegin() {
|
||||||
this._dragMonitor = {
|
this._dragMonitor = {
|
||||||
dragMotion: this._onDragMotion.bind(this)
|
dragMotion: this._onDragMotion.bind(this)
|
||||||
@ -874,11 +894,22 @@ var AllView = class AllView extends BaseAppView {
|
|||||||
_onDragMotion(dragEvent) {
|
_onDragMotion(dragEvent) {
|
||||||
let appIcon = dragEvent.source;
|
let appIcon = dragEvent.source;
|
||||||
|
|
||||||
// Handle the drag overshoot. When dragging to above the
|
// When dragging from a folder, don't nudge items; instead,
|
||||||
// icon grid, move to the page above; when dragging below,
|
// prevent DND entirely by returning NO_DROP
|
||||||
// move to the page below.
|
if (this._currentPopup) {
|
||||||
if (appIcon.view == this)
|
if (dragEvent.targetActor == this._grid ||
|
||||||
|
this._grid.contains(dragEvent.targetActor)) {
|
||||||
|
this._schedulePopdown();
|
||||||
|
return DND.DragMotionResult.NO_DROP;
|
||||||
|
} else {
|
||||||
|
this._unschedulePopdown();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Handle the drag overshoot. When dragging to above the
|
||||||
|
// icon grid, move to the page above; when dragging below,
|
||||||
|
// move to the page below.
|
||||||
this._handleDragOvershoot(dragEvent);
|
this._handleDragOvershoot(dragEvent);
|
||||||
|
}
|
||||||
|
|
||||||
if (dragEvent.targetActor != this._grid)
|
if (dragEvent.targetActor != this._grid)
|
||||||
this.removeNudges();
|
this.removeNudges();
|
||||||
|
Loading…
Reference in New Issue
Block a user