aboutsummaryrefslogtreecommitdiff
path: root/src/app/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/mod.rs')
-rw-r--r--src/app/mod.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/app/mod.rs b/src/app/mod.rs
new file mode 100644
index 0000000..30b59af
--- /dev/null
+++ b/src/app/mod.rs
@@ -0,0 +1,38 @@
+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));
+ app.run();
+}
+
+fn build_ui(conn: Rc<Connection>, app: &gtk::Application) {
+ let (tx, rx) = async_channel::unbounded();
+ let app = App::new(conn.clone(), app, tx.clone());
+ utils::spawn(update::event_handler(conn, rx, tx, 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,
+ );
+}