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:
parent
c2a5c00111
commit
9d933356e1
@ -75,6 +75,7 @@ const Key = new Lang.Class({
|
|||||||
_init : function(key) {
|
_init : function(key) {
|
||||||
this._key = key;
|
this._key = key;
|
||||||
this.actor = this._makeKey(key, GLib.markup_escape_text(key.label, -1));
|
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_keys = this._key.get_extended_keys();
|
||||||
this._extended_keyboard = null;
|
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) {
|
_makeKey: function (key, label) {
|
||||||
let button = new St.Button ({ label: label,
|
let button = new St.Button ({ label: label,
|
||||||
style_class: 'keyboard-key' });
|
style_class: 'keyboard-key' });
|
||||||
|
Loading…
Reference in New Issue
Block a user