Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ enum KeyToggle {
}

export enum EventType {
EVENT_KEY_TYPED = 3,
EVENT_KEY_PRESSED = 4,
EVENT_KEY_RELEASED = 5,
EVENT_MOUSE_CLICKED = 6,
Expand All @@ -25,13 +26,14 @@ export enum EventType {
}

export interface UiohookKeyboardEvent {
type: EventType.EVENT_KEY_PRESSED | EventType.EVENT_KEY_RELEASED
type: EventType.EVENT_KEY_TYPED | EventType.EVENT_KEY_PRESSED | EventType.EVENT_KEY_RELEASED
time: number
altKey: boolean
ctrlKey: boolean
metaKey: boolean
shiftKey: boolean
keycode: number
keychar: number
}

export interface UiohookMouseEvent {
Expand Down Expand Up @@ -202,7 +204,7 @@ declare interface UiohookNapi {

on(event: 'keydown', listener: (e: UiohookKeyboardEvent) => void): this
on(event: 'keyup', listener: (e: UiohookKeyboardEvent) => void): this

on(event: 'keytyped', listener: (e: UiohookKeyboardEvent) => void): this
on(event: 'mousedown', listener: (e: UiohookMouseEvent) => void): this
on(event: 'mouseup', listener: (e: UiohookMouseEvent) => void): this
on(event: 'mousemove', listener: (e: UiohookMouseEvent) => void): this
Expand All @@ -215,6 +217,9 @@ class UiohookNapi extends EventEmitter {
private handler (e: UiohookKeyboardEvent | UiohookMouseEvent | UiohookWheelEvent) {
this.emit('input', e)
switch (e.type) {
case EventType.EVENT_KEY_TYPED:
this.emit('keytyped', e)
break
case EventType.EVENT_KEY_PRESSED:
this.emit('keydown', e)
break
Expand Down
7 changes: 6 additions & 1 deletion src/lib/addon.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,15 @@ napi_value uiohook_to_js_event(napi_env env, uiohook_event* event) {
status = napi_create_double(env, (double)event->time, &e_time);
NAPI_FATAL_IF_FAILED(status, "uiohook_to_js_event", "napi_create_double");

if (event->type == EVENT_KEY_PRESSED || event->type == EVENT_KEY_RELEASED) {
if (event->type == EVENT_KEY_TYPED || event->type == EVENT_KEY_PRESSED || event->type == EVENT_KEY_RELEASED) {
napi_value e_keycode;
status = napi_create_uint32(env, event->data.keyboard.keycode, &e_keycode);
NAPI_FATAL_IF_FAILED(status, "uiohook_to_js_event", "napi_create_uint32");

napi_value e_keychar;
status = napi_create_uint32(env, event->data.keyboard.keychar, &e_keychar);
NAPI_FATAL_IF_FAILED(status, "uiohook_to_js_event", "napi_create_uint32");

napi_property_descriptor descriptors[] = {
{ "type", NULL, NULL, NULL, NULL, e_type, napi_enumerable, NULL },
{ "time", NULL, NULL, NULL, NULL, e_time, napi_enumerable, NULL },
Expand All @@ -70,6 +74,7 @@ napi_value uiohook_to_js_event(napi_env env, uiohook_event* event) {
{ "metaKey", NULL, NULL, NULL, NULL, e_metaKey, napi_enumerable, NULL },
{ "shiftKey", NULL, NULL, NULL, NULL, e_shiftKey, napi_enumerable, NULL },
{ "keycode", NULL, NULL, NULL, NULL, e_keycode, napi_enumerable, NULL },
{ "keychar", NULL, NULL, NULL, NULL, e_keychar, napi_enumerable, NULL },
};
status = napi_define_properties(env, event_obj, sizeof(descriptors) / sizeof(descriptors[0]), descriptors);
NAPI_FATAL_IF_FAILED(status, "uiohook_to_js_event", "napi_define_properties");
Expand Down