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._delayedMoveId = 0;
|
||||||
this._targetDropPosition = null;
|
this._targetDropPosition = null;
|
||||||
|
|
||||||
this._dragBeginId =
|
this._dragBeginId = 0;
|
||||||
Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this));
|
this._dragEndId = 0;
|
||||||
this._dragEndId =
|
this._dragCancelledId = 0;
|
||||||
Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
|
|
||||||
this._dragCancelledId =
|
|
||||||
Main.overview.connect('item-drag-cancelled', this._onDragCancelled.bind(this));
|
|
||||||
|
|
||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
_onDestroy() {
|
_onDestroy() {
|
||||||
this._removeDelayedMove();
|
this._removeDelayedMove();
|
||||||
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_createGrid() {
|
_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) {
|
_maybeMoveItem(dragEvent) {
|
||||||
const [success, x, y] =
|
const [success, x, y] =
|
||||||
this._grid.transform_stage_point(dragEvent.x, dragEvent.y);
|
this._grid.transform_stage_point(dragEvent.x, dragEvent.y);
|
||||||
@ -726,12 +734,14 @@ var BaseAppView = GObject.registerClass({
|
|||||||
|
|
||||||
vfunc_map() {
|
vfunc_map() {
|
||||||
this._swipeTracker.enabled = true;
|
this._swipeTracker.enabled = true;
|
||||||
|
this._connectDnD();
|
||||||
super.vfunc_map();
|
super.vfunc_map();
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_unmap() {
|
vfunc_unmap() {
|
||||||
this._swipeTracker.enabled = false;
|
this._swipeTracker.enabled = false;
|
||||||
this._clearAnimateLater();
|
this._clearAnimateLater();
|
||||||
|
this._disconnectDnD();
|
||||||
super.vfunc_unmap();
|
super.vfunc_unmap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user