keyboard: Make sure to destroy the key's BoxPointer
When the keyboard is destroyed, we destroy the keyboard actor, but the keyboard's menu isn't part of the key itself, so it's never tracked. The menus are actually tracked actors, so they slow down the layout manager's code to rebuild regions and other things. Keeping this list small is a good idea. To prevent leaking menus, destroy the menu when the key is destroyed. https://bugzilla.gnome.org/show_bug.cgi?id=736999
This commit is contained in:
@ -75,6 +75,7 @@ const Key = new Lang.Class({
|
||||
_init : function(key) {
|
||||
this._key = key;
|
||||
this.actor = this._makeKey(key, GLib.markup_escape_text(key.label, -1));
|
||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||
|
||||
this._extended_keys = this._key.get_extended_keys();
|
||||
this._extended_keyboard = null;
|
||||
@ -97,6 +98,13 @@ const Key = new Lang.Class({
|
||||
}
|
||||
},
|
||||
|
||||
_onDestroy: function() {
|
||||
if (this._boxPointer) {
|
||||
this._boxPointer.actor.destroy();
|
||||
this._boxPointer = null;
|
||||
}
|
||||
},
|
||||
|
||||
_makeKey: function (key, label) {
|
||||
let button = new St.Button ({ label: label,
|
||||
style_class: 'keyboard-key' });
|
||||
|
Reference in New Issue
Block a user