window: Move button handler to widget
diff --git a/clients/window.c b/clients/window.c
index 6e92e76..70642a4 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -130,7 +130,6 @@
window_resize_handler_t resize_handler;
window_redraw_handler_t redraw_handler;
window_key_handler_t key_handler;
- window_button_handler_t button_handler;
window_keyboard_focus_handler_t keyboard_focus_handler;
window_data_handler_t data_handler;
window_drop_handler_t drop_handler;
@@ -153,6 +152,7 @@
widget_enter_handler_t enter_handler;
widget_leave_handler_t leave_handler;
widget_motion_handler_t motion_handler;
+ widget_button_handler_t button_handler;
void *user_data;
};
@@ -1127,6 +1127,13 @@
}
void
+widget_set_button_handler(struct widget *widget,
+ widget_button_handler_t handler)
+{
+ widget->button_handler = handler;
+}
+
+void
widget_schedule_redraw(struct widget *widget)
{
window_schedule_redraw(widget->window);
@@ -1349,6 +1356,7 @@
location = get_pointer_location(window, input->sx, input->sy);
+ widget = window->focus_widget;
if (window->display->shell && button == BTN_LEFT && state == 1) {
switch (location) {
case WINDOW_TITLEBAR:
@@ -1373,11 +1381,11 @@
location);
break;
case WINDOW_CLIENT_AREA:
- if (window->button_handler)
- (*window->button_handler)(window,
+ if (widget && widget->button_handler)
+ (*widget->button_handler)(widget,
input, time,
button, state,
- window->user_data);
+ widget->user_data);
break;
}
} else if (button == BTN_RIGHT && state == 1) {
@@ -1393,19 +1401,19 @@
window_schedule_redraw(window->menu);
break;
case WINDOW_CLIENT_AREA:
- if (window->button_handler)
- (*window->button_handler)(window,
+ if (widget && widget->button_handler)
+ (*widget->button_handler)(widget,
input, time,
button, state,
- window->user_data);
+ widget->user_data);
break;
}
} else {
- if (window->button_handler)
- (*window->button_handler)(window,
+ if (widget && widget->button_handler)
+ (*widget->button_handler)(widget,
input, time,
button, state,
- window->user_data);
+ widget->user_data);
}
if (window->focus_widget &&
@@ -2043,13 +2051,6 @@
}
void
-window_set_button_handler(struct window *window,
- window_button_handler_t handler)
-{
- window->button_handler = handler;
-}
-
-void
window_set_keyboard_focus_handler(struct window *window,
window_keyboard_focus_handler_t handler)
{
@@ -2241,12 +2242,13 @@
}
static void
-menu_button_handler(struct window *window,
+menu_button_handler(struct widget *widget,
struct input *input, uint32_t time,
int button, int state, void *data)
{
- struct menu *menu = data;
+ struct window *window = data;
+ struct menu *menu = window_get_user_data(window);
/* Either relase after press-drag-release or click-motion-click. */
if (state == 0 && time - menu->time > 500) {
@@ -2333,13 +2335,13 @@
window->parent->shell_surface,
window->x, window->y, 0);
- window_set_button_handler(window, menu_button_handler);
window_set_redraw_handler(window, menu_redraw_handler);
window_set_user_data(window, menu);
widget_set_enter_handler(window->widget, menu_enter_handler);
widget_set_leave_handler(window->widget, menu_leave_handler);
widget_set_motion_handler(window->widget, menu_motion_handler);
+ widget_set_button_handler(window->widget, menu_button_handler);
return window;
}