Flobox bug fix, connect_child_activated was connected only on the initial flowobx.

This commit is contained in:
Jordan Petridis 2017-11-04 21:40:22 +02:00
parent e2d1466073
commit ed0bbfe1ba
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
2 changed files with 28 additions and 33 deletions

View File

@ -18,22 +18,11 @@
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="shadow_type">in</property> <property name="shadow_type">in</property>
<child> <child>
<object class="GtkViewport"> <object class="GtkViewport" id="view">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkFlowBox" id="flowbox"> <placeholder/>
<property name="name">FlowBox1</property>
<property name="height_request">500</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<property name="homogeneous">True</property>
<property name="column_spacing">5</property>
<property name="row_spacing">5</property>
<property name="max_children_per_line">20</property>
<property name="selection_mode">none</property>
</object>
</child> </child>
</object> </object>
</child> </child>

View File

@ -92,30 +92,18 @@ fn on_flowbox_child_activate(db: &Database, stack: &gtk::Stack, parent: &Podcast
// aggresive memory cleanup // aggresive memory cleanup
// probably not needed // probably not needed
old.destroy(); old.destroy();
println!("Hello World!, child activated");
} }
fn setup_podcasts_grid(db: &Database, stack: &gtk::Stack) { fn setup_podcasts_grid(db: &Database, stack: &gtk::Stack) {
let builder = gtk::Builder::new_from_string(include_str!("../../gtk/podcasts_view.ui")); let builder = gtk::Builder::new_from_string(include_str!("../../gtk/podcasts_view.ui"));
let grid: gtk::Grid = builder.get_object("grid").unwrap(); 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.add_named(&grid, "pd_grid");
stack.set_visible_child(&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::<i32>().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 { 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: &gtk::Stack) { pub fn update_podcasts_view(db: &Database, stack: &gtk::Stack) {
let builder = gtk::Builder::new_from_string(include_str!("../../gtk/podcasts_view.ui")); let builder = gtk::Builder::new_from_string(include_str!("../../gtk/podcasts_view.ui"));
let grid: gtk::Grid = builder.get_object("grid").unwrap(); 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(); let flowbox = init_flowbox(db, stack);
// Populate the flowbox with the Podcasts. view.add(&flowbox);
populate_flowbox(db, stack, &flowbox);
let old = stack.get_child_by_name("pd_grid").unwrap(); let old = stack.get_child_by_name("pd_grid").unwrap();
let vis = stack.get_visible_child_name().unwrap(); let vis = stack.get_visible_child_name().unwrap();
@ -146,3 +134,21 @@ pub fn update_podcasts_view(db: &Database, stack: &gtk::Stack) {
// probably not needed // probably not needed
old.destroy(); old.destroy();
} }
fn init_flowbox(db: &Database, stack: &gtk::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::<i32>().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
}