From 08a6da05412961ddf629415a92749b02d875fa62 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Mon, 4 Oct 2021 17:25:48 -0700 Subject: feat(wm): layer shell --- sys/cmd/wm/main.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) (limited to 'sys/cmd/wm/main.c') diff --git a/sys/cmd/wm/main.c b/sys/cmd/wm/main.c index 9d18b01..a447d80 100644 --- a/sys/cmd/wm/main.c +++ b/sys/cmd/wm/main.c @@ -5,6 +5,7 @@ Server server = { .make_input = { .notify = make_input }, .make_monitor = { .notify = make_monitor }, .make_xdg_surface = { .notify = make_xdg_surface }, + .make_layer_surface = { .notify = make_layer_surface }, .monitor_change = { .notify = monitor_change }, .monitor_test = { .notify = monitor_test }, @@ -16,6 +17,7 @@ Server server = { .cursor_axis = { .notify = cursor_axis }, .cursor_frame = { .notify = cursor_frame }, + .request_activate = { .notify = request_activate }, .request_cursor = { .notify = request_cursor }, .request_set_selection = { .notify = request_set_selection }, }, @@ -26,8 +28,9 @@ Server server = { static inline void -init_compositor(void) +init(void) { + /* compositor initialization */ server.display = wl_display_create(); server.backend = wlr_backend_autocreate(server.display); server.renderer = wlr_backend_get_renderer(server.backend); @@ -44,24 +47,23 @@ init_compositor(void) wlr_primary_selection_v1_device_manager_create(server.display); wlr_viewporter_create(server.display); + server.activate = wlr_xdg_activation_v1_create(server.display); + wl_signal_add(&server.activate->events.request_activate, &server.event.request_activate); + wlr_data_device_manager_create(server.display); server.monitor.layout = wlr_output_layout_create(); wl_signal_add(&server.monitor.layout->events.change, &server.event.monitor_change); + wlr_xdg_output_manager_v1_create(server.display, server.monitor.layout); wl_list_init(&server.monitor.list); wl_signal_add(&server.backend->events.new_output, &server.event.make_monitor); - /* rearrange monitor layouts */ server.monitor.manager = wlr_output_manager_v1_create(server.display); wl_signal_add(&server.monitor.manager->events.test, &server.event.monitor_test); wl_signal_add(&server.monitor.manager->events.apply, &server.event.monitor_apply); -} -static inline -void -init_shells(void) -{ + /* shell initialization */ wl_list_init(&server.client.list); wl_list_init(&server.client.stack); wl_list_init(&server.client.focus); @@ -69,17 +71,16 @@ init_shells(void) server.shell.xdg = wlr_xdg_shell_create(server.display); wl_signal_add(&server.shell.xdg->events.new_surface, &server.event.make_xdg_surface); + server.shell.layer = wlr_layer_shell_v1_create(server.display); + wl_signal_add(&server.shell.layer->events.new_surface, &server.event.make_layer_surface); + wlr_server_decoration_manager_set_default_mode( wlr_server_decoration_manager_create(server.display), WLR_SERVER_DECORATION_MANAGER_MODE_SERVER ); wlr_xdg_decoration_manager_v1_create(server.display); -} -static inline -void -init_inputs(void) -{ + /* input initialization */ server.cursor.dot = wlr_cursor_create(); wlr_cursor_attach_output_layout(server.cursor.dot, server.monitor.layout); @@ -104,7 +105,7 @@ init_inputs(void) static inline void -cleanup(void) +fini(void) { wl_display_destroy_clients(server.display); @@ -145,9 +146,7 @@ main(int argc, char *argv[]) wlr_log_init(WLR_DEBUG, nil); - init_compositor(); - init_shells(); - init_inputs(); + init(); if(!(socket=(char*)wl_display_add_socket_auto(server.display))) { wlr_backend_destroy(server.backend); @@ -173,6 +172,6 @@ main(int argc, char *argv[]) wl_display_run(server.display); /* event loop */ - cleanup(); + fini(); return 0; } -- cgit v1.2.1