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;