diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2012-07-26 22:38:38 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2012-07-26 22:38:38 +0100 |
commit | 514bee5786a4506922e3e80a0e4a8672dee7daee (patch) | |
tree | d4f8822b6048a9600fd241a62b560fd9522db390 | |
parent | 8660bed543b54c114fdf809c4c479adf58a2a739 (diff) | |
download | netsurf-514bee5786a4506922e3e80a0e4a8672dee7daee.tar.gz netsurf-514bee5786a4506922e3e80a0e4a8672dee7daee.tar.bz2 |
Handle consecutive queued mouse move events together. Reduces pointer lag when busy.
-rw-r--r-- | framebuffer/fbtk/event.c | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/framebuffer/fbtk/event.c b/framebuffer/fbtk/event.c index 051afb1f6..ca64fd33d 100644 --- a/framebuffer/fbtk/event.c +++ b/framebuffer/fbtk/event.c @@ -193,36 +193,42 @@ fbtk_event(fbtk_widget_t *root, nsfb_event_t *event, int timeout) /* ensure we have the root widget */ root = fbtk_get_root_widget(root); - if (nsfb_event(root->u.root.fb, event, timeout) == false) - return false; - - switch (event->type) { - case NSFB_EVENT_KEY_DOWN: - case NSFB_EVENT_KEY_UP: - if ((event->value.controlcode >= NSFB_KEY_MOUSE_1) && - (event->value.controlcode <= NSFB_KEY_MOUSE_5)) { - fbtk_click(root, event); - } else { - fbtk_input(root, event); + do { + if (nsfb_event(root->u.root.fb, event, timeout) == false) + return false; + + switch (event->type) { + case NSFB_EVENT_KEY_DOWN: + case NSFB_EVENT_KEY_UP: + if ((event->value.controlcode >= NSFB_KEY_MOUSE_1) && + (event->value.controlcode <= NSFB_KEY_MOUSE_5)) { + fbtk_click(root, event); + } else { + fbtk_input(root, event); + } + break; + + case NSFB_EVENT_CONTROL: + unused = true; + break; + + case NSFB_EVENT_MOVE_RELATIVE: + fbtk_warp_pointer(root, event->value.vector.x, + event->value.vector.y, true); + timeout = 0; + break; + + case NSFB_EVENT_MOVE_ABSOLUTE: + fbtk_warp_pointer(root, event->value.vector.x, + event->value.vector.y, false); + timeout = 0; + break; + + default: + break; } - break; - - case NSFB_EVENT_CONTROL: - unused = true; - break; - - case NSFB_EVENT_MOVE_RELATIVE: - fbtk_warp_pointer(root, event->value.vector.x, event->value.vector.y, true); - break; - - case NSFB_EVENT_MOVE_ABSOLUTE: - fbtk_warp_pointer(root, event->value.vector.x, event->value.vector.y, false); - break; - - default: - break; - - } + } while (event->type == NSFB_EVENT_MOVE_RELATIVE || + event->type == NSFB_EVENT_MOVE_ABSOLUTE); return unused; } |