From cdc212ff6ed65cf3aee093c433dd19473c39ba36 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 16 Nov 2017 17:27:12 +0100 Subject: [PATCH] overview: Protect ::drag-end handlers These end up emitting item-drag-end/window-drag-end pretty much without checks. Given the MetaDnd object may end up emitting ::drag-leave as a result of the plugin ending its grab, this would result on spurious emission of those events and subsequent warnings. For extra paranoia, the _inDrag variable has been split into _inItemDrag/_inWindowDrag so we can't cross the streams. https://bugzilla.gnome.org/show_bug.cgi?id=784545 --- js/ui/overview.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/js/ui/overview.js b/js/ui/overview.js index 7eb2102db..816f32f5a 100644 --- a/js/ui/overview.js +++ b/js/ui/overview.js @@ -417,7 +417,7 @@ var Overview = new Lang.Class({ beginItemDrag: function(source) { this.emit('item-drag-begin'); - this._inDrag = true; + this._inItemDrag = true; }, cancelledItemDrag: function(source) { @@ -425,13 +425,15 @@ var Overview = new Lang.Class({ }, endItemDrag: function(source) { + if (!this._inItemDrag) + return; this.emit('item-drag-end'); - this._inDrag = false; + this._inItemDrag = false; }, beginWindowDrag: function(window) { this.emit('window-drag-begin', window); - this._inDrag = true; + this._inWindowDrag = true; }, cancelledWindowDrag: function(window) { @@ -439,8 +441,10 @@ var Overview = new Lang.Class({ }, endWindowDrag: function(window) { + if (!this._inWindowDrag) + return; this.emit('window-drag-end', window); - this._inDrag = false; + this._inWindowDrag = false; }, focusSearch: function() { @@ -484,7 +488,7 @@ var Overview = new Lang.Class({ shouldToggleByCornerOrButton: function() { if (this.animationInProgress) return false; - if (this._inDrag) + if (this._inItemDrag || this._inWindowDrag) return false; if (this._activationTime == 0 || Date.now() / 1000 - this._activationTime > OVERVIEW_ACTIVATION_TIMEOUT) return true;