aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/client/registry.h2
-rw-r--r--swaybg/main.c1
-rw-r--r--swaylock/main.c31
-rw-r--r--wayland/registry.c3
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 <wayland-client.h>
#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 <stdio.h>
#include <stdlib.h>
#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 <stdlib.h>
#include <string.h>
#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);
}
}