Moved to a Gio Application and replaced window1 with a GtkApplicatioNWindow.

This commit is contained in:
Jordan Petridis 2017-10-16 02:38:23 +03:00
parent c98c7d00df
commit 1277c90f8b
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
3 changed files with 54 additions and 19 deletions

View File

@ -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"}

View File

@ -40,7 +40,7 @@
<column type="GdkPixbuf"/>
</columns>
</object>
<object class="GtkWindow" id="window1">
<object class="GtkApplicationWindow" id="window1">
<property name="can_focus">False</property>
<property name="default_width">1000</property>
<property name="default_height">600</property>
@ -104,7 +104,7 @@
</child>
</object>
</child>
<child type="titlebar">
<child>
<placeholder/>
</child>
</object>

View File

@ -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::<Vec<_>>();
let mut tmp = Vec::with_capacity(original.len());
for i in 0..original.len() {
tmp.push(original[i].as_str());
}
application.run(&tmp);
}