From 34ccdb6ba0d1e789654791ec01e082350cfd706f Mon Sep 17 00:00:00 2001 From: Candifloss Date: Wed, 19 Nov 2025 17:42:28 +0530 Subject: [PATCH] Move callbacks to separate module - Modularity - Redability - Separation of logic --- src/main.rs | 11 ++++------- src/widgets.rs | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 src/widgets.rs diff --git a/src/main.rs b/src/main.rs index c478da9..8601bec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ use i_slint_backend_winit::{ }, }; use slint::{LogicalPosition, LogicalSize}; +mod widgets; slint::include_modules!(); fn main() -> Result<(), Box> { @@ -33,13 +34,9 @@ fn main() -> Result<(), Box> { ui.set_bar_width(bar_width); ui.set_bar_height(bar_height); - let weak = ui.as_weak(); - ui.on_open_program(move || { - if let Some(_ui) = weak.upgrade() { - // Launch a program on click - std::process::Command::new("xclock").spawn().ok(); - } - }); + // Install all widget callbacks + widgets::install_callbacks(&ui); + // Size the window to match the bar. #[allow(clippy::cast_precision_loss)] ui.window() diff --git a/src/widgets.rs b/src/widgets.rs new file mode 100644 index 0000000..fc6f454 --- /dev/null +++ b/src/widgets.rs @@ -0,0 +1,15 @@ +use crate::TopBar; +use slint::ComponentHandle; +use std::process::Command; + +/// Connect widget callbacks for the top bar. +pub fn install_callbacks(ui: &TopBar) { + let weak = ui.as_weak(); + + ui.on_open_program(move || { + if weak.upgrade().is_some() { + // Run program on click + Command::new("xclock").spawn().ok(); + } + }); +}