shell/tiling: Add option to toggle orientation
This commit is contained in:
parent
01b34aadd2
commit
0c47631d9b
5 changed files with 25 additions and 5 deletions
|
|
@ -31,9 +31,7 @@
|
|||
(modifiers: [Logo], key: "j"): Focus(Down),
|
||||
(modifiers: [Logo], key: "k"): Focus(Up),
|
||||
(modifiers: [Logo], key: "l"): Focus(Right),
|
||||
//TODO: automatic orientation with Logo+o toggling
|
||||
(modifiers: [Logo], key: "v"): Orientation(Vertical),
|
||||
(modifiers: [Logo], key: "o"): Orientation(Horizontal),
|
||||
(modifiers: [Logo], key: "o"): ToggleOrientation,
|
||||
(modifiers: [Logo], key: "y"): ToggleTiling,
|
||||
(modifiers: [Logo], key: "g"): ToggleWindowFloating,
|
||||
(modifiers: [Logo, Shift], key: "f"): Fullscreen,
|
||||
|
|
|
|||
|
|
@ -785,6 +785,7 @@ pub enum Action {
|
|||
Workspace(u8),
|
||||
MoveToWorkspace(u8),
|
||||
Focus(FocusDirection),
|
||||
ToggleOrientation,
|
||||
Orientation(crate::shell::layout::Orientation),
|
||||
ToggleTiling,
|
||||
ToggleWindowFloating,
|
||||
|
|
|
|||
|
|
@ -373,12 +373,22 @@ impl State {
|
|||
workspace.fullscreen_toggle(&window, ¤t_output);
|
||||
}
|
||||
}
|
||||
Action::ToggleOrientation => {
|
||||
let output = seat.active_output();
|
||||
let workspace = self.common.shell.active_space_mut(&output);
|
||||
let focus_stack = workspace.focus_stack.get(seat);
|
||||
workspace.tiling_layer.update_orientation(
|
||||
None,
|
||||
&seat,
|
||||
focus_stack.iter(),
|
||||
);
|
||||
}
|
||||
Action::Orientation(orientation) => {
|
||||
let output = seat.active_output();
|
||||
let workspace = self.common.shell.active_space_mut(&output);
|
||||
let focus_stack = workspace.focus_stack.get(seat);
|
||||
workspace.tiling_layer.update_orientation(
|
||||
orientation,
|
||||
Some(orientation),
|
||||
&seat,
|
||||
focus_stack.iter(),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,16 @@ pub enum Orientation {
|
|||
Vertical,
|
||||
}
|
||||
|
||||
impl std::ops::Not for Orientation {
|
||||
type Output = Self;
|
||||
fn not(self) -> Self::Output {
|
||||
match self {
|
||||
Orientation::Horizontal => Orientation::Vertical,
|
||||
Orientation::Vertical => Orientation::Horizontal,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lazy_static::lazy_static! {
|
||||
static ref EXCEPTIONS_APPID: RegexSet = RegexSet::new(&[
|
||||
r"Authy Desktop",
|
||||
|
|
|
|||
|
|
@ -570,7 +570,7 @@ impl TilingLayout {
|
|||
|
||||
pub fn update_orientation<'a>(
|
||||
&mut self,
|
||||
new_orientation: Orientation,
|
||||
new_orientation: Option<Orientation>,
|
||||
seat: &Seat<State>,
|
||||
focus_stack: impl Iterator<Item = &'a CosmicMapped> + 'a,
|
||||
) {
|
||||
|
|
@ -589,6 +589,7 @@ impl TilingLayout {
|
|||
Orientation::Horizontal => last_geometry.size.h,
|
||||
Orientation::Vertical => last_geometry.size.w,
|
||||
};
|
||||
let new_orientation = new_orientation.unwrap_or(!*orientation);
|
||||
let new_length = match new_orientation {
|
||||
Orientation::Horizontal => last_geometry.size.h,
|
||||
Orientation::Vertical => last_geometry.size.w,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue