From 3c7e1b3ff95270d539395ebab498afa8d102e799 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Scott=20Gonz=C3=A1lez?= Date: Thu, 19 Feb 2009 02:20:20 +0000 Subject: [PATCH] Dialog: Refactored event delegation to cancel events for modal dialogs. Fixes #2807 - dialogUI + modal mode = slow. --- ui/ui.dialog.js | 25 +++++-------------------- 1 file 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); -- 2.39.5