gimp but for windows: a wayland compositor
git clone https://github.com/m-col/wimp
Files | Refs | Readme

Commit 77579c88434333d01e7e0b2b69fa96cc0ec3715c
Parent: 721004d5550c40cc7d544d5889d1e9e740e9e843
Author: mcol <mcol@posteo.net>
Date: 2020-11-04 00:34:12 +0000
Committer: mcol <mcol@posteo.net>
Committed: 2020-11-04 00:34:12 +0000

move logic out of main and into dedicated files where appropr.

src/shell.h Added

@@ -0,0 +1,12 @@
+#pragma once
+
+#include "deskwm.h"
+
+
+void on_map(struct wl_listener *listener, void *data);
+void on_unmap(struct wl_listener *listener, void *data);
+void on_surface_destroy(struct wl_listener *listener, void *data);
+void on_request_move(struct wl_listener *listener, void *data);
+void on_request_resize(struct wl_listener *listener, void *data);
+void on_new_xdg_surface(struct wl_listener *listener, void *data);
+void set_up_shell(struct server *server);

src/shell.c Added

@@ -0,0 +1,63 @@
+#include "deskwm.h"
+#include "output.h"
+
+
+void on_map(struct wl_listener *listener, void *data) {
+    return;
+}
+
+
+void on_unmap(struct wl_listener *listener, void *data) {
+    return;
+}
+
+
+void on_surface_destroy(struct wl_listener *listener, void *data) {
+    return;
+}
+
+
+void on_request_move(struct wl_listener *listener, void *data) {
+    return;
+}
+
+
+void on_request_resize(struct wl_listener *listener, void *data) {
+    return;
+}
+
+
+void on_new_xdg_surface(struct wl_listener *listener, void *data) {
+	struct server *server = wl_container_of(listener, server, new_xdg_surface_listener);
+	struct wlr_xdg_surface *surface = data;
+	if (surface->role != WLR_XDG_SURFACE_ROLE_TOPLEVEL) {
+		return;
+	}
+
+	struct view *view = calloc(1, sizeof(struct view));
+	view->server = server;
+	view->surface = surface;
+
+	view->map.notify = on_map;
+	wl_signal_add(&surface->events.map, &view->map);
+	view->unmap.notify = on_unmap;
+	wl_signal_add(&surface->events.unmap, &view->unmap);
+	view->destroy.notify = on_surface_destroy;
+	wl_signal_add(&surface->events.destroy, &view->destroy);
+
+	struct wlr_xdg_toplevel *toplevel = surface->toplevel;
+	view->request_move.notify = on_request_move;
+	wl_signal_add(&toplevel->events.request_move, &view->request_move);
+	view->request_resize.notify = on_request_resize;
+	wl_signal_add(&toplevel->events.request_resize, &view->request_resize);
+
+	wl_list_insert(&server->views, &view->link);
+}
+
+
+void set_up_shell(struct server *server) {
+    wl_list_init(&server->views);
+    server->shell = wlr_xdg_shell_create(server->display);
+    server->new_xdg_surface_listener.notify = on_new_xdg_surface;
+    wl_signal_add(&server->shell->events.new_surface, &server->new_xdg_surface_listener);
+};

src/output.h Modified

@@ -12,4 +12,6 @@
 };
 
 
+void on_frame(struct wl_listener *listener, void *data);
 void on_new_output(struct wl_listener *listener, void *data);
+void set_up_outputs(struct server *server);

src/output.c Modified

@@ -1,8 +1,14 @@
 #include <wlr/types/wlr_output_layout.h>
 
+#include "deskwm.h"
 #include "output.h"
 
 
+void on_frame(struct wl_listener *listener, void *data) {
+    return;
+}
+
+
 void on_new_output(struct wl_listener *listener, void *data) {
     struct server *server = wl_container_of(listener, server, new_output_listener);
     struct wlr_output *wlr_output = data;
@@ -24,3 +30,11 @@
     wl_list_insert(&server->outputs, &output->link);
     wlr_output_layout_add_auto(server->output_layout, wlr_output);
 }
+
+
+void set_up_outputs(struct server *server) {
+    server->output_layout = wlr_output_layout_create();
+    wl_list_init(&server->outputs);
+    server->new_output_listener.notify = on_new_output;
+    wl_signal_add(&server->backend->events.new_output, &server->new_output_listener);
+}

src/deskwm.h Modified

@@ -39,11 +39,4 @@
 };
 
 
