From 1277c90f8b06f5ec4f0450d399d11b43f53d740c Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Mon, 16 Oct 2017 02:38:23 +0300 Subject: [PATCH] Moved to a Gio Application and replaced window1 with a GtkApplicatioNWindow. --- hammond-gtk/Cargo.toml | 3 ++ hammond-gtk/gtk/foo.ui | 4 +-- hammond-gtk/src/main.rs | 66 ++++++++++++++++++++++++++++++----------- 3 files changed, 54 insertions(+), 19 deletions(-) diff --git a/hammond-gtk/Cargo.toml b/hammond-gtk/Cargo.toml index 46087d1..2d64830 100644 --- a/hammond-gtk/Cargo.toml +++ b/hammond-gtk/Cargo.toml @@ -8,9 +8,12 @@ workspace = "../" gtk = { version = "0.2", features = ["v3_22"]} gdk = "0.6" glib = "0.3" +gio = "0.2" gdk-pixbuf = "0.2" + diesel = { version = "0.16", features = ["sqlite"] } loggerv = "0.3" log = "0.3" + hammond-data = {path = "../hammond-data"} hammond-downloader = {path = "../hammond-downloader"} diff --git a/hammond-gtk/gtk/foo.ui b/hammond-gtk/gtk/foo.ui index bc78c1d..d92bc04 100644 --- a/hammond-gtk/gtk/foo.ui +++ b/hammond-gtk/gtk/foo.ui @@ -40,7 +40,7 @@ - + False 1000 600 @@ -104,7 +104,7 @@ - + diff --git a/hammond-gtk/src/main.rs b/hammond-gtk/src/main.rs index 7cc18fb..5275ce9 100644 --- a/hammond-gtk/src/main.rs +++ b/hammond-gtk/src/main.rs @@ -1,8 +1,11 @@ // extern crate glib; extern crate diesel; + extern crate gdk; extern crate gdk_pixbuf; +extern crate gio; extern crate gtk; + extern crate hammond_data; extern crate hammond_downloader; #[macro_use] @@ -15,6 +18,7 @@ use hammond_data::dbqueries; use gtk::TreeStore; use gtk::prelude::*; +use gio::ApplicationExt; use gdk_pixbuf::Pixbuf; fn create_flowbox_child(title: &str, image_uri: Option<&str>) -> gtk::FlowBoxChild { @@ -114,18 +118,11 @@ fn create_and_fill_list_store( podcast_model } -fn main() { - loggerv::init_with_level(LogLevel::Info).unwrap(); - - if gtk::init().is_err() { - info!("Failed to initialize GTK."); - return; - } - hammond_data::init().unwrap(); - - let glade_src = include_str!("../gtk/foo.ui"); +fn build_ui() { // Adapted from gnome-music AlbumWidget let pd_widget = include_str!("../gtk/podcast_widget.ui"); + + let glade_src = include_str!("../gtk/foo.ui"); let header_src = include_str!("../gtk/headerbar.ui"); let builder = gtk::Builder::new_from_string(glade_src); let header_build = gtk::Builder::new_from_string(header_src); @@ -141,7 +138,16 @@ fn main() { let header: gtk::HeaderBar = header_build.get_object("headerbar1").unwrap(); window.set_titlebar(&header); + // FIXME: + // GLib-GIO-WARNING **: Your application does not implement g_application_activate() + // and has no handlers connected to the 'activate' signal. It should do one of these. + window.connect_delete_event(|_, _| { + gtk::main_quit(); + Inhibit(false) + }); + // Adapted copy of the way gnome-music does albumview + // FIXME: flowbox childs activate with space/enter but not with clicks. let flowbox: gtk::FlowBox = builder.get_object("flowbox1").unwrap(); let grid: gtk::Grid = builder.get_object("grid").unwrap(); @@ -158,17 +164,12 @@ fn main() { home_button.connect_clicked(move |_| stack_clone.set_visible_child(&grid_clone)); // FIXME: This locks the ui atm. - refresh_button.connect_clicked(|_| { + // FIXME: it also leaks memmory. + refresh_button.connect_clicked(move |_| { let db = hammond_data::establish_connection(); hammond_data::index_feed::index_loop(db, false).unwrap(); }); - // Exit cleanly on delete event - window.connect_delete_event(|_, _| { - gtk::main_quit(); - Inhibit(false) - }); - let db = hammond_data::establish_connection(); // let pd_model = create_and_fill_tree_store(&db, &builder); let pd_model = create_and_fill_list_store(&db, &builder); @@ -197,3 +198,34 @@ fn main() { window.show_all(); gtk::main(); } + +// Copied from: +// https://github.com/GuillaumeGomez/process-viewer/blob/ \ +// ddcb30d01631c0083710cf486caf04c831d38cb7/src/process_viewer.rs#L367 +fn main() { + loggerv::init_with_level(LogLevel::Info).unwrap(); + hammond_data::init().unwrap(); + + // Not sure if needed. + if gtk::init().is_err() { + info!("Failed to initialize GTK."); + return; + } + + let application = gtk::Application::new( + "com.gitlab.alatiera.Hammond", + gio::ApplicationFlags::empty(), + ).expect("Initialization failed..."); + + application.connect_startup(move |_| { + build_ui(); + }); + + // Not sure if this will be kept. + let original = ::std::env::args().collect::>(); + let mut tmp = Vec::with_capacity(original.len()); + for i in 0..original.len() { + tmp.push(original[i].as_str()); + } + application.run(&tmp); +}