diff options
author | Bryce Harrington <bryce@osg.samsung.com> | 2016-08-23 13:40:30 -0700 |
---|---|---|
committer | Bryce Harrington <bryce@osg.samsung.com> | 2016-08-29 18:36:13 -0700 |
commit | e7069bcf93b2ffcf04b4128cb468fe83dc18baea (patch) | |
tree | 66667b16f38c6b22b80c2fcdb8665fd8117f1d31 /libweston-desktop | |
parent | ca5b62426a97b4607d60eaf1154881ac8c1ac994 (diff) |
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.
Diffstat (limited to 'libweston-desktop')
-rw-r--r-- | libweston-desktop/internal.h | 3 | ||||
-rw-r--r-- | libweston-desktop/libweston-desktop.c | 8 | ||||
-rw-r--r-- | libweston-desktop/libweston-desktop.h | 2 | ||||
-rw-r--r-- | libweston-desktop/surface.c | 20 |
4 files changed, 33 insertions, 0 deletions
diff --git a/libweston-desktop/internal.h b/libweston-desktop/internal.h index a9c974b0..e41c1e5c 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 0ee11393..43ac081c 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 f77ab55b..19dc271c 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 2205107b..b6075673 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); |