diff --git a/VERSION b/VERSION index 70eeb6be..6091c702 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -beta-v0.2.5+t02 +beta-v0.2.5+t03 diff --git a/src/ckb-daemon/input.c b/src/ckb-daemon/input.c index 30d53141..78a5c394 100644 --- a/src/ckb-daemon/input.c +++ b/src/ckb-daemon/input.c @@ -136,7 +136,6 @@ void inputupdate(usbdevice* kb){ input->rel_x = input->rel_y = 0; } // Finish up - os_isync(kb); memcpy(input->prevkeys, input->keys, N_KEYBYTES_INPUT); } diff --git a/src/ckb-daemon/input.h b/src/ckb-daemon/input.h index 95447440..7625df5b 100644 --- a/src/ckb-daemon/input.h +++ b/src/ckb-daemon/input.h @@ -43,8 +43,6 @@ void cmd_macro(usbdevice* kb, usbmode* mode, const int notifynumber, const char* void os_keypress(usbdevice* kb, int scancode, int down); // Generate mouse movement void os_mousemove(usbdevice* kb, int x, int y); -// Synchronize input (called after sending key presses) -void os_isync(usbdevice* kb); // Perform OS-specific setup for indicator lights. Called when the device is created. Return 0 on success. int os_setupindicators(usbdevice* kb); diff --git a/src/ckb-daemon/input_linux.c b/src/ckb-daemon/input_linux.c index 20598ba9..b42347e3 100644 --- a/src/ckb-daemon/input_linux.c +++ b/src/ckb-daemon/input_linux.c @@ -97,6 +97,18 @@ void os_inputclose(usbdevice* kb){ kb->uinput_mouse = 0; } +// Generate SYN reports to synchronize device +static void isync(usbdevice* kb){ + struct input_event event; + memset(&event, 0, sizeof(event)); + event.type = EV_SYN; + event.code = SYN_REPORT; + if(write(kb->uinput_kb - 1, &event, sizeof(event)) <= 0) + ckb_warn("uinput write failed: %s\n", strerror(errno)); + if(write(kb->uinput_mouse - 1, &event, sizeof(event)) <= 0) + ckb_warn("uinput write failed: %s\n", strerror(errno)); +} + void os_keypress(usbdevice* kb, int scancode, int down){ struct input_event event; memset(&event, 0, sizeof(event)); @@ -118,6 +130,8 @@ void os_keypress(usbdevice* kb, int scancode, int down){ } if(write((is_mouse ? kb->uinput_mouse : kb->uinput_kb) - 1, &event, sizeof(event)) <= 0) ckb_warn("uinput write failed: %s\n", strerror(errno)); + else + isync(kb); } void os_mousemove(usbdevice* kb, int x, int y){ @@ -129,26 +143,19 @@ void os_mousemove(usbdevice* kb, int x, int y){ event.value = x; if(write(kb->uinput_mouse - 1, &event, sizeof(event)) <= 0) ckb_warn("uinput write failed: %s\n", strerror(errno)); + else + isync(kb); } if(y != 0){ event.code = REL_Y; event.value = y; if(write(kb->uinput_mouse - 1, &event, sizeof(event)) <= 0) ckb_warn("uinput write failed: %s\n", strerror(errno)); + else + isync(kb); } } -void os_isync(usbdevice* kb){ - struct input_event event; - memset(&event, 0, sizeof(event)); - event.type = EV_SYN; - event.code = SYN_REPORT; - if(write(kb->uinput_kb - 1, &event, sizeof(event)) <= 0) - ckb_warn("uinput write failed: %s\n", strerror(errno)); - if(write(kb->uinput_mouse - 1, &event, sizeof(event)) <= 0) - ckb_warn("uinput write failed: %s\n", strerror(errno)); -} - void* _ledthread(void* ctx){ usbdevice* kb = ctx; uchar ileds = 0; diff --git a/src/ckb-daemon/input_mac.c b/src/ckb-daemon/input_mac.c index 22f820ef..766424ab 100644 --- a/src/ckb-daemon/input_mac.c +++ b/src/ckb-daemon/input_mac.c @@ -400,10 +400,6 @@ void os_mousemove(usbdevice* kb, int x, int y){ postevent_mm(kb->event, x, y, HAS_FEATURES(kb, FEAT_MOUSEACCEL), kb->mousestate); } -void os_isync(usbdevice* kb){ - // OSX doesn't have any equivalent to the SYN_ events -} - int os_setupindicators(usbdevice* kb){ // Set NumLock on permanently kb->hw_ileds = kb->hw_ileds_old = kb->ileds = 1;