1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-01-07 16:24:12 +01:00

Use nsIDOMWindowUtils to fake key events rather than dispatch them manually.

--HG--
extra : rebase_source : cc84bb65cc911520c376c92b728aeee30fcd9d76
This commit is contained in:
Kris Maglione
2010-11-03 03:49:44 -04:00
parent 1caf0d1f45
commit 24add5296b

View File

@@ -250,10 +250,9 @@ const Events = Module("events", {
util.threadYield(1, true);
for (let [, evt_obj] in Iterator(events.fromString(keys))) {
delete evt_obj.type;
for (let type in values(["keydown", "keyup", "keypress"])) {
let elem = dactyl.focus || buffer.focusedFrame;
let evt = events.create(doc, type, evt_obj);
let evt = this.feedingEvent = update({}, evt_obj, { type: type });
if (isObject(noremap))
update(evt, noremap);
@@ -261,10 +260,10 @@ const Events = Module("events", {
evt.noremap = !!noremap;
evt.isMacro = true;
// A special hack for dactyl-specific key names.
if (!evt_obj.dactylString && !evt_obj.dactylShift)
elem.dispatchEvent(evt);
else {
window.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils)
.sendKeyEvent(type, evt.keyCode, evt.charCode, evt.modifiers);
else { // A special hack for dactyl-specific key names.
evt.dactylString = evt_obj.dactylString; // for key-less keypress events e.g. <Nop>
evt.dactylShift = evt_obj.dactylShift; // for untypeable shift keys e.g. <S-1>
events.onKeyPress(evt);
@@ -281,6 +280,7 @@ const Events = Module("events", {
}
}
finally {
this.feedingEvent = null;
this.feedingKeys = wasFeeding;
if (quiet)
commandline.quiet = wasQuiet;
@@ -437,6 +437,11 @@ const Events = Module("events", {
if (evt_obj.keyCode == 60 || evt_obj.charCode == 60)
evt_obj.charCode = evt_obj.keyCode = 60; // <lt>
evt_obj.modifiers = (evt_obj.ctrlKey && Ci.nsIDOMNSEvent.CONTROL_MASK)
| (evt_obj.altKey && Ci.nsIDOMNSEvent.ALT_MASK)
| (evt_obj.shiftKey && Ci.nsIDOMNSEvent.SHIFT_MASK)
| (evt_obj.metaKey && Ci.nsIDOMNSEvent.META_MASK);
out.push(evt_obj);
}
return out;
@@ -753,6 +758,9 @@ const Events = Module("events", {
event.stopPropagation();
}
if (this.feedingEvent && [!(k in event) || event[k] === v for ([k, v] in Iterator(this.feedingEvent))].every(util.identity))
update(event, this.feedingEvent);
let key = events.toString(event);
if (!key)
return null;