1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-01-07 02:24:12 +01: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
}, 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)
{
//alert("titlechanged");
@@ -209,6 +250,11 @@ function Events() //{{{
window.dump("TODO: remove all eventlisteners");
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
@@ -356,12 +402,15 @@ function Events() //{{{
// if (event.target.id == "main-window")
// 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
// also fixes key navigation in menus, etc.
if (key == "<Tab>" || key == "<Return>" || key == "<Space>" || key == "<Up>" || key == "<Down>")
return false;
// XXX: for now only, later: input mappings if form element focused
if (isFormElemFocused())
{

View File

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