aboutsummaryrefslogtreecommitdiff
path: root/src/command/send_to_output.zig
diff options
context:
space:
mode:
authorIsaac Freund <ifreund@ifreund.xyz>2020-04-18 16:21:26 +0200
committerIsaac Freund <ifreund@ifreund.xyz>2020-04-18 16:21:26 +0200
commitfb2639a2264a279f20fef2ac385ef1e885026576 (patch)
tree50b8680eeb57f60b9b3c2d3fba9ba1ebc2b06cb8 /src/command/send_to_output.zig
parentbf300db004fbced79fe30ea1947656117f462947 (diff)
downloadriver-fb2639a2264a279f20fef2ac385ef1e885026576.tar.gz
river-fb2639a2264a279f20fef2ac385ef1e885026576.tar.xz
Send surface enter/leave events
Diffstat (limited to 'src/command/send_to_output.zig')
-rw-r--r--src/command/send_to_output.zig17
1 files changed, 6 insertions, 11 deletions
diff --git a/src/command/send_to_output.zig b/src/command/send_to_output.zig
index 09ce7ad..b626f93 100644
--- a/src/command/send_to_output.zig
+++ b/src/command/send_to_output.zig
@@ -4,8 +4,6 @@ const std = @import("std");
const Arg = @import("../command.zig").Arg;
const Output = @import("../output.zig").Output;
const Seat = @import("../seat.zig").Seat;
-const ViewStack = @import("../view_stack.zig").ViewStack;
-const View = @import("../view.zig").View;
/// Send the focused view to the the next or the previous output, depending on
/// the bool passed. Does nothing if there is only one output.
@@ -17,23 +15,20 @@ pub fn sendToOutput(seat: *Seat, arg: Arg) void {
if (seat.focused_view) |view| {
// If the noop output is focused, there is nowhere to send the view
- if (seat.focused_output == &root.noop_output) {
+ if (view.output == &root.noop_output) {
std.debug.assert(root.outputs.len == 0);
return;
}
// Send to the next/preg output in the list if there is one, else wrap
- const focused_node = @fieldParentPtr(std.TailQueue(Output).Node, "data", seat.focused_output);
- const target_output = switch (direction) {
- .Next => if (focused_node.next) |node| &node.data else &root.outputs.first.?.data,
- .Prev => if (focused_node.prev) |node| &node.data else &root.outputs.last.?.data,
+ const current_node = @fieldParentPtr(std.TailQueue(Output).Node, "data", view.output);
+ const destination_output = switch (direction) {
+ .Next => if (current_node.next) |node| &node.data else &root.outputs.first.?.data,
+ .Prev => if (current_node.prev) |node| &node.data else &root.outputs.last.?.data,
};
// Move the view to the target output
- const view_node = @fieldParentPtr(ViewStack(View).Node, "view", view);
- seat.focused_output.views.remove(view_node);
- target_output.views.push(view_node);
- view.output = target_output;
+ view.sendToOutput(destination_output);
// Handle the change and focus whatever's next in the focus stack
root.arrange();