1
0
Fork 0
mirror of https://github.com/Zedfrigg/ironbar.git synced 2025-07-01 10:41:03 +02:00

feat: IPC for get_visible, set_visible, new bar name config option

This commit is contained in:
A-Cloud-Ninja 2023-07-12 18:17:04 -04:00 committed by Jake Stanger
parent 2f8443f349
commit 2ccb2633c6
No known key found for this signature in database
GPG key ID: C51FC8F9CB0BEA61
6 changed files with 93 additions and 15 deletions

View file

@ -21,6 +21,13 @@ pub fn create_bar(
config: Config,
) -> Result<()> {
let win = ApplicationWindow::builder().application(app).build();
let bar_name = config
.name
.clone()
.unwrap_or_else(|| format!("bar-{}", get_unique_usize()));
win.set_widget_name(&bar_name);
info!("Creating bar {}", bar_name);
setup_layer_shell(
&win,

View file

@ -97,6 +97,7 @@ pub struct Config {
pub margin: MarginConfig,
#[serde(default = "default_popup_gap")]
pub popup_gap: i32,
pub name: Option<String>,
/// GTK icon theme to use.
pub icon_theme: Option<String>,
@ -125,6 +126,7 @@ impl Default for Config {
position: Default::default(),
height: default_bar_height(),
margin: Default::default(),
name: None,
popup_gap: default_popup_gap(),
icon_theme: None,
ironvar_defaults: None,

View file

@ -37,4 +37,18 @@ pub enum Command {
/// The path to the sheet.
path: PathBuf,
},
/// Set the visibility of the bar with the given name.
SetVisible {
///Bar name to target.
bar_name: String,
/// The visibility status.
visible: bool,
},
/// Get the visibility of the bar with the given name.
GetVisible {
/// Bar name to target.
bar_name: String,
},
}

View file

@ -146,6 +146,33 @@ impl Ipc {
}
}
Command::Ping => Response::Ok,
Command::SetVisible { bar_name, visible } => {
let windows = application.windows();
let found = windows
.iter()
.find(|window| window.widget_name() == bar_name);
if let Some(window) = found {
window.set_visible(visible);
Response::Ok
} else {
Response::error("Bar not found")
}
}
Command::GetVisible { bar_name } => {
let windows = application.windows();
let found = windows
.iter()
.find(|window| window.widget_name() == bar_name);
if let Some(window) = found {
Response::OkValue {
value: window.is_visible().to_string(),
}
} else {
Response::error("Bar not found")
}
}
}
}