mod app; mod calendar; mod form; mod update; mod utils; use gtk4 as gtk; use gtk::gdk::Display; use gtk::prelude::*; 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(); let app = App::new(conn, app, tx); utils::spawn(update::event_handler(rx, app)) } fn load_style() { let provider = gtk::CssProvider::new(); provider.load_from_data(include_bytes!("style.css")); gtk::StyleContext::add_provider_for_display( &Display::default().expect("Error initializing gtk css provider."), &provider, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION, ); }