feat(wm): add promote-focus command

This commit adds a promote-focus command to complement the promote
command.

resolve #203
This commit is contained in:
LGUG2Z
2022-08-13 17:10:12 -07:00
parent be5945c64b
commit 458d1ef80a
5 changed files with 29 additions and 0 deletions

View File

@@ -52,6 +52,7 @@ pub enum SocketMessage {
SendContainerToMonitorWorkspaceNumber(usize, usize),
MoveWorkspaceToMonitorNumber(usize),
Promote,
PromoteFocus,
ToggleFloat,
ToggleMonocle,
ToggleMaximize,

View File

@@ -111,6 +111,7 @@ impl WindowManager {
match message {
SocketMessage::Promote => self.promote_container_to_front()?,
SocketMessage::PromoteFocus => self.promote_focus_to_front()?,
SocketMessage::FocusWindow(direction) => {
self.focus_container_in_direction(direction)?;
}
@@ -805,6 +806,7 @@ impl WindowManager {
| SocketMessage::ToggleMonocle
| SocketMessage::ToggleMaximize
| SocketMessage::Promote
| SocketMessage::PromoteFocus
| SocketMessage::Retile
| SocketMessage::InvisibleBorders(_)
| SocketMessage::WorkAreaOffset(_)

View File

@@ -1251,6 +1251,23 @@ impl WindowManager {
self.update_focused_workspace(self.mouse_follows_focus)
}
#[tracing::instrument(skip(self))]
pub fn promote_focus_to_front(&mut self) -> Result<()> {
self.handle_unmanaged_window_behaviour()?;
tracing::info!("promoting focus");
let workspace = self.focused_workspace_mut()?;
let target_idx = match workspace.layout() {
Layout::Default(_) => 0,
Layout::Custom(custom) => custom
.first_container_idx(custom.primary_idx().map_or(0, |primary_idx| primary_idx)),
};
workspace.focus_container(target_idx);
self.update_focused_workspace(self.mouse_follows_focus)
}
#[tracing::instrument(skip(self))]
pub fn remove_window_from_container(&mut self) -> Result<()> {
self.handle_unmanaged_window_behaviour()?;

View File

@@ -164,6 +164,10 @@ Promote() {
Run, komorebic.exe promote, , Hide
}
PromoteFocus() {
Run, komorebic.exe promote-focus, , Hide
}
Retile() {
Run, komorebic.exe retile, , Hide
}

View File

@@ -594,6 +594,8 @@ enum SubCommand {
FlipLayout(FlipLayout),
/// Promote the focused window to the top of the tree
Promote,
/// Promote the user focus to the top of the tree
PromoteFocus,
/// Force the retiling of all managed windows
Retile,
/// Create at least this many workspaces for the specified monitor
@@ -769,6 +771,9 @@ fn main() -> Result<()> {
SubCommand::Promote => {
send_message(&SocketMessage::Promote.as_bytes()?)?;
}
SubCommand::PromoteFocus => {
send_message(&SocketMessage::PromoteFocus.as_bytes()?)?;
}
SubCommand::TogglePause => {
send_message(&SocketMessage::TogglePause.as_bytes()?)?;
}