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
This commit is contained in:
Marco Trevisan (Treviño) 2019-05-09 14:30:21 -05:00
parent de0c3251dd
commit c0c2edf2e1

View File

@ -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();
}