diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index ac92d2fd9..c5fa78ee6 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -217,6 +217,12 @@ var BaseAppView = GObject.registerClass({ this._parentalControlsManager.disconnect(this._appFilterChangedId); this._appFilterChangedId = 0; } + + if (this._swipeTracker) { + this._swipeTracker.destroy(); + delete this._swipeTracker; + } + this._removeDelayedMove(); this._disconnectDnD(); } diff --git a/js/ui/swipeTracker.js b/js/ui/swipeTracker.js index a638d7801..fd13fd725 100644 --- a/js/ui/swipeTracker.js +++ b/js/ui/swipeTracker.js @@ -54,7 +54,8 @@ const TouchpadSwipeGesture = GObject.registerClass({ this._orientation = Clutter.Orientation.VERTICAL; this._enabled = true; - global.stage.connect('captured-event::touchpad', this._handleEvent.bind(this)); + this._stageCaptureEvent = + global.stage.connect('captured-event::touchpad', this._handleEvent.bind(this)); } get enabled() { @@ -125,6 +126,13 @@ const TouchpadSwipeGesture = GObject.registerClass({ return Clutter.EVENT_STOP; } + + destroy() { + if (this._stageCaptureEvent) { + global.stage.disconnect(this._stageCaptureEvent); + delete this._stageCaptureEvent; + } + } }); const TouchSwipeGesture = GObject.registerClass({ @@ -643,4 +651,16 @@ var SwipeTracker = GObject.registerClass({ this._velocity = 0; this._state = State.SCROLLING; } + + destroy() { + if (this._touchpadGesture) { + this._touchpadGesture.destroy(); + delete this._touchpadGesture; + } + + if (this._touchGesture) { + global.stage.remove_action(this._touchGesture); + delete this._touchGesture; + } + } });