diff options
| author | Isaac Freund <ifreund@ifreund.xyz> | 2020-03-23 14:04:54 +0100 |
|---|---|---|
| committer | Isaac Freund <ifreund@ifreund.xyz> | 2020-03-23 14:04:54 +0100 |
| commit | 50494add408bda394d71d6f0a830ca1a34771ba2 (patch) | |
| tree | 8bdb8ab69a4ec618d52f23ad2c50ed531301ff03 /src/xdg_shell.zig | |
| parent | 8260b55a791ae7199d2652c6a6a9a7b3a59c1692 (diff) | |
| download | river-50494add408bda394d71d6f0a830ca1a34771ba2.tar.gz river-50494add408bda394d71d6f0a830ca1a34771ba2.tar.xz | |
Refactor xdg_shell handling
Diffstat (limited to 'src/xdg_shell.zig')
| -rw-r--r-- | src/xdg_shell.zig | 68 |
1 files changed, 0 insertions, 68 deletions
diff --git a/src/xdg_shell.zig b/src/xdg_shell.zig deleted file mode 100644 index 3bcc736..0000000 --- a/src/xdg_shell.zig +++ /dev/null @@ -1,68 +0,0 @@ -const std = @import("std"); -const c = @import("c.zig").c; - -fn xdg_surface_map(listener: [*c]c.wl_listener, data: ?*c_void) callconv(.C) void { - // Called when the surface is mapped, or ready to display on-screen. - var view = @fieldParentPtr(View, "map", listener); - view.*.mapped = true; - focus_view(view, view.*.xdg_surface.*.surface); -} - -fn xdg_surface_unmap(listener: [*c]c.wl_listener, data: ?*c_void) callconv(.C) void { - var view = @fieldParentPtr(View, "unmap", listener); - view.*.mapped = false; -} - -fn xdg_surface_destroy(listener: [*c]c.wl_listener, data: ?*c_void) callconv(.C) void { - var view = @fieldParentPtr(View, "destroy", listener); - var server = view.*.server; - const idx = for (server.*.views.span()) |*v, i| { - if (v == view) { - break i; - } - } else return; - _ = server.*.views.orderedRemove(idx); -} - -fn xdg_toplevel_request_move(listener: [*c]c.wl_listener, data: ?*c_void) callconv(.C) void { - // ignore for now -} - -fn xdg_toplevel_request_resize(listener: [*c]c.wl_listener, data: ?*c_void) callconv(.C) void { - // ignore for now -} - -fn server_new_xdg_surface(listener: [*c]c.wl_listener, data: ?*c_void) callconv(.C) void { - // This event is raised when wlr_xdg_shell receives a new xdg surface from a - // client, either a toplevel (application window) or popup. - var server = @fieldParentPtr(Server, "new_xdg_surface", listener); - var xdg_surface = @ptrCast(*c.wlr_xdg_surface, @alignCast(@alignOf(*c.wlr_xdg_surface), data)); - - if (xdg_surface.*.role != c.enum_wlr_xdg_surface_role.WLR_XDG_SURFACE_ROLE_TOPLEVEL) { - return; - } - - // Allocate a View for this surface - server.*.views.append(undefined) catch unreachable; - var view = &server.*.views.span()[server.*.views.span().len - 1]; - - view.*.server = server; - view.*.xdg_surface = xdg_surface; - - // Listen to the various events it can emit - view.*.map.notify = xdg_surface_map; - c.wl_signal_add(&xdg_surface.*.events.map, &view.*.map); - - view.*.unmap.notify = xdg_surface_unmap; - c.wl_signal_add(&xdg_surface.*.events.unmap, &view.*.unmap); - - view.*.destroy.notify = xdg_surface_destroy; - c.wl_signal_add(&xdg_surface.*.events.destroy, &view.*.destroy); - - var toplevel = xdg_surface.*.unnamed_160.toplevel; - view.*.request_move.notify = xdg_toplevel_request_move; - c.wl_signal_add(&toplevel.*.events.request_move, &view.*.request_move); - - view.*.request_resize.notify = xdg_toplevel_request_resize; - c.wl_signal_add(&toplevel.*.events.request_resize, &view.*.request_resize); -} |
