Permalink
Browse files

Focus fix for gecko based browser dialogs

  • Loading branch information...
1 parent f77b670 commit e418c553a69f8c943d9336e65426e5af02925868 julmis committed Mar 1, 2004
Showing with 72 additions and 72 deletions.
  1. +72 −72 lib/editor/dialog.js
View
@@ -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;
+ };
+};

0 comments on commit e418c55

Please sign in to comment.