summaryrefslogtreecommitdiff
path: root/framebuffer
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2012-07-26 22:38:38 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2012-07-26 22:38:38 +0100
commit514bee5786a4506922e3e80a0e4a8672dee7daee (patch)
treed4f8822b6048a9600fd241a62b560fd9522db390 /framebuffer
parent8660bed543b54c114fdf809c4c479adf58a2a739 (diff)
downloadnetsurf-514bee5786a4506922e3e80a0e4a8672dee7daee.tar.gz
netsurf-514bee5786a4506922e3e80a0e4a8672dee7daee.tar.bz2
Handle consecutive queued mouse move events together. Reduces pointer lag when busy.
Diffstat (limited to 'framebuffer')
-rw-r--r--framebuffer/fbtk/event.c64
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;
}