Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always on top feature #829

Open
wants to merge 138 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
0eccc2a
initial commit
pro470 May 16, 2024
67ba6f2
Merge branch 'LGUG2Z:master' into master
pro470 May 16, 2024
11a0dc7
some fixes and event
pro470 May 16, 2024
a68c646
Merge remote-tracking branch 'origin/master'
pro470 May 16, 2024
bc1a7d2
some fixes
pro470 May 16, 2024
1a00dd3
some fixes
pro470 May 17, 2024
d167e24
some fixes and add always on top feature for floating windows
pro470 May 17, 2024
c84688d
Merge branch 'LGUG2Z:master' into master
pro470 May 17, 2024
faf4efe
some fixes
pro470 May 17, 2024
f9a2559
Merge branch 'LGUG2Z:master' into master
pro470 May 19, 2024
aa6e286
Merge branch 'LGUG2Z:master' into master
pro470 May 20, 2024
b9478b0
some fixes
pro470 May 20, 2024
449ed63
some fixes
pro470 May 20, 2024
3de2a4c
some fixes
pro470 May 20, 2024
6d4e548
some fixes
pro470 May 20, 2024
57aeff1
some fixes
pro470 May 20, 2024
04b39b0
Merge branch 'LGUG2Z:master' into master
pro470 May 20, 2024
d243a70
some fixes
pro470 May 22, 2024
acf5eef
Merge branch 'LGUG2Z:master' into master
pro470 May 22, 2024
7ce1cef
Merge branch 'LGUG2Z:master' into master
pro470 May 23, 2024
48624a8
some fixes
pro470 May 23, 2024
31a4b67
Merge branch 'LGUG2Z:master' into master
pro470 May 25, 2024
bd24cdd
Merge branch 'LGUG2Z:master' into master
pro470 May 26, 2024
458cac9
fix(cli): respect named ws send behaviour
LGUG2Z May 29, 2024
8b623ca
Merge branch 'LGUG2Z:master' into master
pro470 May 30, 2024
13d7271
Merge branch 'master' into master
pro470 May 31, 2024
c443972
some fixes
pro470 May 31, 2024
8f330ff
Merge branch 'LGUG2Z:master' into master
pro470 Jun 2, 2024
4c9b3d6
Merge branch 'LGUG2Z:master' into master
pro470 Jun 3, 2024
294f626
Merge branch 'master' into master
pro470 Jun 5, 2024
7c4cb79
added the command to change focus to the window with the specified ex…
pro470 Jun 5, 2024
3c1df8f
some fixes
pro470 Jun 5, 2024
3fe0188
some fixes
pro470 Jun 5, 2024
8f8fc21
some fixes
pro470 Jun 5, 2024
07ff5d4
some fixes
pro470 Jun 6, 2024
493531e
refactor(wm): use bounded channels
LGUG2Z Jun 8, 2024
5f8cb84
Merge branch 'LGUG2Z:master' into master
pro470 Jun 9, 2024
21cf972
Merge branch 'master' into master
pro470 Jun 9, 2024
f379fdb
Merge branch 'LGUG2Z:master' into master
pro470 Jun 12, 2024
e01e9e7
some fixes
pro470 Jun 16, 2024
b738ef4
Merge remote-tracking branch 'origin/master'
pro470 Jun 16, 2024
0c9a45b
some fixes
pro470 Jun 17, 2024
5294e10
some fixes
pro470 Jun 17, 2024
fe6a5ac
Merge branch 'LGUG2Z:master' into master
pro470 Jun 18, 2024
6fb1ac4
Merge branch 'LGUG2Z:master' into master
pro470 Jun 19, 2024
39300cc
Merge branch 'LGUG2Z:master' into master
pro470 Jun 19, 2024
2a8e833
Merge branch 'master' into master
pro470 Jun 21, 2024
5ac0f08
some fixes
pro470 Jun 24, 2024
af17e00
Merge remote-tracking branch 'upstream/master'
pro470 Jun 24, 2024
6c55a8e
some fixes
pro470 Jun 24, 2024
29d3941
Merge remote-tracking branch 'upstream/master'
pro470 Jun 24, 2024
d6ee076
some fixes
pro470 Jun 24, 2024
9eacd35
some fixes
pro470 Jun 25, 2024
9be071e
Merge remote-tracking branch 'upstream/master'
pro470 Jun 26, 2024
9353ab7
Merge remote-tracking branch 'upstream/master'
pro470 Jun 27, 2024
f0cb18c
Merge remote-tracking branch 'upstream/master'
pro470 Jul 3, 2024
9eed022
Merge remote-tracking branch 'upstream/master'
pro470 Jul 5, 2024
182eb2b
Merge remote-tracking branch 'upstream/master'
pro470 Jul 9, 2024
3f83904
fixed the workspace rules but when komorebi stats but found out when …
pro470 Jul 9, 2024
e9eca8f
Merge remote-tracking branch 'upstream/master'
pro470 Jul 10, 2024
62c1618
Merge remote-tracking branch 'upstream/master'
pro470 Jul 11, 2024
bf59eb8
fix(animation): disable on cross-monitor ops
LGUG2Z Jul 12, 2024
7d97b8d
Merge remote-tracking branch 'upstream/master'
pro470 Jul 12, 2024
b8b31d7
fix merge conflicts
pro470 Jul 13, 2024
a7563e5
Merge remote-tracking branch 'upstream/master'
pro470 Jul 16, 2024
ff35559
fix merge conflicts
pro470 Jul 16, 2024
883e527
Merge remote-tracking branch 'upstream/master'
pro470 Jul 22, 2024
4d9edbc
Merge remote-tracking branch 'upstream/master'
pro470 Jul 23, 2024
e2f7ad7
Merge remote-tracking branch 'upstream/master'
pro470 Jul 25, 2024
d8fe905
Merge remote-tracking branch 'upstream/master'
pro470 Jul 27, 2024
1b214be
Merge remote-tracking branch 'upstream/master'
pro470 Aug 3, 2024
030de2b
Merge remote-tracking branch 'upstream/master'
pro470 Aug 6, 2024
01b0819
Merge remote-tracking branch 'upstream/master'
pro470 Aug 6, 2024
679e674
Merge remote-tracking branch 'upstream/master'
pro470 Aug 7, 2024
e647d4e
fix(wm): socket cleanup on exit
LGUG2Z Aug 10, 2024
df7b935
Merge remote-tracking branch 'upstream/master'
pro470 Aug 10, 2024
2bfcfe7
Merge remote-tracking branch 'upstream/master'
pro470 Aug 13, 2024
9260b68
fix(animation): enable cross-monitor animations
thearturca Jul 23, 2024
6390163
Merge remote-tracking branch 'upstream/master'
pro470 Aug 25, 2024
ea06d97
fix merge conflicts
pro470 Aug 27, 2024
a564a49
fix merge conflicts
pro470 Aug 28, 2024
bfd1cdf
Merge remote-tracking branch 'upstream/master'
pro470 Sep 14, 2024
a34a073
Merge remote-tracking branch 'upstream/master'
pro470 Sep 15, 2024
8b75fa6
Merge remote-tracking branch 'upstream/master'
pro470 Sep 16, 2024
d1a2a17
fix(bar): use custom windows-icons w/o panics
LGUG2Z Sep 16, 2024
6ba1172
Merge remote-tracking branch 'upstream/master'
pro470 Sep 17, 2024
08f4fb1
feat(wm): add replace configuration socket message
LGUG2Z Sep 18, 2024
38f92c7
fix merge conflicts
pro470 Sep 18, 2024
0f3d703
feat(wm): add replace configuration socket message
LGUG2Z Sep 18, 2024
b944eee
Merge remote-tracking branch 'upstream/master'
pro470 Sep 18, 2024
e489650
fix merge conflicts
pro470 Sep 19, 2024
a35f25e
fix merge conflicts
pro470 Sep 19, 2024
7378411
Merge remote-tracking branch 'upstream/master'
pro470 Sep 20, 2024
f3d6eb0
Merge remote-tracking branch 'upstream/master'
pro470 Sep 21, 2024
22c1d5f
fix(bar): use truncated labels for titles
LGUG2Z Sep 21, 2024
1ad8aa4
Merge remote-tracking branch 'upstream/master'
pro470 Sep 22, 2024
164c5b8
fix merge conflicts
pro470 Sep 23, 2024
a4eb0ec
Merge remote-tracking branch 'upstream/master'
pro470 Sep 25, 2024
08593d1
Merge remote-tracking branch 'upstream/master'
pro470 Sep 25, 2024
409b835
Merge remote-tracking branch 'upstream/master'
pro470 Sep 26, 2024
2fdfe9a
Merge remote-tracking branch 'upstream/master'
pro470 Sep 27, 2024
b39a6f0
Merge remote-tracking branch 'upstream/master'
pro470 Sep 28, 2024
071dcb1
Merge remote-tracking branch 'upstream/master'
pro470 Sep 29, 2024
2cdb300
Merge remote-tracking branch 'upstream/master'
pro470 Oct 3, 2024
861d415
chore(cargo): enable lto for release builds
LGUG2Z Oct 6, 2024
75d5971
refactor(bar): use native apis for positioning
LGUG2Z Oct 6, 2024
2f0a930
feat(config): add bar configurations opt
LGUG2Z Oct 6, 2024
46e6d89
fix(wm): update monitor focus before focus-stack-window
alex-ds13 Oct 7, 2024
d9f6392
Merge remote-tracking branch 'upstream/master'
pro470 Oct 7, 2024
c6e76d2
fix(wm): ignore minimize calls on komorebi-bar
LGUG2Z Oct 7, 2024
400f901
refactor(wm): standardize config env var handling
LGUG2Z Oct 8, 2024
98a2aa4
feat(bar): add cpu widget
CtByte Oct 8, 2024
8d5e40e
chore(deps): bump eframe from 0.28 to 0.29
LGUG2Z Oct 8, 2024
30e09d9
feat(wm): delete stale sub socket files
LGUG2Z Oct 8, 2024
13b7bef
Merge remote-tracking branch 'upstream/master'
pro470 Oct 9, 2024
8752bbb
feat(bar): add more logging around error paths
LGUG2Z Oct 9, 2024
dc6e326
chore(deps): cargo update
LGUG2Z Oct 10, 2024
24da24f
docs(github): update issue templates
LGUG2Z Oct 10, 2024
8c6e858
Merge remote-tracking branch 'upstream/master'
pro470 Oct 10, 2024
26a8912
feat(bar): add label prefix config opt
CtByte Oct 9, 2024
67c4869
Merge remote-tracking branch 'upstream/master'
pro470 Oct 11, 2024
0e1874d
docs(github): update issue templates
LGUG2Z Oct 10, 2024
4aed288
feat(bar): add label prefix config opt
CtByte Oct 9, 2024
bb52183
feat(wm): separate floating and ignored apps
LGUG2Z Sep 29, 2024
51c3b12
feat(wm): add float override option
alex-ds13 Sep 4, 2024
4f0e204
fix(wm): check exhaustively for ws emptiness
alex-ds13 Oct 10, 2024
1406dbf
fix(wm): allow cross-monitor floating window moves
alex-ds13 Oct 10, 2024
929c1c9
feat(config): add floating border colour opt
alex-ds13 Oct 10, 2024
f07e18d
docs(schema): update all json schemas
LGUG2Z Oct 11, 2024
97e8c36
chore(cargo): +nightly fmt
LGUG2Z Oct 11, 2024
39b549f
docs(cli): highlight eol features in start + check
LGUG2Z Oct 11, 2024
b5c0ae6
chore(cargo): suppress macro lint warnings
LGUG2Z Oct 11, 2024
dcd1144
fix(cli): update fetch-asc output to use '/'
LGUG2Z Oct 11, 2024
95fdb64
feat(client): add subscribe_with_options
LGUG2Z Oct 11, 2024
f7a66cb
fix merge conflicts
pro470 Oct 13, 2024
9dd2957
Merge remote-tracking branch 'upstream/master'
pro470 Oct 13, 2024
435925a
fix merge conflicts
pro470 Oct 16, 2024
6e80f38
Merge branch 'master' of https://github.com/LGUG2Z/komorebi
pro470 Oct 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,6 @@ features = [
"Media",
"Media_Control"
]

