aboutsummaryrefslogtreecommitdiff
path: root/src/Server.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Server.zig')
-rw-r--r--src/Server.zig45
1 files changed, 21 insertions, 24 deletions
diff --git a/src/Server.zig b/src/Server.zig
index da980dd..b617b04 100644
--- a/src/Server.zig
+++ b/src/Server.zig
@@ -35,24 +35,25 @@ allocator: *std.mem.Allocator,
wl_display: *c.wl_display,
wl_event_loop: *c.wl_event_loop,
+
wlr_backend: *c.wlr_backend,
noop_backend: *c.wlr_backend,
-wlr_renderer: *c.wlr_renderer,
+listen_new_output: c.wl_listener,
wlr_xdg_shell: *c.wlr_xdg_shell,
+listen_new_xdg_surface: c.wl_listener,
+
wlr_layer_shell: *c.wlr_layer_shell_v1,
+listen_new_layer_surface: c.wl_listener,
+
wlr_xwayland: if (build_options.xwayland) *c.wlr_xwayland else void,
+listen_new_xwayland_surface: if (build_options.xwayland) c.wl_listener else void,
decoration_manager: DecorationManager,
input_manager: InputManager,
root: Root,
config: Config,
-listen_new_output: c.wl_listener,
-listen_new_xdg_surface: c.wl_listener,
-listen_new_layer_surface: c.wl_listener,
-listen_new_xwayland_surface: c.wl_listener,
-
pub fn init(self: *Self, allocator: *std.mem.Allocator) !void {
self.allocator = allocator;
@@ -81,24 +82,35 @@ pub fn init(self: *Self, allocator: *std.mem.Allocator) !void {
// If we don't provide a renderer, autocreate makes a GLES2 renderer for us.
// The renderer is responsible for defining the various pixel formats it
// supports for shared memory, this configures that for clients.
- self.wlr_renderer = c.river_wlr_backend_get_renderer(self.wlr_backend) orelse
+ const wlr_renderer = c.river_wlr_backend_get_renderer(self.wlr_backend) orelse
return error.CantGetWlrRenderer;
// TODO: Handle failure after https://github.com/swaywm/wlroots/pull/2080
- c.wlr_renderer_init_wl_display(self.wlr_renderer, self.wl_display); // orelse
+ c.wlr_renderer_init_wl_display(wlr_renderer, self.wl_display); // orelse
// return error.CantInitWlDisplay;
+ self.listen_new_output.notify = handleNewOutput;
+ c.wl_signal_add(&self.wlr_backend.events.new_output, &self.listen_new_output);
- const wlr_compositor = c.wlr_compositor_create(self.wl_display, self.wlr_renderer) orelse
+ const wlr_compositor = c.wlr_compositor_create(self.wl_display, wlr_renderer) orelse
return error.CantCreateWlrCompositor;
+ // Set up xdg shell
self.wlr_xdg_shell = c.wlr_xdg_shell_create(self.wl_display) orelse
return error.CantCreateWlrXdgShell;
+ self.listen_new_xdg_surface.notify = handleNewXdgSurface;
+ c.wl_signal_add(&self.wlr_xdg_shell.events.new_surface, &self.listen_new_xdg_surface);
+ // Set up layer shell
self.wlr_layer_shell = c.wlr_layer_shell_v1_create(self.wl_display) orelse
return error.CantCreateWlrLayerShell;
+ self.listen_new_layer_surface.notify = handleNewLayerSurface;
+ c.wl_signal_add(&self.wlr_layer_shell.events.new_surface, &self.listen_new_layer_surface);
+ // Set up xwayland if built with suport
if (build_options.xwayland) {
self.wlr_xwayland = c.wlr_xwayland_create(self.wl_display, wlr_compositor, false) orelse
return error.CantCreateWlrXwayland;
+ self.listen_new_xwayland_surface.notify = handleNewXwaylandSurface;
+ c.wl_signal_add(&self.wlr_xwayland.events.new_surface, &self.listen_new_xwayland_surface);
}
try self.decoration_manager.init(self);
@@ -114,21 +126,6 @@ pub fn init(self: *Self, allocator: *std.mem.Allocator) !void {
return error.CantCreateWlrScreencopyManager;
_ = c.wlr_xdg_output_manager_v1_create(self.wl_display, self.root.wlr_output_layout) orelse
return error.CantCreateWlrOutputManager;
-
- // Register listeners for events on our globals
- self.listen_new_output.notify = handleNewOutput;
- c.wl_signal_add(&self.wlr_backend.events.new_output, &self.listen_new_output);
-
- self.listen_new_xdg_surface.notify = handleNewXdgSurface;
- c.wl_signal_add(&self.wlr_xdg_shell.events.new_surface, &self.listen_new_xdg_surface);
-
- self.listen_new_layer_surface.notify = handleNewLayerSurface;
- c.wl_signal_add(&self.wlr_layer_shell.events.new_surface, &self.listen_new_layer_surface);
-
- if (build_options.xwayland) {
- self.listen_new_xwayland_surface.notify = handleNewXwaylandSurface;
- c.wl_signal_add(&self.wlr_xwayland.events.new_surface, &self.listen_new_xwayland_surface);
- }
}
/// Free allocated memory and clean up