aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorScott González <scott.gonzalez@gmail.com>2009-02-19 02:20:20 +0000
committerScott González <scott.gonzalez@gmail.com>2009-02-19 02:20:20 +0000
commit3c7e1b3ff95270d539395ebab498afa8d102e799 (patch)
tree4c74a7d831ae0cfccb9fcba87cc3e934999782cc /ui
parent835cbf1833fa1893cfcae10cb44b170f89ea4178 (diff)
downloadjquery-ui-3c7e1b3ff95270d539395ebab498afa8d102e799.tar.gz
jquery-ui-3c7e1b3ff95270d539395ebab498afa8d102e799.zip
Dialog: Refactored event delegation to cancel events for modal dialogs. Fixes #2807 - dialogUI + modal mode = slow.
Diffstat (limited to 'ui')
-rw-r--r--ui/ui.dialog.js25
1 files changed, 5 insertions, 20 deletions
diff --git a/ui/ui.dialog.js b/ui/ui.dialog.js
index 5e2da14e3..6518900f1 100644
--- a/ui/ui.dialog.js
+++ b/ui/ui.dialog.js
@@ -187,7 +187,7 @@ $.widget("ui.dialog", {
$.ui.dialog.maxZ = this.options.zIndex;
}
$.ui.dialog.topMostDialog = this;
- (this.overlay && this.overlay.$el.css('z-index', ++$.ui.dialog.maxZ));
+ (this.overlay && this.overlay.$el.css('z-index', $.ui.dialog.overlay.maxZ = ++$.ui.dialog.maxZ));
//Save and then restore scroll since Opera 9.5+ resets when parent z-Index is changed.
// http://ui.jquery.com/bugs/ticket/3193
@@ -516,6 +516,7 @@ $.extend($.ui.dialog, {
$.extend($.ui.dialog.overlay, {
instances: [],
+ maxZ: 0,
events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),
function(event) { return event + '.dialog-overlay'; }).join(' '),
create: function(dialog) {
@@ -524,25 +525,9 @@ $.extend($.ui.dialog.overlay, {
// we use a setTimeout in case the overlay is created from an
// event that we're going to be cancelling (see #2804)
setTimeout(function() {
- $(document).bind($.ui.dialog.overlay.events, function() {
- // allow use of the element if inside a dialog and
- // - there are no modal dialogs
- // - there are modal dialogs, but we are in front of the topmost modal
- var allow = false;
- var $dialog = $(this).parents('.ui-dialog');
- if ($dialog.length) {
- var $overlays = $('.ui-dialog-overlay');
- if ($overlays.length) {
- var maxZ = parseInt($overlays.css('z-index'), 10);
- $overlays.each(function() {
- maxZ = Math.max(maxZ, parseInt($(this).css('z-index'), 10));
- });
- allow = parseInt($dialog.css('z-index'), 10) > maxZ;
- } else {
- allow = true;
- }
- }
- return allow;
+ $(document).bind($.ui.dialog.overlay.events, function(event) {
+ var dialogZ = $(event.target).parents('.ui-dialog').css('zIndex') || 0;
+ return (dialogZ > $.ui.dialog.overlay.maxZ);
});
}, 1);