From a6b601e3bd46e2a513ffb890cb67e382c2dbdb65 Mon Sep 17 00:00:00 2001 From: jmb05 Date: Wed, 28 Oct 2026 01:35:08 +0100 Subject: [PATCH] Fix Monitor::connector None on plugging in new monitor --- src/ui.rs | 21 +++++++++++---------- src/ui/utilities_panel.rs | 10 ++++++++++ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index 161f3f5..e131592 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -12,6 +12,7 @@ use gtk4_layer_shell::{Edge, KeyboardMode, Layer, LayerShell}; use jmb_logger_rs::*; use mpris::PlayerFinder; use std::collections::HashMap; +use std::rc::Rc; use std::sync::Mutex; use std::time::Duration; @@ -25,7 +26,7 @@ mod workspaces_panel; pub fn create_bars(app: &Application, backend: Backend) { let display = Display::default().expect("Couldn't find GDK Display"); let app_clone = app.clone(); - let bars: Mutex> = Mutex::new(HashMap::new()); + let bars: Rc>> = Rc::new(Mutex::new(HashMap::new())); let ac_channels = backend.subscribe(); let action_centre = ActionCentre::create_action_centre(app.clone(), ac_channels); for monitor in 0..display.monitors().n_items() { @@ -52,17 +53,17 @@ pub fn create_bars(app: &Application, backend: Backend) { } } else if added == 1 { debug!(&LOGGER, "Detected new monitor: {pos}"); + let app_clone = app_clone.clone(); + let action_centre = action_centre.clone(); let channels = backend.subscribe(); - bars.lock().expect("Couldn't get active bars").insert( - pos, - create_bar( - app_clone.clone(), - &display, + let bars = bars.clone(); + let display = display.clone(); + glib::idle_add_local_once(move || { + bars.lock().expect("Couldn't get active bars").insert( pos, - action_centre.clone(), - channels, - ), - ); + create_bar(app_clone, &display, pos, action_centre, channels), + ); + }); } }); } diff --git a/src/ui/utilities_panel.rs b/src/ui/utilities_panel.rs index 0a5979b..0bc0cb4 100644 --- a/src/ui/utilities_panel.rs +++ b/src/ui/utilities_panel.rs @@ -62,10 +62,20 @@ pub fn build( String::new() }; let monitor_valid = !monitor.is_empty(); + println!( + "{:?}", + monitors + .item(monitor_idx) + .unwrap() + .downcast::() + .unwrap() + .connector() + ); if monitor_valid { let _ = channels .br_tx() .send(BrightnessMessage::Request(monitor.clone())); + println!("req"); } let volume_adjustment = Adjustment::new(60.0, 1.0, 100.0, 1.0, 5.0, 0.0);