Files
jmb-bar/src/main.rs
2026-11-02 22:02:37 +01:00

61 lines
1.8 KiB
Rust

use crate::backend::Backend;
mod backend;
mod css;
mod ui;
use glib::clone;
use gtk::prelude::*;
use gtk::{Application, CssProvider, gdk, gio};
use jmb_bar::config::Config;
use jmb_logger_rs::*;
use notify::RecommendedWatcher;
use std::cell::RefCell;
use std::rc::Rc;
pub const LOGGER: Logger = Logger::create(Level::DEBUG);
pub const APP_NAME: &str = "net.jmb19905.jmb-bar";
fn main() {
info!(&LOGGER, "Starting jmb-bar");
let config = Config::load("jmb-bar.conf");
let config = config.unwrap_or_else(|| {
warn!(&LOGGER, "Couldn't load config file, using default");
Config::default()
});
let backend = Backend::start(&config);
gio::resources_register_include!("templates.gresource").expect("Failed to register resources");
let app = Application::builder().application_id(APP_NAME).build();
let watcher_slot: Rc<RefCell<Option<RecommendedWatcher>>> = Rc::new(RefCell::new(None));
app.connect_startup(move |_| {
debug!(&LOGGER, "Connect startup");
let provider = CssProvider::new();
if let Some(css) = css::parse_css() {
provider.load_from_string(&css);
}
gtk::style_context_add_provider_for_display(
&gdk::Display::default().expect("Could not connect to display"),
&provider,
gtk::STYLE_PROVIDER_PRIORITY_APPLICATION,
);
let watcher = css::watch_css(move |css| provider.load_from_string(&css));
*watcher_slot.borrow_mut() = Some(watcher);
});
app.connect_activate(clone!(
#[strong]
backend,
move |app| {
debug!(&LOGGER, "Connect activate");
trace!(&LOGGER, "Starting bars");
ui::create_bars(app, backend.clone());
}
));
debug!(&LOGGER, "Running app");
app.run();
}