From c0c2edf2e1162bb36ad93ab015a64b7dedbd7cec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Thu, 9 May 2019 14:30:21 -0500 Subject: [PATCH] keyboard: Unset current page when it gets destroyed The current page is going to be destroyed as part of _onKeyboardGroupsChanged cleanup, however we don't unset its pointer, and thus we'd might try to call a function using an invalidated pointer. So, unset the this._current_page reference when its get destroyed, connecting to destroy signal when setting it and disconnecting when changing page. Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1281 https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/540 --- js/ui/keyboard.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index fbba2840e..a67d08f1e 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -1522,10 +1522,15 @@ var Keyboard = class Keyboard { if (this._current_page != null) { this._setCurrentLevelLatched(this._current_page, false); + this._current_page.disconnect(this._current_page._destroyID); this._current_page.hide(); + delete this._current_page._destroyID; } this._current_page = layers[activeLevel]; + this._current_page._destroyID = this._current_page.connect('destroy', () => { + this._current_page = null; + }); this._updateCurrentPageVisible(); }