window: Add enter/leave handlers
This commit is contained in:
+30
-8
@@ -112,6 +112,8 @@ struct window {
|
|||||||
window_button_handler_t button_handler;
|
window_button_handler_t button_handler;
|
||||||
window_keyboard_focus_handler_t keyboard_focus_handler;
|
window_keyboard_focus_handler_t keyboard_focus_handler;
|
||||||
window_motion_handler_t motion_handler;
|
window_motion_handler_t motion_handler;
|
||||||
|
window_enter_handler_t enter_handler;
|
||||||
|
window_leave_handler_t leave_handler;
|
||||||
|
|
||||||
void *user_data;
|
void *user_data;
|
||||||
struct wl_list link;
|
struct wl_list link;
|
||||||
@@ -1180,6 +1182,15 @@ window_handle_pointer_focus(void *data,
|
|||||||
struct window *window;
|
struct window *window;
|
||||||
int pointer;
|
int pointer;
|
||||||
|
|
||||||
|
window = input->pointer_focus;
|
||||||
|
if (window && window->surface != surface) {
|
||||||
|
if (window->leave_handler)
|
||||||
|
window->leave_handler(window, input,
|
||||||
|
time, window->user_data);
|
||||||
|
input->pointer_focus = NULL;
|
||||||
|
input->current_pointer_image = POINTER_UNSET;
|
||||||
|
}
|
||||||
|
|
||||||
if (surface) {
|
if (surface) {
|
||||||
input->pointer_focus = wl_surface_get_user_data(surface);
|
input->pointer_focus = wl_surface_get_user_data(surface);
|
||||||
window = input->pointer_focus;
|
window = input->pointer_focus;
|
||||||
@@ -1190,16 +1201,13 @@ window_handle_pointer_focus(void *data,
|
|||||||
input->sy = sy;
|
input->sy = sy;
|
||||||
|
|
||||||
pointer = POINTER_LEFT_PTR;
|
pointer = POINTER_LEFT_PTR;
|
||||||
if (window->motion_handler)
|
if (window->enter_handler)
|
||||||
pointer = (*window->motion_handler)(window,
|
pointer = window->enter_handler(window, input,
|
||||||
input, time,
|
time, sx, sy,
|
||||||
x, y, sx, sy,
|
window->user_data);
|
||||||
window->user_data);
|
|
||||||
|
|
||||||
set_pointer_image(input, time, pointer);
|
set_pointer_image(input, time, pointer);
|
||||||
} else {
|
|
||||||
input->pointer_focus = NULL;
|
|
||||||
input->current_pointer_image = POINTER_UNSET;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1462,6 +1470,20 @@ window_set_motion_handler(struct window *window,
|
|||||||
window->motion_handler = handler;
|
window->motion_handler = handler;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
window_set_enter_handler(struct window *window,
|
||||||
|
window_enter_handler_t handler)
|
||||||
|
{
|
||||||
|
window->enter_handler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
window_set_leave_handler(struct window *window,
|
||||||
|
window_leave_handler_t handler)
|
||||||
|
{
|
||||||
|
window->leave_handler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
window_set_keyboard_focus_handler(struct window *window,
|
window_set_keyboard_focus_handler(struct window *window,
|
||||||
window_keyboard_focus_handler_t handler)
|
window_keyboard_focus_handler_t handler)
|
||||||
|
|||||||
@@ -132,6 +132,13 @@ typedef void (*window_button_handler_t)(struct window *window,
|
|||||||
struct input *input, uint32_t time,
|
struct input *input, uint32_t time,
|
||||||
int button, int state, void *data);
|
int button, int state, void *data);
|
||||||
|
|
||||||
|
typedef int (*window_enter_handler_t)(struct window *window,
|
||||||
|
struct input *input, uint32_t time,
|
||||||
|
int32_t x, int32_t y, void *data);
|
||||||
|
typedef int (*window_leave_handler_t)(struct window *window,
|
||||||
|
struct input *input, uint32_t time,
|
||||||
|
void *data);
|
||||||
|
|
||||||
typedef int (*window_motion_handler_t)(struct window *window,
|
typedef int (*window_motion_handler_t)(struct window *window,
|
||||||
struct input *input, uint32_t time,
|
struct input *input, uint32_t time,
|
||||||
int32_t x, int32_t y,
|
int32_t x, int32_t y,
|
||||||
@@ -231,6 +238,13 @@ void
|
|||||||
window_set_motion_handler(struct window *window,
|
window_set_motion_handler(struct window *window,
|
||||||
window_motion_handler_t handler);
|
window_motion_handler_t handler);
|
||||||
|
|
||||||
|
void
|
||||||
|
window_set_enter_handler(struct window *window,
|
||||||
|
window_enter_handler_t handler);
|
||||||
|
void
|
||||||
|
window_set_leave_handler(struct window *window,
|
||||||
|
window_leave_handler_t handler);
|
||||||
|
|
||||||
void
|
void
|
||||||
window_set_keyboard_focus_handler(struct window *window,
|
window_set_keyboard_focus_handler(struct window *window,
|
||||||
window_keyboard_focus_handler_t handler);
|
window_keyboard_focus_handler_t handler);
|
||||||
|
|||||||
Reference in New Issue
Block a user