1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-03-31 04:23:32 +02:00

add menu mode

This commit is contained in:
Doug Kearns
2007-08-27 14:26:43 +00:00
parent 626d8472d9
commit bf881b0292
2 changed files with 52 additions and 1 deletions

View File

@@ -72,6 +72,47 @@ function Events() //{{{
vimperator.setMode(); // trick to reshow the mode in the command line vimperator.setMode(); // trick to reshow the mode in the command line
}, null); }, null);
//
// track if a popup is open or the menubar is active
//
var popup_count = 0;
var active_menubar = false;
function enterPopupMode()
{
popup_count++;
vimperator.log("Open popup window count: " + popup_count, 9);
vimperator.addMode(null, vimperator.modes.MENU);
}
function exitPopupMode()
{
popup_count--;
vimperator.log("Open popup window count: " + popup_count, 9);
if (popup_count == 0)
vimperator.removeMode(null, vimperator.modes.MENU);
}
function enterMenuMode()
{
active_menubar = true;
vimperator.log("Menubar is active", 9);
vimperator.addMode(null, vimperator.modes.MENU)
}
function exitMenuMode()
{
active_menubar = false;
vimperator.log("Menubar is inactive", 9);
vimperator.removeMode(null, vimperator.modes.MENU);
}
window.addEventListener("popupshown", enterPopupMode, true);
window.addEventListener("popuphidden", exitPopupMode, true);
window.addEventListener("DOMMenuBarActive", enterMenuMode, true);
window.addEventListener("DOMMenuBarInactive", exitMenuMode, true);
window.document.addEventListener("DOMTitleChanged", function(event) window.document.addEventListener("DOMTitleChanged", function(event)
{ {
//alert("titlechanged"); //alert("titlechanged");
@@ -209,6 +250,11 @@ function Events() //{{{
window.dump("TODO: remove all eventlisteners"); window.dump("TODO: remove all eventlisteners");
getBrowser().removeProgressListener(this.progressListener); getBrowser().removeProgressListener(this.progressListener);
window.removeEventListener("popupshowing", enterPopupMode(), true);
window.removeEventListener("popuphidden", exitPopupMode(), true);
window.removeEventListener("DOMMenuBarActive", enterMenuMode(), true);
window.removeEventListener("DOMMenuBarInactive", exitMenuMode(), true);
} }
// This method pushes keys into the event queue from vimperator // This method pushes keys into the event queue from vimperator
@@ -356,12 +402,15 @@ function Events() //{{{
// if (event.target.id == "main-window") // if (event.target.id == "main-window")
// alert("focusContent();"); // alert("focusContent();");
if (vimperator.hasMode(vimperator.modes.MENU))
return false;
// XXX: ugly hack for now pass certain keys to firefox as they are without beeping // XXX: ugly hack for now pass certain keys to firefox as they are without beeping
// also fixes key navigation in menus, etc. // also fixes key navigation in menus, etc.
if (key == "<Tab>" || key == "<Return>" || key == "<Space>" || key == "<Up>" || key == "<Down>") if (key == "<Tab>" || key == "<Return>" || key == "<Space>" || key == "<Up>" || key == "<Down>")
return false; return false;
// XXX: for now only, later: input mappings if form element focused // XXX: for now only, later: input mappings if form element focused
if (isFormElemFocused()) if (isFormElemFocused())
{ {

View File

@@ -49,7 +49,8 @@ const vimperator = (function() //{{{
ESCAPE_ALL_KEYS: 1 << 15, ESCAPE_ALL_KEYS: 1 << 15,
QUICK_HINT: 1 << 16, QUICK_HINT: 1 << 16,
EXTENDED_HINT: 1 << 17, EXTENDED_HINT: 1 << 17,
ALWAYS_HINT: 1 << 18 ALWAYS_HINT: 1 << 18,
MENU: 1 << 19 // a popupmenu is active
} }
var mode_messages = {}; var mode_messages = {};
@@ -63,6 +64,7 @@ const vimperator = (function() //{{{
mode_messages[modes.QUICK_HINT] = "quick"; mode_messages[modes.QUICK_HINT] = "quick";
mode_messages[modes.EXTENDED_HINT] = "extended"; mode_messages[modes.EXTENDED_HINT] = "extended";
mode_messages[modes.ALWAYS_HINT] = "always"; mode_messages[modes.ALWAYS_HINT] = "always";
mode_messages[modes.MENU] = "menu"; // TODO: desirable?
var mode = modes.NORMAL; var mode = modes.NORMAL;
var extended_mode = modes.NONE; var extended_mode = modes.NONE;