mod app; mod calendar; mod form; mod update; mod utils; use gtk4 as gtk; use gtk::gdk::Display; use gtk4::prelude::{ApplicationExt, ApplicationExtManual}; use rusqlite::Connection; use std::rc::Rc; use app::App; pub fn run(conn: Connection) { let conn = Rc::new(conn); let app = gtk::Application::new(Some("me.guyonvarch.calendar"), Default::default()); app.connect_startup(|_| load_style()); app.connect_activate(move |app| build_ui(conn.clone(), app)); let args: [&str; 0] = []; app.run_with_args(&args); } fn build_ui(conn: Rc, app: >k::Application) { let (tx, rx) = async_channel::unbounded(); match App::new(conn, app, tx) { Ok(app) => utils::spawn(update::event_handler(rx, app)), Err(err) => { eprintln!("{}", err); std::process::exit(1) } } } fn load_style() { let provider = gtk::CssProvider::new(); provider.load_from_data(include_str!("style.css")); gtk::style_context_add_provider_for_display( &Display::default().expect("Error initializing gtk css provider."), &provider, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION, ); }