[PATCH weston v5 4/7] libweston: Add a signal to fire when the idle inhibitor is dropped

Bryce Harrington bryce at osg.samsung.com
Tue Aug 30 01:34:50 UTC 2016


Signed-off-by: Bryce Harrington <bryce at osg.samsung.com>
---
 libweston/compositor.c | 23 +++++++++++++++++------
 libweston/compositor.h |  1 +
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/libweston/compositor.c b/libweston/compositor.c
index 92f74aa..f503933 100644
--- a/libweston/compositor.c
+++ b/libweston/compositor.c
@@ -459,6 +459,7 @@ weston_surface_create(struct weston_compositor *compositor)
 
 	wl_signal_init(&surface->destroy_signal);
 	wl_signal_init(&surface->commit_signal);
+	wl_signal_init(&surface->drop_idle_inhibitor_signal);
 
 	surface->compositor = compositor;
 	surface->ref_count = 1;
@@ -4729,23 +4730,33 @@ struct weston_idle_inhibitor {
 	struct weston_surface *surface;
 };
 
+/* Called when the client requests destruction of the idle inhibitor */
 static void
-destroy_idle_inhibitor(struct wl_resource *resource)
+idle_inhibitor_destroy(struct wl_client *client, struct wl_resource *resource)
 {
 	struct weston_idle_inhibitor *inhibitor = wl_resource_get_user_data(resource);
 
-	inhibitor->surface = NULL;
-	free(inhibitor);
+	assert(inhibitor);
+
+	inhibitor->surface->inhibit_idling = false;
+
+	// Notify to re-queue any idle behaviors
+	wl_signal_emit(&inhibitor->surface->drop_idle_inhibitor_signal,
+		       inhibitor->surface);
+
+	weston_log("idle_inhibitor_destroy\n");
 }
 
+/* Called when the idle inhibitor is destroyed on the server-side */
 static void
-idle_inhibitor_destroy(struct wl_client *client, struct wl_resource *resource)
+destroy_idle_inhibitor(struct wl_resource *resource)
 {
 	struct weston_idle_inhibitor *inhibitor = wl_resource_get_user_data(resource);
 
-	assert(inhibitor);
+	weston_log("destroy_idle_inhibitor\n");
 
-	inhibitor->surface->inhibit_idling = false;
+	inhibitor->surface = NULL;
+	free(inhibitor);
 }
 
 static const struct zwp_idle_inhibitor_v1_interface idle_inhibitor_interface = {
diff --git a/libweston/compositor.h b/libweston/compositor.h
index eb76c8a..3db86ec 100644
--- a/libweston/compositor.h
+++ b/libweston/compositor.h
@@ -1078,6 +1078,7 @@ struct weston_surface {
 	struct wl_signal destroy_signal; /* callback argument: this surface */
 	struct weston_compositor *compositor;
 	struct wl_signal commit_signal;
+	struct wl_signal drop_idle_inhibitor_signal;
 
 	/** Damage in local coordinates from the client, for tex upload. */
 	pixman_region32_t damage;
-- 
1.9.1



More information about the wayland-devel mailing list