Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(bar): improve handle monitor lifecycle handling
This commit introduces a few changes to the bar so that it can handle the monitor disconnect/reconnect properly and so that it can map the bar config to the correct monitor. Previously if you had 3 monitor configs setup on `komorebi.json` with the `display_index_preferences` set like this: ``` "display_index_preferences": [ "0": "MONITOR_A", "1": "MONITOR_B", "2": "MONITOR_C", ] ``` But if you only had connected monitors A and C you would have to manually change the bar configurations monitor index because now monitor A would have index 0, but monitor C would have index 1 instead of 2. Now with this commit this is no longer needed. Now the monitor index setup on the bar configuration **MUST BE** the index you've used on `display_index_preferences` for that monitor. So in the case above you would setup the bar configurations using the indices 0, 1 and 2 for monitors A, B and C respectively. As for the changes introduced on this commit they are the following: - `Komobar.monitor_index` is now an `Option`. When it is `None` it either means that the bar is starting and has not yet received the first `State` from komorebi or that the bar is disabled. - `Komobar.config` is no longer an `Arc`. There was no need for that and it was creating more issues and difficulties. It was mainly used to pass the config as an `Arc` to `apply_config` function, but then this function would actually clone the config itself (not just the `Arc`). Also this function was passing a `self.config.clone()` most of the times except once when it received a new config from a hotreload. Now, on hotreload it first sets `self.config` to the new config and then calls `apply_config` which now uses its own `self.config` everywhere. - We only change the `work_area_offset` when the bar is not disabled. - We update the global `MONITOR` size/coordinates when we receive a `DisplayConnectionChange` from komorebi. - We also check if the monitor size/coordinates have changed from the currently stored ones on every komorebi notification since sometimes the `DisplayConnectionChange` would be emitted while the state still had the previous size/coordinates. This makes sure we always capture a change of size/coordinates, store the new values, and update the bar. - The previously mentioned update of the `MONITOR` coordinates also updates the `config.position.start` since that value is being overriden on `main.rs` in case the user hasn't set it so we need to override it again with the new monitor coordinates. This might mean that users of the old config system might have their start position changed, but if we didn't do this the bar wouldn't even show on the screen for them when a monitor disconnected/reconnected. This is another case for users to start moving into the new config system, since with that system the bar will still show up with the correct margins!
- Loading branch information