appDisplay: Only handle DnD when mapped

Now that the DnD code is shared between AppDisplay and
FolderView, we hit an unexpected problem: FolderView is
handling drag events even when the folder dialog is hidden.
As a side effect, this spams the journal with warnings.

Only handle drag events when mapped. On unmap, disable
the view's drag monitor, and disconnect from all drag
events.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1284
This commit is contained in:
Georges Basile Stavracas Neto 2020-06-24 14:56:32 -03:00 committed by Florian Müllner
parent 704e08dc08
commit 16a18f2ae7

View File

@ -197,39 +197,16 @@ var BaseAppView = GObject.registerClass({
this._delayedMoveId = 0;
this._targetDropPosition = null;
this._dragBeginId =
Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this));
this._dragEndId =
Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
this._dragCancelledId =
Main.overview.connect('item-drag-cancelled', this._onDragCancelled.bind(this));
this._dragBeginId = 0;
this._dragEndId = 0;
this._dragCancelledId = 0;
this.connect('destroy', this._onDestroy.bind(this));
}
_onDestroy() {
this._removeDelayedMove();
if (this._dragBeginId > 0) {
Main.overview.disconnect(this._dragBeginId);
this._dragBeginId = 0;
}
if (this._dragEndId > 0) {
Main.overview.disconnect(this._dragEndId);
this._dragEndId = 0;
}
if (this._dragCancelledId > 0) {
Main.overview.disconnect(this._dragCancelledId);
this._dragCancelledId = 0;
}
if (this._dragMonitor) {
DND.removeDragMonitor(this._dragMonitor);
this._dragMonitor = null;
}
this._disconnectDnD();
}
_createGrid() {
@ -316,6 +293,37 @@ var BaseAppView = GObject.registerClass({
});
}
_connectDnD() {
this._dragBeginId =
Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this));
this._dragEndId =
Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
this._dragCancelledId =
Main.overview.connect('item-drag-cancelled', this._onDragCancelled.bind(this));
}
_disconnectDnD() {
if (this._dragBeginId > 0) {
Main.overview.disconnect(this._dragBeginId);
this._dragBeginId = 0;
}
if (this._dragEndId > 0) {
Main.overview.disconnect(this._dragEndId);
this._dragEndId = 0;
}
if (this._dragCancelledId > 0) {
Main.overview.disconnect(this._dragCancelledId);
this._dragCancelledId = 0;
}
if (this._dragMonitor) {
DND.removeDragMonitor(this._dragMonitor);
this._dragMonitor = null;
}
}
_maybeMoveItem(dragEvent) {
const [success, x, y] =
this._grid.transform_stage_point(dragEvent.x, dragEvent.y);
@ -726,12 +734,14 @@ var BaseAppView = GObject.registerClass({
vfunc_map() {
this._swipeTracker.enabled = true;
this._connectDnD();
super.vfunc_map();
}
vfunc_unmap() {
this._swipeTracker.enabled = false;
this._clearAnimateLater();
this._disconnectDnD();
super.vfunc_unmap();
}