[gnome-shell] modalDialog: Destroy dialogs on close



commit 3dd6113a0a694d1deb444bafd16996a292772abb
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Thu Apr 4 14:47:38 2013 -0400

    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 b7850a4..d322581 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 304733e..beac7fe 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();
                                })
                          });
     },


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]