GridView doesn't render items on Windows
With GTK 4.12.4 and 4.12.5 at least there is an issue where all GtkGridView -> GtkListItemWidget
elments are invisible for some reason and the whole GridView
is not using much space vertically if number of actual items is smaller or equal than min-columns
.
This isn't happening with GTK 4.6.9 on Ubuntu 22.04, though I'm not sure if that is due to OS or GTK version. Either way this seems like a bug to me, especially if number of items is the same as min-columns
.
Demo app (Rust):
use gtk::prelude::*;
use gtk::{glib, Application, ApplicationWindow};
fn main() -> glib::ExitCode {
let app = Application::builder().application_id("org.test").build();
app.connect_activate(build_ui);
app.run()
}
fn build_ui(app: &Application) {
let mut sectors = Vec::with_capacity(1029);
for _ in 0..sectors.capacity() {
let sector = gtk::Box::builder().css_name("sector").build();
sectors.push(sector);
}
let factory = gtk::SignalListItemFactory::new();
factory.connect_bind(|_, list_item| {
if let Some(item) = list_item.item() {
list_item.set_child(Some(
&item
.downcast::<gtk::Box>()
.expect("Box was created above; qed"),
));
}
});
let selection = gtk::NoSelection::new(Some({
let store = gtk::gio::ListStore::new::<gtk::Box>();
store.extend_from_slice(§ors);
store
}));
let gridview = gtk::GridView::builder()
.single_click_activate(true)
.model(&selection)
.factory(&factory)
.min_columns(108.min(sectors.len() as u32 - 1))
.max_columns(100_000)
.sensitive(false)
.css_name("sectors")
.build();
gridview.remove_css_class("view");
let gridview_container = gtk::Box::default();
gridview_container.append(&gridview);
gridview_container.set_orientation(gtk::Orientation::Vertical);
let scroll_view = gtk::ScrolledWindow::default();
scroll_view.set_child(Some(&gridview_container));
let window = ApplicationWindow::builder()
.application(app)
.resizable(false)
.child(&scroll_view)
.build();
window.set_size_request(760, 200);
let display = gtk::gdk::Display::default().unwrap();
let provider = gtk::CssProvider::new();
provider.load_from_data(
"
sectors > child {
padding: 0;
}
sector {
background-color: #727272;
margin: 1px;
min-height: 5px;
min-width: 5px;
}
",
);
gtk::StyleContext::add_provider_for_display(
&display,
&provider,
gtk::STYLE_PROVIDER_PRIORITY_APPLICATION,
);
window.present();
}
Looks like this:
But should have looked like this (this is with height-request: 74
on GridView
):
Edited by Nazar Mokrynskyi