Split control into separate protocol

This commit is contained in:
Isaac Freund
2020-05-24 20:58:39 +02:00
parent 08a2f47a5e
commit d83cbf55d1
7 changed files with 84 additions and 57 deletions

View File

@ -27,7 +27,7 @@ const Server = @import("Server.zig");
const protocol_version = 1;
const implementation = c.struct_zriver_window_manager_v1_interface{
const implementation = c.struct_zriver_control_v1_interface{
.run_command = runCommand,
};
@ -40,7 +40,7 @@ pub fn init(self: *Self, server: *Server) !void {
self.server = server;
self.wl_global = c.wl_global_create(
server.wl_display,
&c.zriver_window_manager_v1_interface,
&c.zriver_control_v1_interface,
protocol_version,
self,
bind,
@ -60,7 +60,7 @@ fn bind(wl_client: ?*c.wl_client, data: ?*c_void, version: u32, id: u32) callcon
const self = @ptrCast(*Self, @alignCast(@alignOf(*Self), data));
const wl_resource = c.wl_resource_create(
wl_client,
&c.zriver_window_manager_v1_interface,
&c.zriver_control_v1_interface,
@intCast(c_int, version),
id,
) orelse {

View File

@ -31,7 +31,7 @@ const Output = @import("Output.zig");
const Root = @import("Root.zig");
const View = @import("View.zig");
const ViewStack = @import("view_stack.zig").ViewStack;
const WindowManager = @import("WindowManager.zig");
const Control = @import("Control.zig");
const XwaylandUnmanaged = @import("XwaylandUnmanaged.zig");
allocator: *std.mem.Allocator,
@ -56,7 +56,7 @@ decoration_manager: DecorationManager,
input_manager: InputManager,
root: Root,
config: Config,
window_manager: WindowManager,
control: Control,
pub fn init(self: *Self, allocator: *std.mem.Allocator) !void {
self.allocator = allocator;
@ -122,7 +122,7 @@ pub fn init(self: *Self, allocator: *std.mem.Allocator) !void {
try self.root.init(self);
// Must be called after root is initialized
try self.input_manager.init(self);
try self.window_manager.init(self);
try self.control.init(self);
// These all free themselves when the wl_display is destroyed
_ = c.wlr_data_device_manager_create(self.wl_display) orelse

View File

@ -48,7 +48,7 @@ pub usingnamespace @cImport({
// that can be automatically imported
@cInclude("include/bindings.h");
@cInclude("river-window-management-unstable-v1-protocol.h");
@cInclude("river-control-unstable-v1-protocol.h");
});
// These are needed because zig currently names translated anonymous unions

View File

@ -19,7 +19,7 @@ const std = @import("std");
const c = @cImport({
@cInclude("wayland-client.h");
@cInclude("river-window-management-unstable-v1-client-protocol.h");
@cInclude("river-control-unstable-v1-client-protocol.h");
});
const wl_registry_listener = c.wl_registry_listener{
@ -32,7 +32,7 @@ const command_callback_listener = c.zriver_command_callback_v1_listener{
.failure = handleFailure,
};
var river_window_manager: ?*c.zriver_window_manager_v1 = null;
var river_control_optional: ?*c.zriver_control_v1 = null;
pub fn main() !void {
const wl_display = c.wl_display_connect(null) orelse return error.CantConnectToDisplay;
@ -42,7 +42,7 @@ pub fn main() !void {
return error.FailedToAddListener;
if (c.wl_display_roundtrip(wl_display) < 0) return error.RoundtripFailed;
const wm = river_window_manager orelse return error.RiverWMNotAdvertised;
const river_control = river_control_optional orelse return error.RiverControlNotAdvertised;
var command: c.wl_array = undefined;
c.wl_array_init(&command);
@ -57,7 +57,7 @@ pub fn main() !void {
ptr[arg.len] = 0;
}
const command_callback = c.zriver_window_manager_v1_run_command(wm, &command);
const command_callback = c.zriver_control_v1_run_command(river_control, &command);
if (c.zriver_command_callback_v1_add_listener(
command_callback,
&command_callback_listener,
@ -75,15 +75,15 @@ fn handleGlobal(
interface: ?[*:0]const u8,
version: u32,
) callconv(.C) void {
// We only care about the river_window_manager global
// We only care about the river_control global
if (std.mem.eql(
u8,
std.mem.spanZ(interface.?),
std.mem.spanZ(@ptrCast([*:0]const u8, c.zriver_window_manager_v1_interface.name.?)),
std.mem.spanZ(@ptrCast([*:0]const u8, c.zriver_control_v1_interface.name.?)),
)) {
river_window_manager = @ptrCast(
*c.zriver_window_manager_v1,
c.wl_registry_bind(wl_registry, name, &c.zriver_window_manager_v1_interface, 1),
river_control_optional = @ptrCast(
*c.zriver_control_v1,
c.wl_registry_bind(wl_registry, name, &c.zriver_control_v1_interface, 1),
);
}
}