1
0
Fork 0
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:
Jake Stanger 2022-08-14 16:23:41 +01:00
parent a358037d3e
commit 53adaa846c
No known key found for this signature in database
GPG key ID: C51FC8F9CB0BEA61
4 changed files with 62 additions and 22 deletions

View file

@ -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()