fix(cli): restart bar on replace-configuration

This commit ensures that the replace-configuration command also replaces
bars.

Already running bars are stopped and new bars are started using the new
configuration.
This commit is contained in:
Csaba
2025-04-04 16:04:03 +02:00
committed by LGUG2Z
parent 9f8e4b9dca
commit 13a519fb29
4 changed files with 76 additions and 45 deletions

1
Cargo.lock generated
View File

@@ -2929,6 +2929,7 @@ dependencies = [
"os_info", "os_info",
"parking_lot", "parking_lot",
"paste", "paste",
"powershell_script",
"regex", "regex",
"reqwest", "reqwest",
"schemars", "schemars",

View File

@@ -472,55 +472,25 @@ impl BarWidget for Komorebi {
for (name, location) in configuration_switcher.configurations.iter() { for (name, location) in configuration_switcher.configurations.iter() {
let path = PathBuf::from(location); let path = PathBuf::from(location);
if path.is_file() { if path.is_file() {
config.apply_on_widget(false, ui,|ui|{ config.apply_on_widget(false, ui, |ui| {
if SelectableFrame::new(false).show(ui, |ui|{ if SelectableFrame::new(false)
ui.add(Label::new(name).selectable(false)) .show(ui, |ui| ui.add(Label::new(name).selectable(false)))
}) .clicked()
.clicked()
{
let canonicalized = dunce::canonicalize(path.clone()).unwrap_or(path);
let mut proceed = true;
if komorebi_client::send_message(&SocketMessage::ReplaceConfiguration(
canonicalized,
))
.is_err()
{ {
tracing::error!( let canonicalized =
"could not send message to komorebi: ReplaceConfiguration" dunce::canonicalize(path.clone()).unwrap_or(path);
);
proceed = false;
}
if let Some(rect) = komorebi_notification_state.work_area_offset { if komorebi_client::send_message(
if proceed { &SocketMessage::ReplaceConfiguration(canonicalized),
match komorebi_client::send_query(&SocketMessage::Query( )
komorebi_client::StateQuery::FocusedMonitorIndex, .is_err()
)) { {
Ok(idx) => { tracing::error!(
if let Ok(monitor_idx) = idx.parse::<usize>() { "could not send message to komorebi: ReplaceConfiguration"
if komorebi_client::send_message( );
&SocketMessage::MonitorWorkAreaOffset(
monitor_idx,
rect,
),
)
.is_err()
{
tracing::error!(
"could not send message to komorebi: MonitorWorkAreaOffset"
);
}
}
}
Err(_) => {
tracing::error!(
"could not send message to komorebi: Query"
);
}
}
} }
} }
}}); });
} }
} }
} }

View File

@@ -27,6 +27,7 @@ net2 = "0.2"
os_info = "3.10" os_info = "3.10"
parking_lot = "0.12" parking_lot = "0.12"
paste = { workspace = true } paste = { workspace = true }
powershell_script = "1.0"
regex = "1" regex = "1"
schemars = { workspace = true, optional = true } schemars = { workspace = true, optional = true }
serde = { workspace = true } serde = { workspace = true }

View File

@@ -1682,6 +1682,65 @@ impl WindowManager {
// Set self to the new wm instance // Set self to the new wm instance
*self = wm; *self = wm;
// check if there are any bars
let mut system = sysinfo::System::new_all();
system.refresh_processes(sysinfo::ProcessesToUpdate::All, true);
let has_bar = system
.processes_by_name("komorebi-bar.exe".as_ref())
.next()
.is_some();
// stop bar(s)
if has_bar {
let script = r"
Stop-Process -Name:komorebi-bar -ErrorAction SilentlyContinue
";
match powershell_script::run(script) {
Ok(_) => {
println!("{script}");
// start new bar(s)
let mut config = StaticConfig::read(config)?;
if let Some(display_bar_configurations) =
&mut config.bar_configurations
{
for config_file_path in &mut *display_bar_configurations {
let script = r#"Start-Process "komorebi-bar" '"--config" "CONFIGFILE"' -WindowStyle hidden"#
.replace("CONFIGFILE", &config_file_path.to_string_lossy());
match powershell_script::run(&script) {
Ok(_) => {
println!("{script}");
}
Err(error) => {
println!("Error: {error}");
}
}
}
} else {
let script = r"
if (!(Get-Process komorebi-bar -ErrorAction SilentlyContinue))
{
Start-Process komorebi-bar -WindowStyle hidden
}
";
match powershell_script::run(script) {
Ok(_) => {
println!("{script}");
}
Err(error) => {
println!("Error: {error}");
}
}
}
}
Err(error) => {
println!("Error: {error}");
}
}
}
force_update_borders = true; force_update_borders = true;
} }
} }