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.
This commit is contained in:
Bryce Harrington 2016-08-23 13:40:30 -07:00
parent ca5b62426a
commit e7069bcf93
4 changed files with 33 additions and 0 deletions

View File

@ -47,6 +47,9 @@ void
weston_desktop_api_surface_removed(struct weston_desktop *desktop, weston_desktop_api_surface_removed(struct weston_desktop *desktop,
struct weston_desktop_surface *surface); struct weston_desktop_surface *surface);
void 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, weston_desktop_api_committed(struct weston_desktop *desktop,
struct weston_desktop_surface *surface, struct weston_desktop_surface *surface,
int32_t sx, int32_t sy); int32_t sx, int32_t sy);

View File

@ -61,6 +61,7 @@ weston_desktop_create(struct weston_compositor *compositor,
assert(api->surface_added); assert(api->surface_added);
assert(api->surface_removed); assert(api->surface_removed);
/* assert(api->surface_drop_idle_inhibitor); -- optional, for now */
desktop = zalloc(sizeof(struct weston_desktop)); desktop = zalloc(sizeof(struct weston_desktop));
desktop->compositor = compositor; desktop->compositor = compositor;
@ -165,6 +166,13 @@ weston_desktop_api_surface_removed(struct weston_desktop *desktop,
desktop->api.surface_removed(surface, desktop->user_data); desktop->api.surface_removed(surface, desktop->user_data);
} }
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 void
weston_desktop_api_committed(struct weston_desktop *desktop, weston_desktop_api_committed(struct weston_desktop *desktop,
struct weston_desktop_surface *surface, struct weston_desktop_surface *surface,

View File

@ -59,6 +59,8 @@ struct weston_desktop_api {
void *user_data); void *user_data);
void (*surface_removed)(struct weston_desktop_surface *surface, void (*surface_removed)(struct weston_desktop_surface *surface,
void *user_data); void *user_data);
void (*surface_drop_idle_inhibitor)(struct weston_desktop_surface *surface,
void *user_data);
void (*committed)(struct weston_desktop_surface *surface, void (*committed)(struct weston_desktop_surface *surface,
int32_t sx, int32_t sy, void *user_data); int32_t sx, int32_t sy, void *user_data);
void (*show_window_menu)(struct weston_desktop_surface *surface, void (*show_window_menu)(struct weston_desktop_surface *surface,

View File

@ -54,6 +54,7 @@ struct weston_desktop_surface {
struct weston_position buffer_move; struct weston_position buffer_move;
struct wl_listener surface_commit_listener; struct wl_listener surface_commit_listener;
struct wl_listener surface_destroy_listener; struct wl_listener surface_destroy_listener;
struct wl_listener surface_drop_idle_inhibitor_listener;
struct wl_listener client_destroy_listener; struct wl_listener client_destroy_listener;
struct wl_list children_list; 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_commit_listener.link);
wl_list_remove(&surface->surface_destroy_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); wl_list_remove(&surface->client_destroy_listener.link);
if (!wl_list_empty(&surface->resource_list)) { if (!wl_list_empty(&surface->resource_list)) {
@ -217,6 +219,20 @@ weston_desktop_surface_resource_destroy(struct wl_resource *resource)
weston_desktop_surface_destroy(surface); weston_desktop_surface_destroy(surface);
} }
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 static void
weston_desktop_surface_committed(struct weston_surface *wsurface, weston_desktop_surface_committed(struct weston_surface *wsurface,
int32_t sx, int32_t sy) int32_t sx, int32_t sy)
@ -277,6 +293,10 @@ weston_desktop_surface_create(struct weston_desktop *desktop,
weston_desktop_surface_surface_destroyed; weston_desktop_surface_surface_destroyed;
wl_signal_add(&surface->surface->destroy_signal, wl_signal_add(&surface->surface->destroy_signal,
&surface->surface_destroy_listener); &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->client_link);
wl_list_init(&surface->resource_list); wl_list_init(&surface->resource_list);