From ea6d60ce9591a90f609ca2fd686a4523c77d57f9 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 28 Oct 2023 21:46:43 +0300 Subject: [PATCH] . --- Makefile | 2 +- config.h | 4 +-- include/main.h | 43 ++++++++++++++++++++++++++ include/server.h | 67 ---------------------------------------- include/structs.h | 1 - src/main.c | 78 ++++++++++++++++++++++++++++++++++++++--------- src/server.c | 50 ------------------------------ 7 files changed, 109 insertions(+), 136 deletions(-) create mode 100644 include/main.h delete mode 100644 include/server.h delete mode 100644 src/server.c diff --git a/Makefile b/Makefile index dd4e700..8b5247f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -CFLAGS:=-s -O0 -pedantic -Wall -Wextra -DWLR_USE_UNSTABLE +CFLAGS:=-s -O0 -pedantic -Wall -Wextra -DWLR_USE_UNSTABLE -b LDFLAGS:=$(shell pkg-config --libs wlroots wayland-server libinput) CC:=cc diff --git a/config.h b/config.h index ca22e24..3d48b97 100644 --- a/config.h +++ b/config.h @@ -3,8 +3,8 @@ #define LOG_LEVEL WLR_ERROR static const MonitorRule monrules[] = { - /* [monitor name] [workspace id] [x] [y] [resolution x] [resolution y]*/ - {"VGA-1", 1, -1, -1, 1440, 900} + /* [monitor name] [x] [y] [resolution x] [resolution y]*/ + {"VGA-1", -1, -1, 1440, 900} }; #endif diff --git a/include/main.h b/include/main.h new file mode 100644 index 0000000..f5339e0 --- /dev/null +++ b/include/main.h @@ -0,0 +1,43 @@ +#ifndef _MAIN_H +#define _MAIN_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "structs.h" +#include "config.h" +#include "die.h" + +struct server { + struct wl_display *wl_display; + + struct wlr_backend *backend; + struct wlr_renderer *renderer; + struct wlr_scene *scene; + struct wlr_output_layout *output_layout; + + struct wlr_allocator *alloc; + + /* Monitors */ + struct wl_list outputs; + struct wl_listener new_output; +}; + +#endif diff --git a/include/server.h b/include/server.h deleted file mode 100644 index 3382c58..0000000 --- a/include/server.h +++ /dev/null @@ -1,67 +0,0 @@ -#ifndef _SERVER_H -#define _SERVER_H -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "structs.h" -#include "config.h" -#include "die.h" - -struct server { - struct wl_display *wl_display; - struct wl_event_loop *wl_event_loop; - struct wlr_allocator *alloc; - - struct wlr_backend *backend; - struct wlr_compositor *compositor; - struct wlr_renderer *renderer; - - /* Monitors */ - struct wl_list outputs; -}; - - -void createmon(struct wl_listener *listener, void *data); -static struct wl_listener new_output = {.notify = createmon}; - -void server_init(struct server *server); -#endif diff --git a/include/structs.h b/include/structs.h index 58218dc..7c52f47 100644 --- a/include/structs.h +++ b/include/structs.h @@ -3,7 +3,6 @@ typedef struct { const char *name; - int id; int x; int y; int res_x; diff --git a/src/main.c b/src/main.c index d6e62ee..7ae3323 100644 --- a/src/main.c +++ b/src/main.c @@ -1,16 +1,64 @@ -#include -#include -#include -#include -#include -#include -#include -#include "server.h" -#include "die.h" +#include "main.h" -void destroy(struct server *server) { - wlr_backend_destroy(server->backend); - wl_display_destroy(server->wl_display); +void rendermon(struct wl_listener *listener, void *data) { +} + +void cleanupmon(struct wl_listener *listener, void *data) { +} + +void createmon(struct wl_listener *listener, void *data) { + struct server *server = wl_container_of(listener, server, new_output); + struct wlr_output *wlr_output = data; + wlr_output_init_render(wlr_output, server->alloc, server->renderer); + + wlr_output_set_mode(wlr_output, wlr_output_preferred_mode(wlr_output)); + + wlr_output_enable(wlr_output, 1); + if (!wlr_output_commit(wlr_output)) + return; + + wlr_output_layout_add_auto(server->output_layout, wlr_output); +} + +void server_init(struct server *server) { + server->wl_display = wl_display_create(); + assert(server->wl_display); + + server->backend = wlr_backend_autocreate(server->wl_display); + assert(server->backend); + + /* Create a renderer with the default implementation */ + server->renderer = wlr_renderer_autocreate(server->backend); + assert(server->renderer); + + wlr_renderer_init_wl_display(server->renderer, server->wl_display); + + /* Create a default allocator */ + server->alloc = wlr_allocator_autocreate(server->backend, server->renderer); + assert(server->alloc); + + wlr_data_device_manager_create(server->wl_display); + wlr_export_dmabuf_manager_v1_create(server->wl_display); + wlr_screencopy_manager_v1_create(server->wl_display); + wlr_data_control_manager_v1_create(server->wl_display); + wlr_gamma_control_manager_v1_create(server->wl_display); + wlr_primary_selection_v1_device_manager_create(server->wl_display); + + /* Init monitors */ + server->new_output.notify = createmon; + wl_signal_add(&server->backend->events.new_output, &server->new_output); + wl_list_init(&server->outputs); + + const char *socket = wl_display_add_socket_auto(server->wl_display); + assert(socket); + + printf("Running compositor on wayland display '%s'\n", socket); + setenv("WAYLAND_DISPLAY", socket, 1); + + if (!wlr_backend_start(server->backend)) { + wl_display_destroy(server->wl_display); + die("wlr_backend_start", 1); + } } int main(void) { @@ -19,7 +67,7 @@ int main(void) { int sig[] = {SIGCHLD, SIGINT, SIGTERM, SIGPIPE}; for (size_t i = 0; i < sizeof(sig) / sizeof(sig[0]); i++) - signal(sig[i], NULL); + signal(sig[i], NULL); wlr_log_init(LOG_LEVEL, NULL); @@ -27,7 +75,7 @@ int main(void) { server_init(&server); wl_display_run(server.wl_display); - destroy(&server); - + wlr_backend_destroy(server.backend); + wl_display_destroy(server.wl_display); return 0; } diff --git a/src/server.c b/src/server.c deleted file mode 100644 index 53c3e28..0000000 --- a/src/server.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "server.h" - -void createmon(struct wl_listener *listener, void *data) { - -} - -void server_init(struct server *server) { - server->wl_display = wl_display_create(); - assert(server->wl_display); - - server->wl_event_loop = wl_display_get_event_loop(server->wl_display); - assert(server->wl_event_loop); - - server->backend = wlr_backend_autocreate(server->wl_display); - assert(server->backend); - - server->renderer = wlr_renderer_autocreate(server->backend); - assert(server->renderer); - - wlr_renderer_init_wl_display(server->renderer, server->wl_display); - - server->alloc = wlr_allocator_autocreate(server->backend, server->renderer); - assert(server->alloc); - - server->compositor = wlr_compositor_create(server->wl_display, server->renderer); - wlr_export_dmabuf_manager_v1_create(server->wl_display); - wlr_screencopy_manager_v1_create(server->wl_display); - wlr_data_control_manager_v1_create(server->wl_display); - wlr_data_device_manager_create(server->wl_display); - wlr_gamma_control_manager_v1_create(server->wl_display); - wlr_primary_selection_v1_device_manager_create(server->wl_display); - wlr_viewporter_create(server->wl_display); - wlr_single_pixel_buffer_manager_v1_create(server->wl_display); - wlr_subcompositor_create(server->wl_display); - - wl_list_init(&server->outputs); - wl_signal_add(&server->backend->events.new_output, &new_output); - - const char *socket = wl_display_add_socket_auto(server->wl_display); - assert(socket); - - printf("Running compositor on wayland display '%s'\n", socket); - setenv("WAYLAND_DISPLAY", socket, 1); - - if (!wlr_backend_start(server->backend)) { - wl_display_destroy(server->wl_display); - die("wlr_backend_start", 1); - } - -}