Move focus tracking surface destroy callbacks into core
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 7 Dec 2010 02:35:19 +0000 (21:35 -0500)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 7 Dec 2010 02:35:19 +0000 (21:35 -0500)
compositor/compositor.c
wayland/wayland-server.c
wayland/wayland-server.h

index fa60548..88b323f 100644 (file)
@@ -1161,37 +1161,12 @@ static const struct wl_drag_interface drag_interface = {
        drag_cancel,
 };
 
-static void
-lose_pointer_focus(struct wl_listener *listener,
-                  struct wl_surface *surface)
-{
-       struct wlsc_input_device *device =
-               container_of(listener, struct wlsc_input_device,
-                            input_device.pointer_focus_listener);
-       uint32_t time;
-
-       time = wl_display_get_time(wl_client_get_display(surface->client));
-       wl_input_device_set_pointer_focus(&device->input_device,
-                                         NULL, time, 0, 0, 0, 0);
-}
-
-static void
-lose_keyboard_focus(struct wl_listener *listener,
-                   struct wl_surface *surface)
-{
-       struct wlsc_input_device *device =
-               container_of(listener, struct wlsc_input_device,
-                            input_device.keyboard_focus_listener);
-       uint32_t time;
-
-       time = wl_display_get_time(wl_client_get_display(surface->client));
-       wl_input_device_set_keyboard_focus(&device->input_device, NULL, time);
-}
-
 void
 wlsc_input_device_init(struct wlsc_input_device *device,
                       struct wlsc_compositor *ec)
 {
+       wl_input_device_init(&device->input_device);
+
        device->input_device.object.interface = &wl_input_device_interface;
        device->input_device.object.implementation =
                (void (**)(void)) &input_device_interface;
@@ -1206,11 +1181,6 @@ wlsc_input_device_init(struct wlsc_input_device *device,
        device->hotspot_x = 16;
        device->hotspot_y = 16;
 
-       wl_list_init(&device->input_device.pointer_focus_listener.link);
-       device->input_device.pointer_focus_listener.func = lose_pointer_focus;
-       wl_list_init(&device->input_device.keyboard_focus_listener.link);
-       device->input_device.keyboard_focus_listener.func = lose_keyboard_focus;
-
        wl_list_insert(ec->input_device_list.prev, &device->link);
 
        wlsc_input_device_set_pointer_image(device, WLSC_POINTER_LEFT_PTR);
index 7a0268f..ad0c3af 100644 (file)
@@ -317,6 +317,41 @@ wl_client_destroy(struct wl_client *client)
        free(client);
 }
 
+static void
+lose_pointer_focus(struct wl_listener *listener,
+                  struct wl_surface *surface)
+{
+       struct wl_input_device *device =
+               container_of(listener, struct wl_input_device,
+                            pointer_focus_listener);
+       uint32_t time;
+
+       time = wl_display_get_time(wl_client_get_display(surface->client));
+       wl_input_device_set_pointer_focus(device, NULL, time, 0, 0, 0, 0);
+}
+
+static void
+lose_keyboard_focus(struct wl_listener *listener,
+                   struct wl_surface *surface)
+{
+       struct wl_input_device *device =
+               container_of(listener, struct wl_input_device,
+                            keyboard_focus_listener);
+       uint32_t time;
+
+       time = wl_display_get_time(wl_client_get_display(surface->client));
+       wl_input_device_set_keyboard_focus(device, NULL, time);
+}
+
+WL_EXPORT void
+wl_input_device_init(struct wl_input_device *device)
+{
+       wl_list_init(&device->pointer_focus_listener.link);
+       device->pointer_focus_listener.func = lose_pointer_focus;
+       wl_list_init(&device->keyboard_focus_listener.link);
+       device->keyboard_focus_listener.func = lose_keyboard_focus;
+}
+
 WL_EXPORT void
 wl_input_device_set_pointer_focus(struct wl_input_device *device,
                                  struct wl_surface *surface,
index 2b07261..9bedf73 100644 (file)
@@ -195,6 +195,9 @@ void
 wl_resource_destroy(struct wl_resource *resource, struct wl_client *client);
 
 void
+wl_input_device_init(struct wl_input_device *device);
+
+void
 wl_input_device_set_pointer_focus(struct wl_input_device *device,
                                  struct wl_surface *surface,
                                  uint32_t time,