Use tag masks for tag commands and clean up
This commit is contained in:
parent
0e9ecb6051
commit
ea7f5d4064
9 changed files with 143 additions and 282 deletions
|
@ -38,24 +38,26 @@ riverctl map normal $mod+Shift H mod-master-count +1
|
||||||
riverctl map normal $mod+Shift L mod-master-count -1
|
riverctl map normal $mod+Shift L mod-master-count -1
|
||||||
|
|
||||||
for i in $(seq 1 9); do
|
for i in $(seq 1 9); do
|
||||||
# Mod+[1-9] to focus tag [1-9]
|
tagmask=$((1 << ($i - 1)))
|
||||||
riverctl map normal $mod $i focus-tag $i
|
|
||||||
|
|
||||||
# Mod+Shift+[1-9] to tag focused view with tag [1-9]
|
# Mod+[1-9] to focus tag [0-8]
|
||||||
riverctl map normal $mod+Shift $i tag-view $i
|
riverctl map normal $mod $i set-focused-tags $tagmask
|
||||||
|
|
||||||
# Mod+Ctrl+[1-9] to toggle focus of tag [1-9]
|
# Mod+Shift+[1-9] to tag focused view with tag [0-8]
|
||||||
riverctl map normal $mod+Control $i toggle-tag-focus $i
|
riverctl map normal $mod+Shift $i set-view-tags $tagmask
|
||||||
|
|
||||||
# Mod+Shift+Ctrl+[1-9] to toggle tag [1-9] of focused view
|
# Mod+Ctrl+[1-9] to toggle focus of tag [0-8]
|
||||||
riverctl map normal $mod+Shift+Control $i toggle-view-tag $i
|
riverctl map normal $mod+Control $i toggle-focused-tags $tagmask
|
||||||
|
|
||||||
|
# Mod+Shift+Ctrl+[1-9] to toggle tag [0-8] of focused view
|
||||||
|
riverctl map normal $mod+Shift+Control $i toggle-view-tags $tagmask
|
||||||
done
|
done
|
||||||
|
|
||||||
# Mod+0 to focus all tags
|
# Mod+0 to focus all tags
|
||||||
riverctl map normal $mod 0 focus-all-tags
|
|
||||||
|
|
||||||
# Mod+Shift+0 to tag focused view with all tags
|
# Mod+Shift+0 to tag focused view with all tags
|
||||||
riverctl map normal $mod+Shift 0 tag-view-all-tags
|
all_tags_mask=$(((1 << 32) - 1))
|
||||||
|
riverctl map normal $mod 0 set-focused-tags $all_tags_mask
|
||||||
|
riverctl map normal $mod+Shift 0 set-view-tags $all_tags_mask
|
||||||
|
|
||||||
# Mod+Space to toggle float
|
# Mod+Space to toggle float
|
||||||
riverctl map normal $mod Space toggle-float
|
riverctl map normal $mod Space toggle-float
|
||||||
|
|
|
@ -24,21 +24,19 @@ const impl = struct {
|
||||||
const declareMode = @import("command/declare_mode.zig").declareMode;
|
const declareMode = @import("command/declare_mode.zig").declareMode;
|
||||||
const enterMode = @import("command/enter_mode.zig").enterMode;
|
const enterMode = @import("command/enter_mode.zig").enterMode;
|
||||||
const exit = @import("command/exit.zig").exit;
|
const exit = @import("command/exit.zig").exit;
|
||||||
const focusView = @import("command/focus_view.zig").focusView;
|
|
||||||
const focusAllTags = @import("command/focus_all_tags.zig").focusAllTags;
|
|
||||||
const focusOutput = @import("command/focus_output.zig").focusOutput;
|
const focusOutput = @import("command/focus_output.zig").focusOutput;
|
||||||
const map = @import("command/map.zig").map;
|
const focusView = @import("command/focus_view.zig").focusView;
|
||||||
const focusTag = @import("command/focus_tag.zig").focusTag;
|
|
||||||
const layout = @import("command/layout.zig").layout;
|
const layout = @import("command/layout.zig").layout;
|
||||||
|
const map = @import("command/map.zig").map;
|
||||||
const modMasterCount = @import("command/mod_master_count.zig").modMasterCount;
|
const modMasterCount = @import("command/mod_master_count.zig").modMasterCount;
|
||||||
const modMasterFactor = @import("command/mod_master_factor.zig").modMasterFactor;
|
const modMasterFactor = @import("command/mod_master_factor.zig").modMasterFactor;
|
||||||
const sendToOutput = @import("command/send_to_output.zig").sendToOutput;
|
const sendToOutput = @import("command/send_to_output.zig").sendToOutput;
|
||||||
|
const setFocusedTags = @import("command/tags.zig").setFocusedTags;
|
||||||
|
const setViewTags = @import("command/tags.zig").setViewTags;
|
||||||
const spawn = @import("command/spawn.zig").spawn;
|
const spawn = @import("command/spawn.zig").spawn;
|
||||||
const tagView = @import("command/tag_view.zig").tagView;
|
|
||||||
const tagViewAllTags = @import("command/tag_view_all_tags.zig").tagViewAllTags;
|
|
||||||
const toggleFloat = @import("command/toggle_float.zig").toggleFloat;
|
const toggleFloat = @import("command/toggle_float.zig").toggleFloat;
|
||||||
const toggleTagFocus = @import("command/toggle_tag_focus.zig").toggleTagFocus;
|
const toggleFocusedTags = @import("command/tags.zig").toggleFocusedTags;
|
||||||
const toggleViewTag = @import("command/toggle_view_tag.zig").toggleViewTag;
|
const toggleViewTags = @import("command/tags.zig").toggleViewTags;
|
||||||
const zoom = @import("command/zoom.zig").zoom;
|
const zoom = @import("command/zoom.zig").zoom;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -56,33 +54,29 @@ pub const Direction = enum {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const Definition = struct {
|
|
||||||
name: []const u8,
|
|
||||||
impl: fn (*std.mem.Allocator, *Seat, []const []const u8, *[]const u8) Error!void,
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO: this could be replaced with a comptime hashmap
|
// TODO: this could be replaced with a comptime hashmap
|
||||||
// zig fmt: off
|
// zig fmt: off
|
||||||
const str_to_impl_fn = [_]Definition{
|
const str_to_impl_fn = [_]struct {
|
||||||
|
name: []const u8,
|
||||||
|
impl: fn (*std.mem.Allocator, *Seat, []const []const u8, *[]const u8) Error!void,
|
||||||
|
}{
|
||||||
.{ .name = "close", .impl = impl.close },
|
.{ .name = "close", .impl = impl.close },
|
||||||
.{ .name = "declare-mode", .impl = impl.declareMode },
|
.{ .name = "declare-mode", .impl = impl.declareMode },
|
||||||
.{ .name = "enter-mode", .impl = impl.enterMode },
|
.{ .name = "enter-mode", .impl = impl.enterMode },
|
||||||
.{ .name = "exit", .impl = impl.exit },
|
.{ .name = "exit", .impl = impl.exit },
|
||||||
.{ .name = "focus-view", .impl = impl.focusView },
|
|
||||||
.{ .name = "focus-all-tags", .impl = impl.focusAllTags },
|
|
||||||
.{ .name = "focus-output", .impl = impl.focusOutput },
|
.{ .name = "focus-output", .impl = impl.focusOutput },
|
||||||
.{ .name = "focus-tag", .impl = impl.focusTag },
|
.{ .name = "focus-view", .impl = impl.focusView },
|
||||||
.{ .name = "layout", .impl = impl.layout },
|
.{ .name = "layout", .impl = impl.layout },
|
||||||
|
.{ .name = "map", .impl = impl.map },
|
||||||
.{ .name = "mod-master-count", .impl = impl.modMasterCount },
|
.{ .name = "mod-master-count", .impl = impl.modMasterCount },
|
||||||
.{ .name = "mod-master-factor", .impl = impl.modMasterFactor },
|
.{ .name = "mod-master-factor", .impl = impl.modMasterFactor },
|
||||||
.{ .name = "send-to-output", .impl = impl.sendToOutput },
|
.{ .name = "send-to-output", .impl = impl.sendToOutput },
|
||||||
|
.{ .name = "set-focused-tags", .impl = impl.setFocusedTags },
|
||||||
|
.{ .name = "set-view-tags", .impl = impl.setViewTags },
|
||||||
.{ .name = "spawn", .impl = impl.spawn },
|
.{ .name = "spawn", .impl = impl.spawn },
|
||||||
.{ .name = "map", .impl = impl.map },
|
|
||||||
.{ .name = "tag-view", .impl = impl.tagView },
|
|
||||||
.{ .name = "tag-view-all-tags", .impl = impl.tagViewAllTags },
|
|
||||||
.{ .name = "toggle-float", .impl = impl.toggleFloat },
|
.{ .name = "toggle-float", .impl = impl.toggleFloat },
|
||||||
.{ .name = "toggle-tag-focus", .impl = impl.toggleTagFocus },
|
.{ .name = "toggle-focused-tags", .impl = impl.toggleFocusedTags },
|
||||||
.{ .name = "toggle-view-tag", .impl = impl.toggleViewTag },
|
.{ .name = "toggle-view-tags", .impl = impl.toggleViewTags },
|
||||||
.{ .name = "zoom", .impl = impl.zoom },
|
.{ .name = "zoom", .impl = impl.zoom },
|
||||||
};
|
};
|
||||||
// zig fmt: on
|
// zig fmt: on
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
// This file is part of river, a dynamic tiling wayland compositor.
|
|
||||||
//
|
|
||||||
// Copyright 2020 Isaac Freund
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
const std = @import("std");
|
|
||||||
|
|
||||||
const Error = @import("../command.zig").Error;
|
|
||||||
const Seat = @import("../Seat.zig");
|
|
||||||
|
|
||||||
/// Set focus to all tags
|
|
||||||
pub fn focusAllTags(
|
|
||||||
allocator: *std.mem.Allocator,
|
|
||||||
seat: *Seat,
|
|
||||||
args: []const []const u8,
|
|
||||||
failure_message: *[]const u8,
|
|
||||||
) Error!void {
|
|
||||||
seat.focused_output.pending_focused_tags = 0xFFFFFFFF;
|
|
||||||
seat.input_manager.server.root.arrange();
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
// This file is part of river, a dynamic tiling wayland compositor.
|
|
||||||
//
|
|
||||||
// Copyright 2020 Isaac Freund
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
const std = @import("std");
|
|
||||||
|
|
||||||
const Error = @import("../command.zig").Error;
|
|
||||||
const Seat = @import("../Seat.zig");
|
|
||||||
|
|
||||||
/// Switch focus to the passed tag.
|
|
||||||
pub fn focusTag(
|
|
||||||
allocator: *std.mem.Allocator,
|
|
||||||
seat: *Seat,
|
|
||||||
args: []const []const u8,
|
|
||||||
failure_message: *[]const u8,
|
|
||||||
) Error!void {
|
|
||||||
if (args.len < 2) return Error.NotEnoughArguments;
|
|
||||||
if (args.len > 2) return Error.TooManyArguments;
|
|
||||||
|
|
||||||
const tag = try std.fmt.parseInt(u32, args[1], 10);
|
|
||||||
const tags = @as(u32, 1) << @intCast(u5, tag - 1);
|
|
||||||
seat.focused_output.pending_focused_tags = tags;
|
|
||||||
seat.input_manager.server.root.arrange();
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
// This file is part of river, a dynamic tiling wayland compositor.
|
|
||||||
//
|
|
||||||
// Copyright 2020 Isaac Freund
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
const std = @import("std");
|
|
||||||
|
|
||||||
const c = @import("../c.zig");
|
|
||||||
|
|
||||||
const Error = @import("../command.zig").Error;
|
|
||||||
const Seat = @import("../Seat.zig");
|
|
||||||
|
|
||||||
/// Set the tag of the focused view.
|
|
||||||
pub fn tagView(
|
|
||||||
allocator: *std.mem.Allocator,
|
|
||||||
seat: *Seat,
|
|
||||||
args: []const []const u8,
|
|
||||||
failure_message: *[]const u8,
|
|
||||||
) Error!void {
|
|
||||||
if (args.len < 2) return Error.NotEnoughArguments;
|
|
||||||
if (args.len > 2) return Error.TooManyArguments;
|
|
||||||
|
|
||||||
const tag = try std.fmt.parseInt(u32, args[1], 10);
|
|
||||||
const tags = @as(u32, 1) << @intCast(u5, tag - 1);
|
|
||||||
if (seat.focused_view) |view| {
|
|
||||||
if (view.current_tags != tags) {
|
|
||||||
view.pending_tags = tags;
|
|
||||||
seat.input_manager.server.root.arrange();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
// This file is part of river, a dynamic tiling wayland compositor.
|
|
||||||
//
|
|
||||||
// Copyright 2020 Isaac Freund
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
const std = @import("std");
|
|
||||||
|
|
||||||
const c = @import("../c.zig");
|
|
||||||
|
|
||||||
const Error = @import("../command.zig").Error;
|
|
||||||
const Seat = @import("../Seat.zig");
|
|
||||||
|
|
||||||
/// Tag the focused view with all tags.
|
|
||||||
pub fn tagViewAllTags(
|
|
||||||
allocator: *std.mem.Allocator,
|
|
||||||
seat: *Seat,
|
|
||||||
args: []const []const u8,
|
|
||||||
failure_message: *[]const u8,
|
|
||||||
) Error!void {
|
|
||||||
if (seat.focused_view) |view| {
|
|
||||||
if (view.current_tags != 0xFFFFFFFF) {
|
|
||||||
view.pending_tags = 0xFFFFFFFF;
|
|
||||||
seat.input_manager.server.root.arrange();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
102
river/command/tags.zig
Normal file
102
river/command/tags.zig
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
// This file is part of river, a dynamic tiling wayland compositor.
|
||||||
|
//
|
||||||
|
// Copyright 2020 Isaac Freund
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
const Error = @import("../command.zig").Error;
|
||||||
|
const Seat = @import("../Seat.zig");
|
||||||
|
|
||||||
|
/// Switch focus to the passed tags.
|
||||||
|
pub fn setFocusedTags(
|
||||||
|
allocator: *std.mem.Allocator,
|
||||||
|
seat: *Seat,
|
||||||
|
args: []const []const u8,
|
||||||
|
failure_message: *[]const u8,
|
||||||
|
) Error!void {
|
||||||
|
const tags = try parseTags(allocator, args, failure_message);
|
||||||
|
if (seat.focused_output.current_focused_tags != tags) {
|
||||||
|
seat.focused_output.pending_focused_tags = tags;
|
||||||
|
seat.input_manager.server.root.arrange();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the tags of the focused view.
|
||||||
|
pub fn setViewTags(
|
||||||
|
allocator: *std.mem.Allocator,
|
||||||
|
seat: *Seat,
|
||||||
|
args: []const []const u8,
|
||||||
|
failure_message: *[]const u8,
|
||||||
|
) Error!void {
|
||||||
|
const tags = try parseTags(allocator, args, failure_message);
|
||||||
|
if (seat.focused_view) |view| {
|
||||||
|
if (view.current_tags != tags) {
|
||||||
|
view.pending_tags = tags;
|
||||||
|
seat.input_manager.server.root.arrange();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Toggle focus of the passsed tags.
|
||||||
|
pub fn toggleFocusedTags(
|
||||||
|
allocator: *std.mem.Allocator,
|
||||||
|
seat: *Seat,
|
||||||
|
args: []const []const u8,
|
||||||
|
failure_message: *[]const u8,
|
||||||
|
) Error!void {
|
||||||
|
const tags = try parseTags(allocator, args, failure_message);
|
||||||
|
const output = seat.focused_output;
|
||||||
|
const new_focused_tags = output.current_focused_tags ^ tags;
|
||||||
|
if (new_focused_tags != 0) {
|
||||||
|
output.pending_focused_tags = new_focused_tags;
|
||||||
|
seat.input_manager.server.root.arrange();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Toggle the passed tags of the focused view
|
||||||
|
pub fn toggleViewTags(
|
||||||
|
allocator: *std.mem.Allocator,
|
||||||
|
seat: *Seat,
|
||||||
|
args: []const []const u8,
|
||||||
|
failure_message: *[]const u8,
|
||||||
|
) Error!void {
|
||||||
|
const tags = try parseTags(allocator, args, failure_message);
|
||||||
|
if (seat.focused_view) |view| {
|
||||||
|
const new_tags = view.current_tags ^ tags;
|
||||||
|
if (new_tags != 0) {
|
||||||
|
view.pending_tags = new_tags;
|
||||||
|
seat.input_manager.server.root.arrange();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parseTags(
|
||||||
|
allocator: *std.mem.Allocator,
|
||||||
|
args: []const []const u8,
|
||||||
|
failure_message: *[]const u8,
|
||||||
|
) Error!u32 {
|
||||||
|
if (args.len < 2) return Error.NotEnoughArguments;
|
||||||
|
if (args.len > 2) return Error.TooManyArguments;
|
||||||
|
|
||||||
|
const tags = try std.fmt.parseInt(u32, args[1], 10);
|
||||||
|
|
||||||
|
if (tags == 0) {
|
||||||
|
failure_message.* = try std.fmt.allocPrint(allocator, "tagmask may not be 0", .{});
|
||||||
|
return Error.CommandFailed;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tags;
|
||||||
|
}
|
|
@ -1,43 +0,0 @@
|
||||||
// This file is part of river, a dynamic tiling wayland compositor.
|
|
||||||
//
|
|
||||||
// Copyright 2020 Isaac Freund
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
const std = @import("std");
|
|
||||||
|
|
||||||
const c = @import("../c.zig");
|
|
||||||
|
|
||||||
const Error = @import("../command.zig").Error;
|
|
||||||
const Seat = @import("../Seat.zig");
|
|
||||||
|
|
||||||
/// Toggle focus of the passsed tags.
|
|
||||||
pub fn toggleTagFocus(
|
|
||||||
allocator: *std.mem.Allocator,
|
|
||||||
seat: *Seat,
|
|
||||||
args: []const []const u8,
|
|
||||||
failure_message: *[]const u8,
|
|
||||||
) Error!void {
|
|
||||||
if (args.len < 2) return Error.NotEnoughArguments;
|
|
||||||
if (args.len > 2) return Error.TooManyArguments;
|
|
||||||
|
|
||||||
const tag = try std.fmt.parseInt(u32, args[1], 10);
|
|
||||||
const tags = @as(u32, 1) << @intCast(u5, tag - 1);
|
|
||||||
const output = seat.focused_output;
|
|
||||||
const new_focused_tags = output.current_focused_tags ^ tags;
|
|
||||||
if (new_focused_tags != 0) {
|
|
||||||
output.pending_focused_tags = new_focused_tags;
|
|
||||||
seat.input_manager.server.root.arrange();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
// This file is part of river, a dynamic tiling wayland compositor.
|
|
||||||
//
|
|
||||||
// Copyright 2020 Isaac Freund
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General Public License
|
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
const std = @import("std");
|
|
||||||
|
|
||||||
const c = @import("../c.zig");
|
|
||||||
|
|
||||||
const Error = @import("../command.zig").Error;
|
|
||||||
const Seat = @import("../Seat.zig");
|
|
||||||
|
|
||||||
/// Toggle the passed tag of the focused view
|
|
||||||
pub fn toggleViewTag(
|
|
||||||
allocator: *std.mem.Allocator,
|
|
||||||
seat: *Seat,
|
|
||||||
args: []const []const u8,
|
|
||||||
failure_message: *[]const u8,
|
|
||||||
) Error!void {
|
|
||||||
if (args.len < 2) return Error.NotEnoughArguments;
|
|
||||||
if (args.len > 2) return Error.TooManyArguments;
|
|
||||||
|
|
||||||
const tag = try std.fmt.parseInt(u32, args[1], 10);
|
|
||||||
const tags = @as(u32, 1) << @intCast(u5, tag - 1);
|
|
||||||
if (seat.focused_view) |view| {
|
|
||||||
const new_tags = view.current_tags ^ tags;
|
|
||||||
if (new_tags != 0) {
|
|
||||||
view.pending_tags = new_tags;
|
|
||||||
seat.input_manager.server.root.arrange();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue