mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-03-22 17:39:20 +01:00
This commit removes all border-related code from process_command, process_event etc. and centralizes it in the new border_manager module. Instead of trying to figure out where in process_event and process_command we should make border-related changes, a notification gets sent to a channel that border_manager listens to whenever an event or command has finished processing. The border_manager listener, upon receiving a notification, acquires a lock on the WindowManager instance and updates borders for the focused workspace on every monitor; this allows us to centralize all edge case handling within the border_manager listener's loop. Borders on workspaces that lose focus are now destroyed and recreated when those workspaces regain focus, instead of trying to share individual border instances across workspaces. A number of common edge cases that have been addressed in this commit are: * Paused window manager * Floating workspaces * Maximized windows * Fullscreen videos * Monocle containers * Ghost borders on workspace switching * Incorrect focused window border colours Global state related to borders has also been moved into the border_manager module, which also tracks the state of border objects (BORDER_STATE), their rects (RECT_STATE) and their focus kinds (FOCUS_STATE). This allows us to now track multiple borders per-container, enabling unfocused border windows for the first time. Additionally, the Z-Order for border windows is now also configurable. ActiveWindowBorderColours has been expanded to include Unfocused, but in order to not introduce a breaking configuration change for end users, all members of this struct have been made Option<Colour>.
44 lines
1005 B
TOML
44 lines
1005 B
TOML
[workspace]
|
|
|
|
resolver = "2"
|
|
members = [
|
|
"derive-ahk",
|
|
"komorebi",
|
|
"komorebi-client",
|
|
"komorebi-core",
|
|
"komorebic",
|
|
"komorebic-no-console",
|
|
]
|
|
|
|
[workspace.dependencies]
|
|
windows-interface = { version = "0.53" }
|
|
windows-implement = { version = "0.53" }
|
|
dunce = "1"
|
|
dirs = "5"
|
|
color-eyre = "0.6"
|
|
serde_json = { package = "serde_json_lenient", version = "0.1" }
|
|
sysinfo = "0.30"
|
|
serde = { version = "1", features = ["derive"] }
|
|
uds_windows = "1"
|
|
|
|
[workspace.dependencies.windows]
|
|
version = "0.54"
|
|
features = [
|
|
"implement",
|
|
"Win32_System_Com",
|
|
"Win32_UI_Shell_Common", # for IObjectArray
|
|
"Win32_Foundation",
|
|
"Win32_Graphics_Dwm",
|
|
"Win32_Graphics_Gdi",
|
|
"Win32_System_LibraryLoader",
|
|
"Win32_System_RemoteDesktop",
|
|
"Win32_System_Threading",
|
|
"Win32_UI_Accessibility",
|
|
"Win32_UI_HiDpi",
|
|
"Win32_UI_Input_KeyboardAndMouse",
|
|
"Win32_UI_Shell",
|
|
"Win32_UI_Shell_Common",
|
|
"Win32_UI_WindowsAndMessaging",
|
|
"Win32_System_SystemServices"
|
|
]
|