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 }