From: Bryce Harrington Date: Tue, 23 Aug 2016 20:40:30 +0000 (-0700) Subject: libweston-desktop: Add listener and API to drop the idle inhibitor X-Git-Tag: upstream/5.0.0~866 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e7069bcf93b2ffcf04b4128cb468fe83dc18baea;p=platform%2Fupstream%2Fweston.git libweston-desktop: Add listener and API to drop the idle inhibitor Listen for the drop_idle_inhibitor signal from libweston, and propagate the call to a corresponding libweston-desktop API. --- diff --git a/libweston-desktop/internal.h b/libweston-desktop/internal.h index a9c974b..e41c1e5 100644 --- a/libweston-desktop/internal.h +++ b/libweston-desktop/internal.h @@ -47,6 +47,9 @@ void weston_desktop_api_surface_removed(struct weston_desktop *desktop, struct weston_desktop_surface *surface); void +weston_desktop_api_surface_drop_idle_inhibitor(struct weston_desktop *desktop, + struct weston_desktop_surface *surface); +void weston_desktop_api_committed(struct weston_desktop *desktop, struct weston_desktop_surface *surface, int32_t sx, int32_t sy); diff --git a/libweston-desktop/libweston-desktop.c b/libweston-desktop/libweston-desktop.c index 0ee1139..43ac081 100644 --- a/libweston-desktop/libweston-desktop.c +++ b/libweston-desktop/libweston-desktop.c @@ -61,6 +61,7 @@ weston_desktop_create(struct weston_compositor *compositor, assert(api->surface_added); assert(api->surface_removed); + /* assert(api->surface_drop_idle_inhibitor); -- optional, for now */ desktop = zalloc(sizeof(struct weston_desktop)); desktop->compositor = compositor; @@ -166,6 +167,13 @@ weston_desktop_api_surface_removed(struct weston_desktop *desktop, } void +weston_desktop_api_surface_drop_idle_inhibitor(struct weston_desktop *desktop, + struct weston_desktop_surface *surface) +{ + desktop->api.surface_drop_idle_inhibitor(surface, desktop->user_data); +} + +void weston_desktop_api_committed(struct weston_desktop *desktop, struct weston_desktop_surface *surface, int32_t sx, int32_t sy) diff --git a/libweston-desktop/libweston-desktop.h b/libweston-desktop/libweston-desktop.h index f77ab55..19dc271 100644 --- a/libweston-desktop/libweston-desktop.h +++ b/libweston-desktop/libweston-desktop.h @@ -59,6 +59,8 @@ struct weston_desktop_api { void *user_data); void (*surface_removed)(struct weston_desktop_surface *surface, void *user_data); + void (*surface_drop_idle_inhibitor)(struct weston_desktop_surface *surface, + void *user_data); void (*committed)(struct weston_desktop_surface *surface, int32_t sx, int32_t sy, void *user_data); void (*show_window_menu)(struct weston_desktop_surface *surface, diff --git a/libweston-desktop/surface.c b/libweston-desktop/surface.c index 2205107..b607567 100644 --- a/libweston-desktop/surface.c +++ b/libweston-desktop/surface.c @@ -54,6 +54,7 @@ struct weston_desktop_surface { struct weston_position buffer_move; struct wl_listener surface_commit_listener; struct wl_listener surface_destroy_listener; + struct wl_listener surface_drop_idle_inhibitor_listener; struct wl_listener client_destroy_listener; struct wl_list children_list; @@ -130,6 +131,7 @@ weston_desktop_surface_destroy(struct weston_desktop_surface *surface) wl_list_remove(&surface->surface_commit_listener.link); wl_list_remove(&surface->surface_destroy_listener.link); + wl_list_remove(&surface->surface_drop_idle_inhibitor_listener.link); wl_list_remove(&surface->client_destroy_listener.link); if (!wl_list_empty(&surface->resource_list)) { @@ -218,6 +220,20 @@ weston_desktop_surface_resource_destroy(struct wl_resource *resource) } static void +weston_desktop_surface_drop_idle_inhibitor(struct wl_listener *listener, + void *data) +{ + struct weston_desktop_surface *surface = + wl_container_of(listener, surface, surface_drop_idle_inhibitor_listener); + struct weston_desktop *desktop = surface->desktop; + + printf("weston_desktop_surface_drop_idle_inhibitor\n"); + weston_desktop_api_surface_drop_idle_inhibitor(desktop, surface); + // TODO: Need to call shell.c's desktop_surface_drop_idle_inhibitor + //shell_desktop_api.surface_drop_idle_inhibitor(surface, NULL /*data?*/); +} + +static void weston_desktop_surface_committed(struct weston_surface *wsurface, int32_t sx, int32_t sy) { @@ -277,6 +293,10 @@ weston_desktop_surface_create(struct weston_desktop *desktop, weston_desktop_surface_surface_destroyed; wl_signal_add(&surface->surface->destroy_signal, &surface->surface_destroy_listener); + surface->surface_drop_idle_inhibitor_listener.notify = + weston_desktop_surface_drop_idle_inhibitor; + wl_signal_add(&surface->surface->drop_idle_inhibitor_signal, + &surface->surface_drop_idle_inhibitor_listener); wl_list_init(&surface->client_link); wl_list_init(&surface->resource_list);