config: add focus-tiles action
This commit is contained in:
parent
bd85db5b59
commit
57a49d5299
11 changed files with 61 additions and 1 deletions
|
|
@ -383,6 +383,10 @@ impl ConfigClient {
|
|||
self.send(&ClientMessage::SeatFocusLayerRel { seat, direction });
|
||||
}
|
||||
|
||||
pub fn seat_focus_tiles(&self, seat: Seat) {
|
||||
self.send(&ClientMessage::SeatFocusTiles { seat });
|
||||
}
|
||||
|
||||
pub fn seat_focus(&self, seat: Seat, direction: Direction) {
|
||||
self.send(&ClientMessage::SeatFocus { seat, direction });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -741,6 +741,9 @@ pub enum ClientMessage<'a> {
|
|||
seat: Seat,
|
||||
direction: LayerDirection,
|
||||
},
|
||||
SeatFocusTiles {
|
||||
seat: Seat,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
|
|
|
|||
|
|
@ -316,6 +316,11 @@ impl Seat {
|
|||
get!().seat_focus_layer_rel(self, direction)
|
||||
}
|
||||
|
||||
/// Moves the keyboard focus to the tile layer.
|
||||
pub fn focus_tiles(self) {
|
||||
get!().seat_focus_tiles(self)
|
||||
}
|
||||
|
||||
/// Moves the keyboard focus of the seat in the specified direction.
|
||||
pub fn focus(self, direction: Direction) {
|
||||
get!().seat_focus(self, direction)
|
||||
|
|
|
|||
|
|
@ -2198,6 +2198,12 @@ impl ConfigProxyHandler {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
fn handle_seat_focus_tiles(&self, seat: Seat) -> Result<(), CphError> {
|
||||
let seat = self.get_seat(seat)?;
|
||||
seat.focus_tiles();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn spaces_change(&self) {
|
||||
struct V;
|
||||
impl NodeVisitorBase for V {
|
||||
|
|
@ -3055,6 +3061,9 @@ impl ConfigProxyHandler {
|
|||
ClientMessage::SeatFocusLayerRel { seat, direction } => self
|
||||
.handle_seat_focus_layer_rel(seat, direction)
|
||||
.wrn("seat_focus_layer_rel")?,
|
||||
ClientMessage::SeatFocusTiles { seat } => {
|
||||
self.handle_seat_focus_tiles(seat).wrn("seat_focus_tiles")?
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -936,6 +936,32 @@ impl WlSeatGlobal {
|
|||
);
|
||||
}
|
||||
|
||||
pub fn focus_tiles(self: &Rc<Self>) {
|
||||
let current = self.keyboard_node.get();
|
||||
if matches!(
|
||||
current.node_layer().layer(),
|
||||
NodeLayer::Tiled | NodeLayer::Fullscreen,
|
||||
) {
|
||||
return;
|
||||
}
|
||||
let Some(output) = current.node_output() else {
|
||||
return;
|
||||
};
|
||||
let Some(ws) = output.workspace.get() else {
|
||||
return;
|
||||
};
|
||||
let node = match ws.fullscreen.get() {
|
||||
Some(fs) => fs as Rc<dyn Node>,
|
||||
_ => match ws.container.get() {
|
||||
Some(c) => c,
|
||||
_ => return,
|
||||
},
|
||||
};
|
||||
if node.node_visible() && node.node_accepts_focus() {
|
||||
node.node_do_focus(self, Direction::Unspecified);
|
||||
}
|
||||
}
|
||||
|
||||
fn set_selection_<T, X, S>(
|
||||
self: &Rc<Self>,
|
||||
field: &CloneCell<Option<Rc<dyn DynDataSource>>>,
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@ pub enum SimpleCommand {
|
|||
ToggleBar,
|
||||
FocusHistory(Timeline),
|
||||
FocusLayerRel(LayerDirection),
|
||||
FocusTiles,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
|
|
|||
|
|
@ -141,6 +141,7 @@ impl ActionParser<'_> {
|
|||
"focus-next" => FocusHistory(Timeline::Newer),
|
||||
"focus-below" => FocusLayerRel(LayerDirection::Below),
|
||||
"focus-above" => FocusLayerRel(LayerDirection::Above),
|
||||
"focus-tiles" => FocusTiles,
|
||||
_ => {
|
||||
return Err(
|
||||
ActionParserError::UnknownSimpleAction(string.to_string()).spanned(span)
|
||||
|
|
|
|||
|
|
@ -164,6 +164,10 @@ impl Action {
|
|||
let persistent = state.persistent.clone();
|
||||
B::new(move || persistent.seat.focus_layer_rel(direction))
|
||||
}
|
||||
SimpleCommand::FocusTiles => {
|
||||
let persistent = state.persistent.clone();
|
||||
B::new(move || persistent.seat.focus_tiles())
|
||||
}
|
||||
},
|
||||
Action::Multi { actions } => {
|
||||
let actions: Vec<_> = actions.into_iter().map(|a| a.into_fn(state)).collect();
|
||||
|
|
|
|||
|
|
@ -1616,7 +1616,8 @@
|
|||
"focus-prev",
|
||||
"focus-next",
|
||||
"focus-below",
|
||||
"focus-above"
|
||||
"focus-above",
|
||||
"focus-tiles"
|
||||
]
|
||||
},
|
||||
"Status": {
|
||||
|
|
|
|||
|
|
@ -3683,6 +3683,10 @@ The string should have one of the following values:
|
|||
|
||||
Focuses the layer above the currently focused layer.
|
||||
|
||||
- `focus-tiles`:
|
||||
|
||||
Focuses the tile layer.
|
||||
|
||||
|
||||
|
||||
<a name="types-Status"></a>
|
||||
|
|
|
|||
|
|
@ -868,6 +868,8 @@ SimpleActionName:
|
|||
description: Focuses the layer below the currently focused layer.
|
||||
- value: focus-above
|
||||
description: Focuses the layer above the currently focused layer.
|
||||
- value: focus-tiles
|
||||
description: Focuses the tile layer.
|
||||
|
||||
|
||||
Color:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue