This allows using the Windows-logo key as a modifier. It used to trigger meta modifier, but changed to os modifier in recent xulrunner versions (probably from 12).
See http://bugs.conkeror.org/issue410 --- modules/commands.js | 1 + modules/input.js | 2 ++ modules/keymap.js | 23 ++++++++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/modules/commands.js b/modules/commands.js index 379b50f..d1921a6 100644 --- a/modules/commands.js +++ b/modules/commands.js @@ -336,6 +336,7 @@ function send_key_as_event (window, element, combo) { split.metaKey, split.keyCode, split.charCode); + event.osKey = split.osKey; if (element) { return element.dispatchEvent(event); } else { diff --git a/modules/input.js b/modules/input.js index 6adbec1..327917e 100644 --- a/modules/input.js +++ b/modules/input.js @@ -42,6 +42,8 @@ function event_clone (event) { this.altKey = event.altKey; this.shiftKey = event.shiftKey; this.sticky_modifiers = event.sticky_modifiers; + + this.osKey = osKey(event); } diff --git a/modules/keymap.js b/modules/keymap.js index ee02f22..2b0b9d4 100644 --- a/modules/keymap.js +++ b/modules/keymap.js @@ -33,6 +33,18 @@ function modifier (in_event_p, set_in_event) { this.set_in_event = set_in_event; } +// xulrunner os-key modifier (version >= 15) +function osKey (event) { + // For events cloned by event_clone, or faked by + // send_key_as_event + if (event.osKey) + return true; + // For original/real events + if (typeof event.getModifierState == "function") + return event.getModifierState("OS"); + return false; +} + var modifiers = { A: new modifier(function (event) { return event.altKey; }, function (event) { event.altKey = true; }), @@ -75,6 +87,10 @@ if (get_os() == 'Darwin') { modifier_order = ['C', 'M', 'A', 'S']; } else { modifiers.M = modifiers.A; + // https://developer.mozilla.org/en-US/docs/DOM/KeyboardEvent#getModifierState() + modifiers.s = new modifier(function(event) { return osKey(event); }, + function(event) { event.osKey = true; }); + modifier_order = ['C', 'M', 'S', 's']; } @@ -117,7 +133,8 @@ function unformat_key_combo (combo) { altKey: false, ctrlKey: false, metaKey: false, - shiftKey: false + shiftKey: false, + osKey: false }; var M; var i = 0; @@ -199,6 +216,7 @@ define_key_match_predicate('match_any_unmodified_character', 'any unmodified cha || event.keyCode > 31) && !modifiers.A.in_event_p(event) && !event.metaKey + && !osKey(event) && !event.ctrlKey && !event.sticky_modifiers; } catch (e) { return false; } @@ -209,6 +227,7 @@ define_key_match_predicate('match_checkbox_keys', 'checkbox keys', return event.keyCode == 32 && !event.shiftKey && !event.metaKey + && !osKey(event) && !event.altKey && !event.ctrlKey; //XXX: keycode fallthroughs don't support sticky modifiers @@ -220,6 +239,7 @@ define_key_match_predicate('match_text_keys', 'text editing keys', || event.keyCode == 13 || event.keyCode > 31) && !event.ctrlKey && !event.metaKey + && !osKey(event) && !modifiers.A.in_event_p(event); //XXX: keycode fallthroughs don't support sticky modifiers }); @@ -229,6 +249,7 @@ define_key_match_predicate('match_not_escape_key', 'any key but escape', return event.keyCode != 27 || event.shiftKey || event.altKey || + osKey(event) || event.metaKey || // M-escape can also leave this mode, so we // need to use an accurate determination of // whether the "M" modifier was pressed, -- 1.7.9.5 _______________________________________________ Conkeror mailing list Conkeror@mozdev.org https://www.mozdev.org/mailman/listinfo/conkeror