From e53443daf903fe3434b0471582e40f0fbd369a25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Fri, 12 Jul 2019 13:53:33 +0200 Subject: [PATCH] workspace: Remove Long-press later with the actor Ensure that the long-press later is removed with the actor, otherwise it will try to use invalidated data. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/700 --- js/ui/workspace.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/js/ui/workspace.js b/js/ui/workspace.js index 95369997a..f0951a63d 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -354,6 +354,11 @@ var WindowClone = GObject.registerClass({ this.metaWindow._delegate = null; this._delegate = null; + if (this._longPressLater) { + Meta.later_remove(this._longPressLater); + delete this._longPressLater; + } + if (this.inDrag) { this.emit('drag-end'); this.inDrag = false; @@ -388,9 +393,13 @@ var WindowClone = GObject.registerClass({ let event = Clutter.get_current_event(); this._dragTouchSequence = event.get_event_sequence(); + if (this._longPressLater) + return true; + // A click cancels a long-press before any click handler is // run - make sure to not start a drag in that case - Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { + this._longPressLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { + delete this._longPressLater; if (this._selected) return; let [x, y] = action.get_coords();