[profile.release]
lto = true
3 changes: 3 additions & 0 deletions komorebi/src/core/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ pub enum SocketMessage {
FocusStackWindow(usize),
StackAll,
UnstackAll,
FocusExe(Option<String>, Option<isize>),
DisplayMonitorWorkspaceNumber(usize,usize),
ResizeWindowEdge(OperationDirection, Sizing),
ResizeWindowAxis(Axis, Sizing),
MoveContainerToMonitorNumber(usize),
Expand All @@ -77,6 +79,7 @@ pub enum SocketMessage {
ToggleFloat,
ToggleMonocle,
ToggleMaximize,
ToggleAlwaysOnTop,
ToggleWindowContainerBehaviour,
ToggleFloatOverride,
WindowHidingBehaviour(HidingBehaviour),
Expand Down
37 changes: 37 additions & 0 deletions komorebi/src/process_command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -217,9 +217,16 @@ impl WindowManager {
self.focus_container_in_direction(direction)?;
self.promote_container_to_front()?
}
SocketMessage::DisplayMonitorWorkspaceNumber(monitor_idx, workspace_idx) => {
self.send_always_on_top(Option::from(monitor_idx), Option::from(workspace_idx), None)?;
self.display_monitor_workspace(monitor_idx, workspace_idx)?;
}
SocketMessage::FocusWindow(direction) => {
self.focus_container_in_direction(direction)?;
}
SocketMessage::FocusExe( ref exe, hwnd) => {
self.focus_window_from_exe(exe, hwnd)?;
}
SocketMessage::MoveWindow(direction) => {
self.move_container_in_direction(direction)?;
}
Expand Down Expand Up @@ -263,6 +270,7 @@ impl WindowManager {
SocketMessage::ToggleFloat => self.toggle_float()?,
SocketMessage::ToggleMonocle => self.toggle_monocle()?,
SocketMessage::ToggleMaximize => self.toggle_maximize()?,
SocketMessage::ToggleAlwaysOnTop => self.toggle_always_on_top()?,
SocketMessage::ContainerPadding(monitor_idx, workspace_idx, size) => {
self.set_container_padding(monitor_idx, workspace_idx, size)?;
}
Expand Down Expand Up @@ -500,6 +508,7 @@ impl WindowManager {
}
SocketMessage::MoveContainerToWorkspaceNumber(workspace_idx) => {
self.move_container_to_workspace(workspace_idx, true, None)?;
self.send_always_on_top(None, Some(workspace_idx), Some(true))?;
}
SocketMessage::CycleMoveContainerToWorkspace(direction) => {
let focused_monitor = self
Expand All @@ -516,8 +525,11 @@ impl WindowManager {
);

self.move_container_to_workspace(workspace_idx, true, None)?;
self.send_always_on_top(None, Some(workspace_idx), Some(true))?;

}
SocketMessage::MoveContainerToMonitorNumber(monitor_idx) => {
self.send_always_on_top(Some(monitor_idx), None, Some(true))?;
self.move_container_to_monitor(monitor_idx, None, true)?;
}
SocketMessage::SwapWorkspacesToMonitorNumber(monitor_idx) => {
Expand All @@ -530,10 +542,13 @@ impl WindowManager {
.ok_or_else(|| anyhow!("there must be at least one monitor"))?,
);

self.send_always_on_top(Some(monitor_idx), None, Some(true))?;

self.move_container_to_monitor(monitor_idx, None, true)?;
}
SocketMessage::SendContainerToWorkspaceNumber(workspace_idx) => {
self.move_container_to_workspace(workspace_idx, false, None)?;
self.send_always_on_top(None, Some(workspace_idx), Some(false))?;
}
SocketMessage::CycleSendContainerToWorkspace(direction) => {
let focused_monitor = self
Expand All @@ -550,8 +565,11 @@ impl WindowManager {
);

self.move_container_to_workspace(workspace_idx, false, None)?;
self.send_always_on_top(None, Some(workspace_idx), Some(false))?;

}
SocketMessage::SendContainerToMonitorNumber(monitor_idx) => {
self.send_always_on_top(Some(monitor_idx), None, Some(false))?;
self.move_container_to_monitor(monitor_idx, None, false)?;
}
SocketMessage::CycleSendContainerToMonitor(direction) => {
Expand All @@ -561,18 +579,23 @@ impl WindowManager {
.ok_or_else(|| anyhow!("there must be at least one monitor"))?,
);

self.send_always_on_top(Some(monitor_idx), None, Some(false))?;

self.move_container_to_monitor(monitor_idx, None, false)?;
}
SocketMessage::SendContainerToMonitorWorkspaceNumber(monitor_idx, workspace_idx) => {
self.send_always_on_top(Some(monitor_idx), Some(workspace_idx), Some(false))?;
self.move_container_to_monitor(monitor_idx, Option::from(workspace_idx), false)?;
}
SocketMessage::MoveContainerToMonitorWorkspaceNumber(monitor_idx, workspace_idx) => {
self.send_always_on_top(Some(monitor_idx), Some(workspace_idx), Some(true))?;
self.move_container_to_monitor(monitor_idx, Option::from(workspace_idx), true)?;
}
SocketMessage::SendContainerToNamedWorkspace(ref workspace) => {
if let Some((monitor_idx, workspace_idx)) =
self.monitor_workspace_index_by_name(workspace)
{
self.send_always_on_top(Some(monitor_idx), Some(workspace_idx), Some(false))?;
self.move_container_to_monitor(
monitor_idx,
Option::from(workspace_idx),
Expand All @@ -584,6 +607,7 @@ impl WindowManager {
if let Some((monitor_idx, workspace_idx)) =
self.monitor_workspace_index_by_name(workspace)
{
self.send_always_on_top(Some(monitor_idx), Some(workspace_idx), Some(true))?;
self.move_container_to_monitor(monitor_idx, Option::from(workspace_idx), true)?;
}
}
Expand Down Expand Up @@ -758,6 +782,8 @@ impl WindowManager {
.ok_or_else(|| anyhow!("there must be at least one workspace"))?,
);

self.send_always_on_top(None, Option::from(workspace_idx), None)?;

self.focus_workspace(workspace_idx)?;
}
SocketMessage::FocusLastWorkspace => {
Expand All @@ -775,6 +801,7 @@ impl WindowManager {

if let Some(monitor) = self.focused_monitor_mut() {
if let Some(last_focused_workspace) = monitor.last_focused_workspace() {
self.send_always_on_top(None, Option::from(last_focused_workspace), None)?;
self.focus_workspace(last_focused_workspace)?;
}
}
Expand All @@ -792,6 +819,7 @@ impl WindowManager {
}

if self.focused_workspace_idx().unwrap_or_default() != workspace_idx {
self.send_always_on_top(None, Option::from(workspace_idx), None)?;
self.focus_workspace(workspace_idx)?;
}
}
Expand All @@ -805,13 +833,20 @@ impl WindowManager {

let focused_monitor_idx = self.focused_monitor_idx();

for i in 0..self.monitors.elements().len() {
if i != focused_monitor_idx {
self.send_always_on_top(Option::from(i), Option::from(workspace_idx), None)?;
}
}

for (i, monitor) in self.monitors_mut().iter_mut().enumerate() {
if i != focused_monitor_idx {
monitor.focus_workspace(workspace_idx)?;
monitor.load_focused_workspace(false)?;
}
}

self.send_always_on_top(Option::from(focused_monitor_idx), Some(workspace_idx), None)?;
self.focus_workspace(workspace_idx)?;
}
SocketMessage::FocusMonitorWorkspaceNumber(monitor_idx, workspace_idx) => {
Expand All @@ -821,6 +856,7 @@ impl WindowManager {
let focused_pair = (focused_monitor_idx, focused_workspace_idx);

if focused_pair != (monitor_idx, workspace_idx) {
self.send_always_on_top(Option::from(monitor_idx), Some(workspace_idx), None)?;
self.focus_monitor(monitor_idx)?;
self.focus_workspace(workspace_idx)?;
}
Expand All @@ -829,6 +865,7 @@ impl WindowManager {
if let Some((monitor_idx, workspace_idx)) =
self.monitor_workspace_index_by_name(name)
{
self.send_always_on_top(Option::from(monitor_idx), Some(workspace_idx), None)?;
self.focus_monitor(monitor_idx)?;
self.focus_workspace(workspace_idx)?;
}
Expand Down
8 changes: 8 additions & 0 deletions komorebi/src/process_event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,14 @@ impl WindowManager {

already_moved_window_handles.remove(&window.hwnd);
}

if let Some(aot) = self.always_on_top.as_mut() {
if aot.contains(&window.hwnd) {
let idx = aot.iter().position(|x| *x == window.hwnd).unwrap();
aot.remove(idx);
}

}
}
WindowManagerEvent::Minimize(_, window) => {
let mut hide = false;
Expand Down
1 change: 1 addition & 0 deletions komorebi/src/static_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1194,6 +1194,7 @@ impl StaticConfig {
has_pending_raise_op: false,
pending_move_op: None,
already_moved_window_handles: Arc::new(Mutex::new(HashSet::new())),
always_on_top: None,
};

match value.focus_follows_mouse {
Expand Down
Loading