mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-07-09 14:42:44 +02:00
perf(wm): ignore same-workspace switch requests
This commit ensures that if a user uses index-based commands to switch workspaces, workspace layout update code paths will not be run if the user is already on the desired monitor and workspace indices. resolve #647
This commit is contained in:
@@ -650,7 +650,9 @@ impl WindowManager {
|
|||||||
self.focus_monitor(monitor_idx)?;
|
self.focus_monitor(monitor_idx)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.focus_workspace(workspace_idx)?;
|
if self.focused_workspace_idx().unwrap_or_default() != workspace_idx {
|
||||||
|
self.focus_workspace(workspace_idx)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
SocketMessage::FocusWorkspaceNumbers(workspace_idx) => {
|
SocketMessage::FocusWorkspaceNumbers(workspace_idx) => {
|
||||||
// This is to ensure that even on an empty workspace on a secondary monitor, the
|
// This is to ensure that even on an empty workspace on a secondary monitor, the
|
||||||
@@ -672,8 +674,15 @@ impl WindowManager {
|
|||||||
self.focus_workspace(workspace_idx)?;
|
self.focus_workspace(workspace_idx)?;
|
||||||
}
|
}
|
||||||
SocketMessage::FocusMonitorWorkspaceNumber(monitor_idx, workspace_idx) => {
|
SocketMessage::FocusMonitorWorkspaceNumber(monitor_idx, workspace_idx) => {
|
||||||
self.focus_monitor(monitor_idx)?;
|
let focused_monitor_idx = self.focused_monitor_idx();
|
||||||
self.focus_workspace(workspace_idx)?;
|
let focused_workspace_idx = self.focused_workspace_idx().unwrap_or_default();
|
||||||
|
|
||||||
|
let focused_pair = (focused_monitor_idx, focused_workspace_idx);
|
||||||
|
|
||||||
|
if focused_pair != (monitor_idx, workspace_idx) {
|
||||||
|
self.focus_monitor(monitor_idx)?;
|
||||||
|
self.focus_workspace(workspace_idx)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
SocketMessage::FocusNamedWorkspace(ref name) => {
|
SocketMessage::FocusNamedWorkspace(ref name) => {
|
||||||
if let Some((monitor_idx, workspace_idx)) =
|
if let Some((monitor_idx, workspace_idx)) =
|
||||||
|
|||||||
@@ -2317,6 +2317,13 @@ impl WindowManager {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn focused_workspace_idx(&self) -> Result<usize> {
|
||||||
|
Ok(self
|
||||||
|
.focused_monitor()
|
||||||
|
.ok_or_else(|| anyhow!("there is no monitor"))?
|
||||||
|
.focused_workspace_idx())
|
||||||
|
}
|
||||||
|
|
||||||
pub fn focused_workspace(&self) -> Result<&Workspace> {
|
pub fn focused_workspace(&self) -> Result<&Workspace> {
|
||||||
self.focused_monitor()
|
self.focused_monitor()
|
||||||
.ok_or_else(|| anyhow!("there is no monitor"))?
|
.ok_or_else(|| anyhow!("there is no monitor"))?
|
||||||
|
|||||||
Reference in New Issue
Block a user