X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Finput.c;h=ad4977c86a377aa06595541d208793f6a0de7efa;hb=5ec94158612e8ba9aed0de43c9f5f40d6f61f0cd;hp=64d23ef308876a843a6056c29123913c6ec52cde;hpb=3ba840cd3a5a2fa1966b01ef286de0347e64aa46;p=src%2Fagl-compositor.git diff --git a/src/input.c b/src/input.c index 64d23ef..ad4977c 100644 --- a/src/input.c +++ b/src/input.c @@ -32,20 +32,7 @@ #include "ivi-compositor.h" #include "shared/helpers.h" -struct ivi_shell_seat { - struct weston_seat *seat; - struct weston_surface *focused_surface; - - bool hide_cursor; - bool new_caps_sent; - - struct wl_listener seat_destroy_listener; - struct wl_listener caps_changed_listener; - struct wl_listener keyboard_focus_listener; - struct wl_listener pointer_focus_listener; -}; - -static struct ivi_surface * +struct ivi_surface * get_ivi_shell_surface(struct weston_surface *surface) { struct weston_desktop_surface *desktop_surface = @@ -72,41 +59,35 @@ ivi_shell_seat_handle_destroy(struct wl_listener *listener, void *data) free(shseat); } -static struct ivi_shell_seat * +struct ivi_shell_seat * get_ivi_shell_seat(struct weston_seat *seat) { struct wl_listener *listener; + if (!seat) + return NULL; + + listener = wl_signal_get(&seat->destroy_signal, ivi_shell_seat_handle_destroy); - assert(listener != NULL); + if (!listener) + return NULL; return container_of(listener, struct ivi_shell_seat, seat_destroy_listener); } - -static void -ivi_shell_seat_handle_keyboard_focus(struct wl_listener *listener, void *data) +struct weston_seat * +get_ivi_shell_weston_first_seat(struct ivi_compositor *ivi) { - struct weston_keyboard *keyboard = data; - struct ivi_shell_seat *shseat = get_ivi_shell_seat(keyboard->seat); - - if (shseat->focused_surface) { - struct ivi_surface *surf = - get_ivi_shell_surface(shseat->focused_surface); - if (surf && --surf->focus_count == 0) - weston_desktop_surface_set_activated(surf->dsurface, false); - } + struct wl_list *node; + struct weston_compositor *compositor = ivi->compositor; - shseat->focused_surface = weston_surface_get_main_surface(keyboard->focus); + if (wl_list_empty(&compositor->seat_list)) + return NULL; - if (shseat->focused_surface) { - struct ivi_surface *surf = - get_ivi_shell_surface(shseat->focused_surface); - if (surf && surf->focus_count++ == 0) - weston_desktop_surface_set_activated(surf->dsurface, true); - } + node = compositor->seat_list.next; + return container_of(node, struct weston_seat, link); } static void @@ -127,7 +108,7 @@ ivi_shell_seat_handle_pointer_focus(struct wl_listener *listener, void *data) /* remove the POINTER capability such that the client will not install * a cursor surface */ - if (shseat->hide_cursor && !shseat->new_caps_sent && resources) { + if (shseat->disable_cursor && !shseat->new_caps_sent && resources) { caps &= ~WL_SEAT_CAPABILITY_POINTER; wl_resource_for_each(resource, &pointer->seat->base_resource_list) { wl_seat_send_capabilities(resource, caps); @@ -139,13 +120,11 @@ ivi_shell_seat_handle_pointer_focus(struct wl_listener *listener, void *data) static void ivi_shell_seat_handle_caps_changed(struct wl_listener *listener, void *data) { - struct weston_keyboard *keyboard; struct weston_pointer *pointer; struct ivi_shell_seat *shseat; shseat = container_of(listener, struct ivi_shell_seat, caps_changed_listener); - keyboard = weston_seat_get_keyboard(shseat->seat); pointer = weston_seat_get_pointer(shseat->seat); if (pointer && wl_list_empty(&shseat->pointer_focus_listener.link)) { @@ -155,19 +134,10 @@ ivi_shell_seat_handle_caps_changed(struct wl_listener *listener, void *data) wl_list_remove(&shseat->pointer_focus_listener.link); wl_list_init(&shseat->pointer_focus_listener.link); } - - if (keyboard && - wl_list_empty(&shseat->keyboard_focus_listener.link)) { - wl_signal_add(&keyboard->focus_signal, - &shseat->keyboard_focus_listener); - } else if (!keyboard) { - wl_list_remove(&shseat->keyboard_focus_listener.link); - wl_list_init(&shseat->keyboard_focus_listener.link); - } } static struct ivi_shell_seat * -ivi_shell_seat_create(struct weston_seat *seat, bool hide_cursor) +ivi_shell_seat_create(struct weston_seat *seat, bool disable_cursor) { struct ivi_shell_seat *shseat; @@ -178,14 +148,12 @@ ivi_shell_seat_create(struct weston_seat *seat, bool hide_cursor) } shseat->seat = seat; - shseat->hide_cursor = hide_cursor; + shseat->disable_cursor = disable_cursor; shseat->new_caps_sent = false; shseat->seat_destroy_listener.notify = ivi_shell_seat_handle_destroy; wl_signal_add(&seat->destroy_signal, &shseat->seat_destroy_listener); - shseat->keyboard_focus_listener.notify = - ivi_shell_seat_handle_keyboard_focus; wl_list_init(&shseat->keyboard_focus_listener.link); shseat->pointer_focus_listener.notify = @@ -209,8 +177,8 @@ ivi_shell_handle_seat_created(struct wl_listener *listener, void *data) struct ivi_compositor *ivi = container_of(listener, struct ivi_compositor, seat_created_listener); - weston_log("Cursor is %s\n", ivi->hide_cursor ? "set" : "not set"); - ivi_shell_seat_create(seat, ivi->hide_cursor); + weston_log("Cursor is %s\n", ivi->disable_cursor ? "disabled" : "not disabled"); + ivi_shell_seat_create(seat, ivi->disable_cursor); } /* @@ -235,9 +203,9 @@ ivi_seat_init(struct ivi_compositor *ivi) struct weston_seat *seat; wl_list_for_each(seat, &ec->seat_list, link) { - weston_log("Seat %p, cursor is %s\n", seat, ivi->hide_cursor ? - "set" : "not set"); - ivi_shell_seat_create(seat, ivi->hide_cursor); + weston_log("Seat %p, cursor is %s\n", seat, ivi->disable_cursor ? + "not disabled" : "disabled"); + ivi_shell_seat_create(seat, ivi->disable_cursor); } ivi->seat_created_listener.notify = ivi_shell_handle_seat_created;