From 557b232c8964fbe5b5cbbbdc53d6af65dd010fd0 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 28 Aug 2018 22:37:27 -0300 Subject: [PATCH] panel: Delegate container destruction to PanelMenu.ButtonBox Instead of taking care of the PanelMenu.ButtonBox.container destruction by itself, delegate that to the very object that created it in the first place: PanelMenu.ButtonBox itself. --- js/ui/panel.js | 1 - js/ui/panelMenu.js | 10 +++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/js/ui/panel.js b/js/ui/panel.js index e61557ab9..49759af4c 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -1158,7 +1158,6 @@ var Panel = new Lang.Class({ let destroyId = indicator.connect('destroy', emitter => { delete this.statusArea[role]; emitter.disconnect(destroyId); - container.destroy(); }); indicator.connect('menu-set', this._onMenuSet.bind(this)); this._onMenuSet(indicator); diff --git a/js/ui/panelMenu.js b/js/ui/panelMenu.js index 6f496db97..401419dec 100644 --- a/js/ui/panelMenu.js +++ b/js/ui/panelMenu.js @@ -30,6 +30,8 @@ var ButtonBox = new Lang.Class({ child: this.actor }); this.connect('style-changed', this._onStyleChanged.bind(this)); + this.connect('destroy', this._onDestroy.bind(this)); + this._minHPadding = this._natHPadding = 0.0; }, @@ -90,6 +92,11 @@ var ButtonBox = new Lang.Class({ child.allocate(childBox, flags); }, + + _onDestroy() { + this.container.child = null; + this.container.destroy(); + }, }); var Button = new Lang.Class({ @@ -106,7 +113,6 @@ var Button = new Lang.Class({ this.connect('event', this._onEvent.bind(this)); this.connect('notify::visible', this._onVisibilityChanged.bind(this)); - this.connect('destroy', this._onDestroy.bind(this)); if (dontCreateMenu) this.menu = new PopupMenu.PopupDummyMenu(this.actor); @@ -190,6 +196,8 @@ var Button = new Lang.Class({ }, _onDestroy() { + this.parent(); + if (this.menu) this.menu.destroy(); }