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>> = 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(); }