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) {
|
beginItemDrag: function(source) {
|
||||||
this.emit('item-drag-begin');
|
this.emit('item-drag-begin');
|
||||||
this._inDrag = true;
|
this._inItemDrag = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
cancelledItemDrag: function(source) {
|
cancelledItemDrag: function(source) {
|
||||||
@ -422,13 +422,15 @@ const Overview = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
endItemDrag: function(source) {
|
endItemDrag: function(source) {
|
||||||
|
if (!this._inItemDrag)
|
||||||
|
return;
|
||||||
this.emit('item-drag-end');
|
this.emit('item-drag-end');
|
||||||
this._inDrag = false;
|
this._inItemDrag = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
beginWindowDrag: function(window) {
|
beginWindowDrag: function(window) {
|
||||||
this.emit('window-drag-begin', window);
|
this.emit('window-drag-begin', window);
|
||||||
this._inDrag = true;
|
this._inWindowDrag = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
cancelledWindowDrag: function(window) {
|
cancelledWindowDrag: function(window) {
|
||||||
@ -436,8 +438,10 @@ const Overview = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
endWindowDrag: function(window) {
|
endWindowDrag: function(window) {
|
||||||
|
if (!this._inWindowDrag)
|
||||||
|
return;
|
||||||
this.emit('window-drag-end', window);
|
this.emit('window-drag-end', window);
|
||||||
this._inDrag = false;
|
this._inWindowDrag = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
focusSearch: function() {
|
focusSearch: function() {
|
||||||
@ -481,7 +485,7 @@ const Overview = new Lang.Class({
|
|||||||
shouldToggleByCornerOrButton: function() {
|
shouldToggleByCornerOrButton: function() {
|
||||||
if (this.animationInProgress)
|
if (this.animationInProgress)
|
||||||
return false;
|
return false;
|
||||||
if (this._inDrag)
|
if (this._inItemDrag || this._inWindowDrag)
|
||||||
return false;
|
return false;
|
||||||
if (this._activationTime == 0 || Date.now() / 1000 - this._activationTime > OVERVIEW_ACTIVATION_TIMEOUT)
|
if (this._activationTime == 0 || Date.now() / 1000 - this._activationTime > OVERVIEW_ACTIVATION_TIMEOUT)
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user