From ed0bbfe1bac704293387b663fe7eb8b6d788c3ee Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Sat, 4 Nov 2017 21:40:22 +0200 Subject: [PATCH] Flobox bug fix, connect_child_activated was connected only on the initial flowobx. --- hammond-gtk/gtk/podcasts_view.ui | 15 ++------- hammond-gtk/src/views/podcasts_view.rs | 46 +++++++++++++++----------- 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/hammond-gtk/gtk/podcasts_view.ui b/hammond-gtk/gtk/podcasts_view.ui index f1b943e..3e304ea 100644 --- a/hammond-gtk/gtk/podcasts_view.ui +++ b/hammond-gtk/gtk/podcasts_view.ui @@ -18,22 +18,11 @@ True in - + True False - - FlowBox1 - 500 - True - False - start - True - 5 - 5 - 20 - none - + diff --git a/hammond-gtk/src/views/podcasts_view.rs b/hammond-gtk/src/views/podcasts_view.rs index 2f8c206..7623699 100644 --- a/hammond-gtk/src/views/podcasts_view.rs +++ b/hammond-gtk/src/views/podcasts_view.rs @@ -92,30 +92,18 @@ fn on_flowbox_child_activate(db: &Database, stack: >k::Stack, parent: &Podcast // aggresive memory cleanup // probably not needed old.destroy(); - println!("Hello World!, child activated"); } fn setup_podcasts_grid(db: &Database, stack: >k::Stack) { let builder = gtk::Builder::new_from_string(include_str!("../../gtk/podcasts_view.ui")); let grid: gtk::Grid = builder.get_object("grid").unwrap(); + let view: gtk::Viewport = builder.get_object("view").unwrap(); + + let flowbox = init_flowbox(db, stack); + view.add(&flowbox); + stack.add_named(&grid, "pd_grid"); stack.set_visible_child(&grid); - - // Adapted copy of the way gnome-music does albumview - let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap(); - - // TODO: handle unwraps. - flowbox.connect_child_activated(clone!(db, stack => move |_, child| { - // This is such an ugly hack... - let id = child.get_name().unwrap().parse::().unwrap(); - let parent = { - let tempdb = db.lock().unwrap(); - dbqueries::get_podcast_from_id(&tempdb, id).unwrap() - }; - on_flowbox_child_activate(&db, &stack, &parent); - })); - // Populate the flowbox with the Podcasts. - populate_flowbox(db, stack, &flowbox); } pub fn setup_stack(db: &Database) -> gtk::Stack { @@ -129,10 +117,10 @@ pub fn setup_stack(db: &Database) -> gtk::Stack { pub fn update_podcasts_view(db: &Database, stack: >k::Stack) { let builder = gtk::Builder::new_from_string(include_str!("../../gtk/podcasts_view.ui")); let grid: gtk::Grid = builder.get_object("grid").unwrap(); + let view: gtk::Viewport = builder.get_object("view").unwrap(); - let flowbox: gtk::FlowBox = builder.get_object("flowbox").unwrap(); - // Populate the flowbox with the Podcasts. - populate_flowbox(db, stack, &flowbox); + let flowbox = init_flowbox(db, stack); + view.add(&flowbox); let old = stack.get_child_by_name("pd_grid").unwrap(); let vis = stack.get_visible_child_name().unwrap(); @@ -146,3 +134,21 @@ pub fn update_podcasts_view(db: &Database, stack: >k::Stack) { // probably not needed old.destroy(); } + +fn init_flowbox(db: &Database, stack: >k::Stack) -> gtk::FlowBox { + let flowbox = gtk::FlowBox::new(); + + // TODO: handle unwraps. + flowbox.connect_child_activated(clone!(db, stack => move |_, child| { + // This is such an ugly hack... + let id = child.get_name().unwrap().parse::().unwrap(); + let parent = { + let tempdb = db.lock().unwrap(); + dbqueries::get_podcast_from_id(&tempdb, id).unwrap() + }; + on_flowbox_child_activate(&db, &stack, &parent); + })); + // Populate the flowbox with the Podcasts. + populate_flowbox(db, stack, &flowbox); + flowbox +}