commit 454b971
Michael Forney
·
2017-02-06 19:52:05 +0000 UTC
parent 0a5b783
pointer: Set cursor to left_ptr when pointer has no focus To do this, make input_focus call enter/leave even if resource or view is NULL.
3 files changed,
+12,
-7
+2,
-7
1@@ -37,15 +37,12 @@ focus(struct input_focus *input_focus, struct compositor_view *view)
2
3 client = wl_resource_get_client(view->surface->resource);
4 resource = wl_resource_find_for_client(&input_focus->resources, client);
5-
6 wl_signal_add(&view->destroy_signal, &input_focus->view_destroy_listener);
7-
8- if (resource)
9- input_focus->handler->enter(input_focus->handler, resource, view);
10 }
11
12 input_focus->view = view;
13 input_focus->resource = resource;
14+ input_focus->handler->enter(input_focus->handler, resource, view);
15 }
16
17 static inline void
18@@ -53,9 +50,7 @@ unfocus(struct input_focus *input_focus)
19 {
20 if (input_focus->view)
21 wl_list_remove(&input_focus->view_destroy_listener.link);
22-
23- if (input_focus->resource)
24- input_focus->handler->leave(input_focus->handler, input_focus->resource, input_focus->view);
25+ input_focus->handler->leave(input_focus->handler, input_focus->resource, input_focus->view);
26 }
27
28 static void
+4,
-0
1@@ -50,6 +50,8 @@ enter(struct input_focus_handler *handler, struct wl_resource *resource, struct
2 struct keyboard_modifier_state *state = &keyboard->modifier_state;
3 uint32_t serial;
4
5+ if (!resource)
6+ return;
7 serial = wl_display_next_serial(swc.display);
8 wl_keyboard_send_modifiers(resource, serial, state->depressed, state->locked, state->latched, state->group);
9 wl_keyboard_send_enter(resource, serial, view->surface->resource, &keyboard->client_keys);
10@@ -60,6 +62,8 @@ leave(struct input_focus_handler *handler, struct wl_resource *resource, struct
11 {
12 uint32_t serial;
13
14+ if (!resource)
15+ return;
16 serial = wl_display_next_serial(swc.display);
17 wl_keyboard_send_leave(resource, serial, view->surface->resource);
18 }
+6,
-0
1@@ -41,6 +41,10 @@ enter(struct input_focus_handler *handler, struct wl_resource *resource, struct
2 uint32_t serial;
3 wl_fixed_t surface_x, surface_y;
4
5+ if (!resource) {
6+ pointer_set_cursor(pointer, cursor_left_ptr);
7+ return;
8+ }
9 serial = wl_display_next_serial(swc.display);
10 surface_x = pointer->x - wl_fixed_from_int(view->base.geometry.x);
11 surface_y = pointer->y - wl_fixed_from_int(view->base.geometry.y);
12@@ -52,6 +56,8 @@ leave(struct input_focus_handler *handler, struct wl_resource *resource, struct
13 {
14 uint32_t serial;
15
16+ if (!resource)
17+ return;
18 serial = wl_display_next_serial(swc.display);
19 wl_pointer_send_leave(resource, serial, view->surface->resource);
20 }