-void on_frame(struct wl_listener *listener, void *data);
-void on_new_output(struct wl_listener *listener, void *data);
-void on_map(struct wl_listener *listener, void *data);
-void on_unmap(struct wl_listener *listener, void *data);
-void on_surface_destroy(struct wl_listener *listener, void *data);
-void on_request_move(struct wl_listener *listener, void *data);
-void on_request_resize(struct wl_listener *listener, void *data);
-void on_new_xdg_surface(struct wl_listener *listener, void *data);
+void create_serve();

src/deskwm.c Modified

@@ -3,69 +3,22 @@
 #include <wlr/backend.h>
 #include <wlr/render/wlr_renderer.h>
 #include <wlr/types/wlr_compositor.h>
-#include <wlr/types/wlr_output_layout.h>
 #include <wlr/types/wlr_xdg_shell.h>
 #include <wlr/util/log.h>
 
 #include "deskwm.h"
 #include "output.h"
+#include "shell.h"
 
 
-void on_frame(struct wl_listener *listener, void *data) {
-    return;
-}
-
-
-void on_map(struct wl_listener *listener, void *data) {
-    return;
-}
-
-
-void on_unmap(struct wl_listener *listener, void *data) {
-    return;
-}
-
-
-void on_surface_destroy(struct wl_listener *listener, void *data) {
-    return;
-}
-
-
-void on_request_move(struct wl_listener *listener, void *data) {
-    return;
-}
-
-
-void on_request_resize(struct wl_listener *listener, void *data) {
-    return;
-}
-
-
-void on_new_xdg_surface(struct wl_listener *listener, void *data) {
-	struct server *server = wl_container_of(listener, server, new_xdg_surface_listener);
-	struct wlr_xdg_surface *surface = data;
-	if (surface->role != WLR_XDG_SURFACE_ROLE_TOPLEVEL) {
-		return;
-	}
-
-	struct view *view = calloc(1, sizeof(struct view));
-	view->server = server;
-	view->surface = surface;
-
-	view->map.notify = on_map;
-	wl_signal_add(&surface->events.map, &view->map);
-	view->unmap.notify = on_unmap;
-	wl_signal_add(&surface->events.unmap, &view->unmap);
-	view->destroy.notify = on_surface_destroy;
-	wl_signal_add(&surface->events.destroy, &view->destroy);
-
-	struct wlr_xdg_toplevel *toplevel = surface->toplevel;
-	view->request_move.notify = on_request_move;
-	wl_signal_add(&toplevel->events.request_move, &view->request_move);
-	view->request_resize.notify = on_request_resize;
-	wl_signal_add(&toplevel->events.request_resize, &view->request_resize);
-
-	wl_list_insert(&server->views, &view->link);
+struct server create_server() {
+    struct server server;
+    server.display = wl_display_create();
+    server.backend = wlr_backend_autocreate(server.display, NULL);
+    server.renderer = wlr_backend_get_renderer(server.backend);
+    wlr_renderer_init_wl_display(server.renderer, server.display);
+    wlr_compositor_create(server.display, server.renderer);
+    return server;
 }
 
 
@@ -80,33 +33,17 @@
         }
     }
 
-    // create compositor
-    struct server server;
-    server.display = wl_display_create();
-    server.backend = wlr_backend_autocreate(server.display, NULL);
-    server.renderer = wlr_backend_get_renderer(server.backend);
-    wlr_renderer_init_wl_display(server.renderer, server.display);
-    wlr_compositor_create(server.display, server.renderer);
-
-    // set up outputs
-    server.output_layout = wlr_output_layout_create();
-    wl_list_init(&server.outputs);
-    server.new_output_listener.notify = on_new_output;
-    wl_signal_add(&server.backend->events.new_output, &server.new_output_listener);
-
-    // set up shell
-    wl_list_init(&server.views);
-    server.shell = wlr_xdg_shell_create(server.display);
-    server.new_xdg_surface_listener.notify = on_new_xdg_surface;
-    wl_signal_add(&server.shell->events.new_surface, &server.new_xdg_surface_listener);
-
-
+    // create
+    struct server server = create_server();
 
+    // configure
+    set_up_outputs(&server);
+    set_up_shell(&server);
 
-    // begin session
+    // start
     wl_display_run(server.display);
 
-    // shutdown
+    // stop
     wlr_backend_destroy(server.backend);
     wl_display_destroy(server.display);
     return 0;