From e418c553a69f8c943d9336e65426e5af02925868 Mon Sep 17 00:00:00 2001 From: julmis Date: Mon, 1 Mar 2004 23:59:11 +0000 Subject: [PATCH] Focus fix for gecko based browser dialogs --- lib/editor/dialog.js | 144 +++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/lib/editor/dialog.js b/lib/editor/dialog.js index 86c4bc0b9c7..9393c8c4e74 100644 --- a/lib/editor/dialog.js +++ b/lib/editor/dialog.js @@ -1,72 +1,72 @@ -// Though "Dialog" looks like an object, it isn't really an object. Instead -// it's just namespace for protecting global symbols. - -function Dialog(url, action, init) { - if (typeof init == "undefined") { - init = window; // pass this window object by default - } - if (document.all) { // here we hope that Mozilla will never support document.all - var value = - showModalDialog(url, init, - //window.open(url, '_blank', - "resizable: no; help: no; status: no; scroll: no"); - if (action) { - action(value); - } - } else { - return Dialog._geckoOpenModal(url, action, init); - } -}; - -Dialog._parentEvent = function(ev) { - if (Dialog._modal && !Dialog._modal.closed) { - Dialog._modal.focus(); - // we get here in Mozilla only, anyway, so we can safely use - // the DOM version. - ev.preventDefault(); - ev.stopPropagation(); - } -}; - -// should be a function, the return handler of the currently opened dialog. -Dialog._return = null; - -// constant, the currently opened dialog -Dialog._modal = null; - -// the dialog will read it's args from this variable -Dialog._arguments = null; - -Dialog._geckoOpenModal = function(url, action, init) { - var dlg = window.open(url, "ha_dialog", - "toolbar=no,menubar=no,personalbar=no,width=10,height=10," + - "scrollbars=no,resizable=no"); - Dialog._modal = dlg; - Dialog._arguments = init; - - // capture some window's events - function capwin(w) { - w.addEventListener("click", Dialog._parentEvent, true); - w.addEventListener("mousedown", Dialog._parentEvent, true); - w.addEventListener("focus", Dialog._parentEvent, true); - }; - // release the captured events - function relwin(w) { - w.removeEventListener("focus", Dialog._parentEvent, true); - w.removeEventListener("mousedown", Dialog._parentEvent, true); - w.removeEventListener("click", Dialog._parentEvent, true); - }; - capwin(window); - // capture other frames - //for (var i = 0; i < window.frames.length; capwin(window.frames[i++])); - // make up a function to be called when the Dialog ends. - Dialog._return = function (val) { - if (val && action) { - action(val); - } - relwin(window); - // capture other frames - //for (var i = 0; i < window.frames.length; relwin(window.frames[i++])); - Dialog._modal = null; - }; -}; +// Though "Dialog" looks like an object, it isn't really an object. Instead +// it's just namespace for protecting global symbols. + +function Dialog(url, action, init) { + if (typeof init == "undefined") { + init = window; // pass this window object by default + } + if (document.all) { // here we hope that Mozilla will never support document.all + var value = + showModalDialog(url, init, + //window.open(url, '_blank', + "resizable: no; help: no; status: no; scroll: no"); + if (action) { + action(value); + } + } else { + return Dialog._geckoOpenModal(url, action, init); + } +}; + +Dialog._parentEvent = function(ev) { + if (Dialog._modal && !Dialog._modal.closed) { + setTimeout(function(){Dialog._modal.focus();}, 1); + // we get here in Mozilla only, anyway, so we can safely use + // the DOM version. + ev.preventDefault(); + ev.stopPropagation(); + } +}; + +// should be a function, the return handler of the currently opened dialog. +Dialog._return = null; + +// constant, the currently opened dialog +Dialog._modal = null; + +// the dialog will read it's args from this variable +Dialog._arguments = null; + +Dialog._geckoOpenModal = function(url, action, init) { + var dlg = window.open(url, "ha_dialog", + "toolbar=no,menubar=no,personalbar=no,width=10,height=10," + + "scrollbars=no,resizable=no"); + Dialog._modal = dlg; + Dialog._arguments = init; + + // capture some window's events + function capwin(w) { + w.addEventListener("click", Dialog._parentEvent, true); + w.addEventListener("mousedown", Dialog._parentEvent, true); + w.addEventListener("focus", Dialog._parentEvent, true); + }; + // release the captured events + function relwin(w) { + w.removeEventListener("focus", Dialog._parentEvent, true); + w.removeEventListener("mousedown", Dialog._parentEvent, true); + w.removeEventListener("click", Dialog._parentEvent, true); + }; + capwin(window); + // capture other frames + for (var i = 0; i < window.frames.length; capwin(window.frames[i++])); + // make up a function to be called when the Dialog ends. + Dialog._return = function (val) { + if (val && action) { + action(val); + } + relwin(window); + // capture other frames + for (var i = 0; i < window.frames.length; relwin(window.frames[i++])); + Dialog._modal = null; + }; +};