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:
parent
704e08dc08
commit
16a18f2ae7
@ -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();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user