diff options
Diffstat (limited to 'marsond.c')
| -rw-r--r-- | marsond.c | 42 |
1 files changed, 19 insertions, 23 deletions
@@ -352,6 +352,14 @@ void release_key(int code) { write_event(&ev); } +void shift_timing(long long *last, const char *name, int code) { + if(*last && (gettime_millis() < (*last + shift_ms))) { + debug_fg("!!! Enter pressed; last %s shift press < %dms ago, sending %s shift release", name, shift_ms, name); + release_key(code); + *last = 0; + } +} + int main(int argc, char **argv) { int i; long long last_l_shift = 0, last_r_shift = 0; @@ -456,32 +464,20 @@ int main(int argc, char **argv) { debug_fg("got event: type %d, code 0x%02x, value %d", ev.type, ev.code, ev.value); - if(ev.type == EV_KEY && ev.value == 1) { - if(ev.code == KEY_RIGHTSHIFT) { - last_r_shift = (ev.value ? gettime_millis() : 0); - debug_fg("last_r_shift %lld", last_r_shift); - } else if(ev.code == KEY_LEFTSHIFT) { - last_l_shift = (ev.value ? gettime_millis() : 0); - debug_fg("last_l_shift %lld", last_l_shift); - } - } - /* ev.value: 0 == release, 1 == initial press, 2 == repeat */ if(ev.type == EV_KEY) { - if(ev.code == KEY_ENTER && ev.value == 1) { - if(last_r_shift && (gettime_millis() < (last_r_shift + shift_ms))) { - debug_fg("!!! Enter pressed; last right shift press < %dms ago, sending right shift release", shift_ms); - release_key(KEY_RIGHTSHIFT); - last_r_shift = 0; - } - if(last_l_shift && (gettime_millis() < (last_l_shift + shift_ms))) { - debug_fg("!!! Enter pressed; last left shift press < %dms ago, sending left shift release", shift_ms); - release_key(KEY_LEFTSHIFT); - last_l_shift = 0; + if(ev.value == 1) { + if(ev.code == KEY_RIGHTSHIFT) { + last_r_shift = (ev.value ? gettime_millis() : 0); + debug_fg("last_r_shift %lld", last_r_shift); + } else if(ev.code == KEY_LEFTSHIFT) { + last_l_shift = (ev.value ? gettime_millis() : 0); + debug_fg("last_l_shift %lld", last_l_shift); + } else if(ev.code == KEY_ENTER) { + shift_timing(&last_r_shift, "right", KEY_RIGHTSHIFT); + shift_timing(&last_l_shift, "left", KEY_LEFTSHIFT); } - } - - if(ev.code == KEY_ENTER && ev.value == 0) { + } else if(ev.code == KEY_ENTER && ev.value == 0) { debug_fg("!!! got Enter key release, delaying %dms", delay_ms); usleep(delay_ms * 1000); } |
