commit ce14c72
Michael Forney
·
2014-02-27 04:07:07 +0000 UTC
parent 9eefeab
pointer: Pass button press structure to pointer handler
3 files changed,
+24,
-18
+20,
-14
1@@ -155,19 +155,18 @@ void pointer_set_cursor(struct pointer * pointer, uint32_t id)
2 view_attach(&pointer->cursor.view, pointer->cursor.internal_buffer);
3 }
4
5-static bool client_handle_button(struct pointer_handler * handler,
6- uint32_t time, uint32_t button, uint32_t state)
7+static bool client_handle_button
8+ (struct pointer_handler * handler, uint32_t time,
9+ struct press * press, uint32_t state)
10 {
11 struct pointer * pointer
12 = CONTAINER_OF(handler, typeof(*pointer), client_handler);
13- uint32_t serial;
14
15 if (!pointer->focus.resource)
16 return false;
17
18- serial = wl_display_get_serial(swc.display);
19- wl_pointer_send_button(pointer->focus.resource, serial, time,
20- button, state);
21+ wl_pointer_send_button(pointer->focus.resource, press->serial, time,
22+ press->value, state);
23
24 return true;
25 }
26@@ -364,27 +363,34 @@ void pointer_handle_button(struct pointer * pointer, uint32_t time,
27 {
28 if (button->press.value == value)
29 {
30- swc_array_remove(&pointer->buttons, button, sizeof *button);
31-
32- if (button->handler->button)
33+ if (button->handler)
34 {
35+ button->press.serial = serial;
36 button->handler->button(button->handler, time,
37- value, state);
38+ &button->press, state);
39 }
40
41+ swc_array_remove(&pointer->buttons, button, sizeof *button);
42 break;
43 }
44 }
45 }
46 else
47 {
48+ button = wl_array_add(&pointer->buttons, sizeof *button);
49+
50+ if (!button)
51+ return;
52+
53+ button->press.value = value;
54+ button->press.serial = serial;
55+ button->handler = NULL;
56+
57 wl_list_for_each(handler, &pointer->handlers, link)
58 {
59- if (handler->button && handler->button(handler, time, value, state))
60+ if (handler->button && handler->button(handler, time,
61+ &button->press, state))
62 {
63- button = wl_array_add(&pointer->buttons, sizeof *button);
64- button->press.value = value;
65- button->press.serial = serial;
66 button->handler = handler;
67 break;
68 }
+1,
-1
1@@ -42,7 +42,7 @@ struct pointer_handler
2 bool (* motion)(struct pointer_handler * handler, uint32_t time,
3 wl_fixed_t x, wl_fixed_t y);
4 bool (* button)(struct pointer_handler * handler, uint32_t time,
5- uint32_t button, uint32_t state);
6+ struct press * press, uint32_t state);
7 bool (* axis)(struct pointer_handler * handler, uint32_t time,
8 enum wl_pointer_axis axis, wl_fixed_t amount);
9
+3,
-3
1@@ -204,7 +204,7 @@ static bool resize_motion(struct pointer_handler * handler, uint32_t time,
2 }
3
4 static bool handle_button(struct pointer_handler * handler, uint32_t time,
5- uint32_t button, uint32_t state)
6+ struct press * press, uint32_t state)
7 {
8 struct window_pointer_interaction * interaction
9 = CONTAINER_OF(handler, typeof(*interaction), handler);
10@@ -215,8 +215,8 @@ static bool handle_button(struct pointer_handler * handler, uint32_t time,
11 return false;
12 }
13
14- interaction->original_handler->button
15- (interaction->original_handler, time, button, state);
16+ interaction->original_handler->button(interaction->original_handler, time,
17+ press, state);
18 wl_list_remove(&handler->link);
19
20 return true;