summaryrefslogtreecommitdiff
path: root/libweston-desktop
diff options
context:
space:
mode:
authorBryce Harrington <bryce@osg.samsung.com>2016-08-23 13:40:30 -0700
committerBryce Harrington <bryce@osg.samsung.com>2016-08-29 18:36:13 -0700
commite7069bcf93b2ffcf04b4128cb468fe83dc18baea (patch)
tree66667b16f38c6b22b80c2fcdb8665fd8117f1d31 /libweston-desktop
parentca5b62426a97b4607d60eaf1154881ac8c1ac994 (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.h3
-rw-r--r--libweston-desktop/libweston-desktop.c8
-rw-r--r--libweston-desktop/libweston-desktop.h2
-rw-r--r--libweston-desktop/surface.c20
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);