keyboard: Destroy old layout actors when regenerating keyboard groups
We were cleaning up self._groups, but the actors for all previous groups/layers/modes would remain attached to the aspect container, simply hidden. Under some circumstances this can really make the amount of actors in the shell stage to quickly ramp up, it's not just a "leak" but also has potential side effects on performance. We should destroy all child actors of this._aspectContainer, except the static ones (emoji and keypad). While at it, fix this._groups re-initialization, as it's actually an object, not an array. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/523 Closes?: https://gitlab.gnome.org/GNOME/mutter/issues/556
This commit is contained in:
parent
50b7739076
commit
ed999ce926
@ -1472,7 +1472,12 @@ var Keyboard = class Keyboard {
|
||||
}
|
||||
|
||||
_onKeyboardGroupsChanged(keyboard) {
|
||||
this._groups = [];
|
||||
let nonGroupActors = [this._emojiSelection.actor, this._keypad.actor];
|
||||
this._aspectContainer.get_children().filter(c => !nonGroupActors.includes(c)).forEach(c => {
|
||||
c.destroy();
|
||||
});
|
||||
|
||||
this._groups = {};
|
||||
this._onGroupChanged();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user