From 3dd6113a0a694d1deb444bafd16996a292772abb Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 4 Apr 2013 14:47:38 -0400 Subject: [PATCH] modalDialog: Destroy dialogs on close It turns out that we never destroyed modal dialogs when closing them, causing them to still linger in the scene graph even when there were no references to them in the JS. The one case where we don't want to destroy modal dialogs after being closed is endSessionDialog, so provide a parameter that allows classes to override this behavior. https://bugzilla.gnome.org/show_bug.cgi?id=697295 --- js/ui/endSessionDialog.js | 3 ++- js/ui/modalDialog.js | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/js/ui/endSessionDialog.js b/js/ui/endSessionDialog.js index b7850a484..d3225819a 100644 --- a/js/ui/endSessionDialog.js +++ b/js/ui/endSessionDialog.js @@ -225,7 +225,8 @@ const EndSessionDialog = new Lang.Class({ Extends: ModalDialog.ModalDialog, _init: function() { - this.parent({ styleClass: 'end-session-dialog' }); + this.parent({ styleClass: 'end-session-dialog', + destroyOnClose: false }); this._user = AccountsService.UserManager.get_default().get_user(GLib.get_user_name()); diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js index 304733efb..beac7fe09 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -38,13 +38,15 @@ const ModalDialog = new Lang.Class({ styleClass: null, parentActor: Main.uiGroup, keybindingMode: Shell.KeyBindingMode.SYSTEM_MODAL, - shouldFadeIn: true }); + shouldFadeIn: true, + destroyOnClose: true }); this.state = State.CLOSED; this._hasModal = false; this._keybindingMode = params.keybindingMode; this._shellReactive = params.shellReactive; this._shouldFadeIn = params.shouldFadeIn; + this._destroyOnClose = params.destroyOnClose; this._group = new St.Widget({ visible: false, x: 0, @@ -277,6 +279,9 @@ const ModalDialog = new Lang.Class({ this.state = State.CLOSED; this._group.hide(); this.emit('closed'); + + if (this._destroyOnClose) + this.destroy(); }) }); },