Hook up the API defined in wayland-protocols to allow client screensaver
inhibition requests.

Signed-off-by: Bryce Harrington <br...@osg.samsung.com>
---
v2: Update for protocol rename

 Makefile.am          |  9 +++++++--
 clients/simple-shm.c | 28 ++++++++++++++++++++++++----
 2 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index aa3aa1b..73affd1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -478,7 +478,10 @@ nodist_weston_simple_shm_SOURCES =         \
        protocol/fullscreen-shell-unstable-v1-protocol.c        \
        protocol/fullscreen-shell-unstable-v1-client-protocol.h \
        protocol/ivi-application-protocol.c             \
-       protocol/ivi-application-client-protocol.h
+       protocol/ivi-application-client-protocol.h      \
+       protocol/idle-inhibit-unstable-v1-protocol.c    \
+       protocol/idle-inhibit-unstable-v1-client-protocol.h
+
 weston_simple_shm_CFLAGS = $(AM_CFLAGS) $(SIMPLE_CLIENT_CFLAGS)
 weston_simple_shm_LDADD = $(SIMPLE_CLIENT_LIBS) libshared.la
 
@@ -766,7 +769,9 @@ BUILT_SOURCES +=                                    \
        protocol/ivi-hmi-controller-protocol.c          \
        protocol/ivi-hmi-controller-client-protocol.h   \
        protocol/ivi-application-protocol.c             \
-       protocol/ivi-application-client-protocol.h
+       protocol/ivi-application-client-protocol.h      \
+       protocol/idle-inhibit-unstable-v1-protocol.c \
+       protocol/idle-inhibit-unstable-v1-client-protocol.h
 
 westondatadir = $(datadir)/weston
 dist_westondata_DATA =                         \
diff --git a/clients/simple-shm.c b/clients/simple-shm.c
index e6f0bd0..1dc609c 100644
--- a/clients/simple-shm.c
+++ b/clients/simple-shm.c
@@ -42,12 +42,15 @@
 #include "ivi-application-client-protocol.h"
 #define IVI_SURFACE_ID 9000
 
+#include "idle-inhibit-unstable-v1-client-protocol.h"
+
 struct display {
        struct wl_display *display;
        struct wl_registry *registry;
        struct wl_compositor *compositor;
        struct xdg_shell *shell;
        struct zwp_fullscreen_shell_v1 *fshell;
+       struct zwp_idle_inhibit_manager_v1 *inhibit;
        struct wl_shm *shm;
        uint32_t formats;
        struct ivi_application *ivi_application;
@@ -68,6 +71,7 @@ struct window {
        struct buffer buffers[2];
        struct buffer *prev_buffer;
        struct wl_callback *callback;
+       struct zwp_idle_inhibitor_v1 *inhibitor;
 };
 
 static int running = 1;
@@ -201,6 +205,12 @@ create_window(struct display *display, int width, int 
height)
                assert(0);
        }
 
+       /* Request the screensaver be inhibited for duration of our surface */
+       if (display->inhibit) {
+               window->inhibitor = 
zwp_idle_inhibit_manager_v1_create_inhibitor(display->inhibit,
+                                                                               
 window->surface);
+       }
+
        return window;
 }
 
@@ -217,6 +227,10 @@ destroy_window(struct window *window)
 
        if (window->xdg_surface)
                xdg_surface_destroy(window->xdg_surface);
+
+       if (window->inhibitor)
+               zwp_idle_inhibitor_v1_destroy(window->inhibitor);
+
        wl_surface_destroy(window->surface);
        free(window);
 }
@@ -381,12 +395,15 @@ registry_handle_global(void *data, struct wl_registry 
*registry,
                d->shm = wl_registry_bind(registry,
                                          id, &wl_shm_interface, 1);
                wl_shm_add_listener(d->shm, &shm_listener, d);
-       }
-       else if (strcmp(interface, "ivi_application") == 0) {
+       } else if (strcmp(interface, "ivi_application") == 0) {
                d->ivi_application =
-                       wl_registry_bind(registry, id,
-                                        &ivi_application_interface, 1);
+                       wl_registry_bind(registry,
+                                        id, &ivi_application_interface, 1);
+       } else if (strcmp(interface, "zwp_idle_inhibit_manager_v1") == 0) {
+               d->inhibit = wl_registry_bind(registry,
+                                             id, 
&zwp_idle_inhibit_manager_v1_interface, 1);
        }
+
 }
 
 static void
@@ -476,6 +493,9 @@ create_display(void)
 static void
 destroy_display(struct display *display)
 {
+       if (display->inhibit)
+               zwp_idle_inhibit_manager_v1_destroy(display->inhibit);
+
        if (display->shm)
                wl_shm_destroy(display->shm);
 
-- 
1.9.1

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to