[gnome-shell/wip/carlosg/destroy-old-osk-layouts] keyboard: Destroy old layout actors when regenerating keyboard groups
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/carlosg/destroy-old-osk-layouts] keyboard: Destroy old layout actors when regenerating keyboard groups
- Date: Tue, 30 Apr 2019 13:37:50 +0000 (UTC)
commit ab220b0cf0595684d9fb07ac3cc7a3dfc6f43686
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Apr 30 14:08:25 2019 +0200
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
js/ui/keyboard.js | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
---
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index 71ebd5596..5ff52a536 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -1472,7 +1472,17 @@ var Keyboard = class Keyboard {
}
_onKeyboardGroupsChanged(keyboard) {
- this._groups = [];
+ for (let child = this._aspectContainer.get_first_child();
+ child != null;
+ child = child.get_next_sibling()) {
+ if (child == this._emojiSelection.actor ||
+ child == this._keypad.actor)
+ continue;
+
+ child.destroy();
+ }
+
+ this._groups = {};
this._onGroupChanged();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]