[gnome-shell/gnome-3-26] overview: Protect ::drag-end handlers
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gnome-3-26] overview: Protect ::drag-end handlers
- Date: Fri, 17 Nov 2017 15:06:19 +0000 (UTC)
commit af79d975b06212c371432f862fe0bf3ffde1f2dd
Author: Carlos Garnacho <carlosg gnome org>
Date: Thu Nov 16 17:27:12 2017 +0100
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 files changed, 9 insertions(+), 5 deletions(-)
---
diff --git a/js/ui/overview.js b/js/ui/overview.js
index 7eb2102..816f32f 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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]