mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-03-31 06:23:30 +02:00
add menu mode
This commit is contained in:
@@ -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())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user