Ticket #5185: patch.txt

File patch.txt, 1.8 KB (added by btburnett3, 10 years ago)

Patch File

Line 
1Index: jquery.ui.dialog.js
2===================================================================
3--- jquery.ui.dialog.js (revision 3815)
4+++ jquery.ui.dialog.js (working copy)
5@@ -592,6 +592,8 @@
6 
7 $.extend($.ui.dialog.overlay, {
8        instances: [],
9+       // reuse old instances due to IE memory leak with alpha transparency (see #5185)
10+       oldInstances: [],
11        maxZ: 0,
12        events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
13                function(event) { return event + '.dialog-overlay'; }).join(' '),
14@@ -604,7 +606,7 @@
15                                // handle $(el).dialog().dialog('close') (see #4065)
16                                if ($.ui.dialog.overlay.instances.length) {
17                                        $(document).bind($.ui.dialog.overlay.events, function(event) {
18-                                               // stop events if the z-index of the target is <= the z-index of the overlay
19+                                               // stop events if the z-index of the target is < the z-index of the overlay
20                                                return ($(event.target).zIndex() >= $.ui.dialog.overlay.maxZ);
21                                        });
22                                }
23@@ -620,11 +622,12 @@
24                        $(window).bind('resize.dialog-overlay', $.ui.dialog.overlay.resize);
25                }
26 
27-               var $el = $('<div></div>').appendTo(document.body)
28-                       .addClass('ui-widget-overlay').css({
29-                               width: this.width(),
30-                               height: this.height()
31-                       });
32+               var $el = (this.oldInstances.length ? this.oldInstances.splice(0, 1)[0] : $('<div></div>').addClass('ui-widget-overlay'))
33+                                       .appendTo(document.body)
34+                                       .css({
35+                                               width: this.width(),
36+                                               height: this.height()
37+                                       });
38 
39                ($.fn.bgiframe && $el.bgiframe());
40 
41@@ -633,7 +636,7 @@
42        },
43 
44        destroy: function($el) {
45-               this.instances.splice($.inArray(this.instances, $el), 1);
46+               this.oldInstances.push(this.instances.splice($.inArray(this.instances, $el), 1)[0]);
47 
48                if (this.instances.length === 0) {
49                        $([document, window]).unbind('.dialog-overlay');