From 067ac6cfa7089d9a55d7ddfbb3db59bb51aec8b8 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 10 Dec 2015 08:04:22 -0500 Subject: [PATCH] Discover swaylock extension in registry --- include/client/registry.h | 2 ++ swaybg/main.c | 1 - swaylock/main.c | 31 +++++++++++++++++++++++++++++-- wayland/registry.c | 3 +++ 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/include/client/registry.h b/include/client/registry.h index 68a9bc02..a6901990 100644 --- a/include/client/registry.h +++ b/include/client/registry.h @@ -3,6 +3,7 @@ #include #include "wayland-desktop-shell-client-protocol.h" +#include "wayland-swaylock-client-protocol.h" #include "list.h" struct output_state { @@ -19,6 +20,7 @@ struct registry { struct wl_shell *shell; struct wl_shm *shm; struct desktop_shell *desktop_shell; + struct lock *swaylock; list_t *outputs; }; diff --git a/swaybg/main.c b/swaybg/main.c index 6b81d97c..0bb83396 100644 --- a/swaybg/main.c +++ b/swaybg/main.c @@ -11,7 +11,6 @@ #include "list.h" list_t *surfaces; - struct registry *registry; enum scaling_mode { diff --git a/swaylock/main.c b/swaylock/main.c index 4f77dfec..a7a15533 100644 --- a/swaylock/main.c +++ b/swaylock/main.c @@ -1,16 +1,43 @@ -#include "wayland-desktop-shell-client-protocol.h" +#include "wayland-swaylock-client-protocol.h" #include #include #include "client/window.h" #include "client/registry.h" #include "log.h" +list_t *surfaces; +struct registry *registry; + +enum scaling_mode { + SCALING_MODE_STRETCH, + SCALING_MODE_FILL, + SCALING_MODE_FIT, + SCALING_MODE_CENTER, + SCALING_MODE_TILE, +}; + void sway_terminate(void) { exit(EXIT_FAILURE); } int main(int argc, char **argv) { init_log(L_INFO); - sway_log(L_INFO, "Hello world"); + surfaces = create_list(); + registry = registry_poll(); + + if (!registry->swaylock) { + sway_abort("swaylock requires the compositor to support the swaylock extension."); + } + + int i; + for (i = 0; i < registry->outputs->length; ++i) { + struct output_state *output = registry->outputs->items[i]; + struct window *window = window_setup(registry, output->width, output->height, false); + if (!window) { + sway_abort("Failed to create surfaces."); + } + lock_set_lock_surface(registry->swaylock, output->output, window->surface); + list_add(surfaces, window); + } return 0; } diff --git a/wayland/registry.c b/wayland/registry.c index 3c869d25..11e6e51d 100644 --- a/wayland/registry.c +++ b/wayland/registry.c @@ -2,6 +2,7 @@ #include #include #include "wayland-desktop-shell-client-protocol.h" +#include "wayland-swaylock-client-protocol.h" #include "client/registry.h" #include "stringop.h" #include "log.h" @@ -58,6 +59,8 @@ static void registry_global(void *data, struct wl_registry *registry, list_add(reg->outputs, ostate); } else if (strcmp(interface, desktop_shell_interface.name) == 0) { reg->desktop_shell = wl_registry_bind(registry, name, &desktop_shell_interface, version); + } else if (strcmp(interface, lock_interface.name) == 0) { + reg->swaylock = wl_registry_bind(registry, name, &lock_interface, version); } }