mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-03-01 04:25:45 +01:00
Use nsIDOMWindowUtils to fake key events rather than dispatch them manually.
--HG-- extra : rebase_source : cc84bb65cc911520c376c92b728aeee30fcd9d76
This commit is contained in:
@@ -250,10 +250,9 @@ const Events = Module("events", {
|
|||||||
util.threadYield(1, true);
|
util.threadYield(1, true);
|
||||||
|
|
||||||
for (let [, evt_obj] in Iterator(events.fromString(keys))) {
|
for (let [, evt_obj] in Iterator(events.fromString(keys))) {
|
||||||
delete evt_obj.type;
|
|
||||||
for (let type in values(["keydown", "keyup", "keypress"])) {
|
for (let type in values(["keydown", "keyup", "keypress"])) {
|
||||||
let elem = dactyl.focus || buffer.focusedFrame;
|
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))
|
if (isObject(noremap))
|
||||||
update(evt, noremap);
|
update(evt, noremap);
|
||||||
@@ -261,10 +260,10 @@ const Events = Module("events", {
|
|||||||
evt.noremap = !!noremap;
|
evt.noremap = !!noremap;
|
||||||
evt.isMacro = true;
|
evt.isMacro = true;
|
||||||
|
|
||||||
// A special hack for dactyl-specific key names.
|
|
||||||
if (!evt_obj.dactylString && !evt_obj.dactylShift)
|
if (!evt_obj.dactylString && !evt_obj.dactylShift)
|
||||||
elem.dispatchEvent(evt);
|
window.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils)
|
||||||
else {
|
.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.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>
|
evt.dactylShift = evt_obj.dactylShift; // for untypeable shift keys e.g. <S-1>
|
||||||
events.onKeyPress(evt);
|
events.onKeyPress(evt);
|
||||||
@@ -281,6 +280,7 @@ const Events = Module("events", {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
this.feedingEvent = null;
|
||||||
this.feedingKeys = wasFeeding;
|
this.feedingKeys = wasFeeding;
|
||||||
if (quiet)
|
if (quiet)
|
||||||
commandline.quiet = wasQuiet;
|
commandline.quiet = wasQuiet;
|
||||||
@@ -437,6 +437,11 @@ const Events = Module("events", {
|
|||||||
if (evt_obj.keyCode == 60 || evt_obj.charCode == 60)
|
if (evt_obj.keyCode == 60 || evt_obj.charCode == 60)
|
||||||
evt_obj.charCode = evt_obj.keyCode = 60; // <lt>
|
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);
|
out.push(evt_obj);
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
@@ -753,6 +758,9 @@ const Events = Module("events", {
|
|||||||
event.stopPropagation();
|
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);
|
let key = events.toString(event);
|
||||||
if (!key)
|
if (!key)
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
Reference in New Issue
Block a user