mirror of
https://github.com/Zedfrigg/ironbar.git
synced 2025-07-02 19:21:03 +02:00
feat(workspaces): support for toggling showing workspaces for all monitors
This commit is contained in:
parent
a358037d3e
commit
53adaa846c
4 changed files with 62 additions and 22 deletions
17
src/main.rs
17
src/main.rs
|
@ -11,6 +11,14 @@ use crate::style::load_css;
|
|||
use dirs::config_dir;
|
||||
use gtk::prelude::*;
|
||||
use gtk::{gdk, Application};
|
||||
use ksway::client::Client;
|
||||
use ksway::IpcCommand;
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct SwayOutput {
|
||||
name: String,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
|
@ -18,7 +26,11 @@ async fn main() {
|
|||
.application_id("dev.jstanger.waylandbar")
|
||||
.build();
|
||||
|
||||
app.connect_activate(|app| {
|
||||
let mut sway_client = Client::connect().expect("Failed to connect to Sway IPC");
|
||||
let outputs = sway_client.ipc(IpcCommand::GetOutputs).expect("Failed to get Sway outputs");
|
||||
let outputs = serde_json::from_slice::<Vec<SwayOutput>>(&outputs).expect("Failed to deserialize outputs message from Sway IPC");
|
||||
|
||||
app.connect_activate(move |app| {
|
||||
let config = Config::load().unwrap_or_default();
|
||||
|
||||
// TODO: Better logging (https://crates.io/crates/tracing)
|
||||
|
@ -30,12 +42,13 @@ async fn main() {
|
|||
let num_monitors = display.n_monitors();
|
||||
for i in 0..num_monitors {
|
||||
let monitor = display.monitor(i).unwrap();
|
||||
let monitor_name = &outputs.get(i as usize).expect("GTK monitor output differs from Sway's").name;
|
||||
|
||||
let config = config.monitors.as_ref().map_or(&config, |monitor_config| {
|
||||
monitor_config.get(i as usize).unwrap_or(&config)
|
||||
});
|
||||
|
||||
create_bar(app, &monitor, config.clone());
|
||||
create_bar(app, &monitor, monitor_name, config.clone());
|
||||
}
|
||||
|
||||
let style_path = config_dir()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue