[FIX] web: do not try to close a destroyed dialog. trigger "closing" signal on close...
authorChristophe Simonis <chs@openerp.com>
Fri, 11 Apr 2014 16:24:26 +0000 (18:24 +0200)
committerChristophe Simonis <chs@openerp.com>
Fri, 11 Apr 2014 16:24:26 +0000 (18:24 +0200)
bzr revid: chs@openerp.com-20140411162426-60bfybim5aqojsxx

addons/web/static/src/js/chrome.js

index e4a985b..cc65900 100644 (file)
@@ -198,6 +198,8 @@ instance.web.Dialog = instance.web.Widget.extend({
         if (options.height === 'auto' && options.max_height) {
             this.$el.css({ 'max-height': options.max_height, 'overflow-y': 'auto' });
         }
+        var self = this;
+        this.$el.on('dialogclose', function() { self.close(); });
         this.dialog_inited = true;
         var res = this.start();
         return res;
@@ -206,9 +208,11 @@ instance.web.Dialog = instance.web.Widget.extend({
         Closes the popup, if destroy_on_close was passed to the constructor, it is also destroyed.
     */
     close: function(reason) {
-        if (this.dialog_inited && this.$el.is(":data(dialog)")) {
+        if (this.dialog_inited) {
             this.trigger("closing", reason);
-            this.$el.dialog('close');
+            if (this.$el.is(":data(dialog)")) {     // may have been destroyed by closing signal
+                this.$el.dialog('close');
+            }
         }
     },
     _closing: function() {