[gnome-shell] appDisplay: Properly destroy SwipeTracker on destroy
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] appDisplay: Properly destroy SwipeTracker on destroy
- Date: Wed, 2 Dec 2020 22:47:01 +0000 (UTC)
commit 853644d7fee0510a21289056a092a052be4527a2
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Thu Nov 26 15:10:11 2020 -0300
appDisplay: Properly destroy SwipeTracker on destroy
SwipeTracker connects to signals of the stage, but doesn't disconnect on
destroy, leaving them hanging and potentially running callbacks for
destroyed objects.
This is visible when removing a folder by dragging all icons out, and
running the swipe gestures, which will produce a bunch of warnings.
Explicitly destroy, remove, and disconnect the swipe tracker.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1518>
js/ui/appDisplay.js | 6 ++++++
js/ui/swipeTracker.js | 22 +++++++++++++++++++++-
2 files changed, 27 insertions(+), 1 deletion(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index ac92d2fd9d..c5fa78ee61 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 a638d78019..fd13fd7252 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;
+ }
+ }
});
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]