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
This commit is contained in:
parent
8dace05c26
commit
6bd0872530
@ -414,7 +414,7 @@ const Overview = new Lang.Class({
|
||||
|
||||
beginItemDrag: function(source) {
|
||||
this.emit('item-drag-begin');
|
||||
this._inDrag = true;
|
||||
this._inItemDrag = true;
|
||||
},
|
||||
|
||||
cancelledItemDrag: function(source) {
|
||||
@ -422,13 +422,15 @@ const 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) {
|
||||
@ -436,8 +438,10 @@ const 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() {
|
||||
@ -481,7 +485,7 @@ const 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;
|
||||
|
Loading…
Reference in New Issue
Block a user