window: Resize to natural on map

Only at this point we can be certain about the screen info like size an
scaling factor.
This commit is contained in:
Sophie Herold 2024-01-19 16:03:24 +01:00
parent 6992d16670
commit 171077ffc7
3 changed files with 22 additions and 5 deletions

View file

@ -197,7 +197,7 @@ mod imp {
/// Currently EXIF data /// Currently EXIF data
pub(super) metadata: RefCell<Metadata>, pub(super) metadata: RefCell<Metadata>,
#[property(get)] #[property(get=Self::image_size_available)]
_image_size_available: bool, _image_size_available: bool,
/// Current pointer position /// Current pointer position

View file

@ -80,6 +80,10 @@ impl imp::LpImage {
self.emmit_metadata_changed(); self.emmit_metadata_changed();
} }
} }
pub(super) fn image_size_available(&self) -> bool {
self.obj().image_size() > (0, 0)
}
} }
impl LpImage { impl LpImage {

View file

@ -314,6 +314,10 @@ mod imp {
glib::clone!(@weak obj => move |_| obj.on_fullscreen_changed()), glib::clone!(@weak obj => move |_| obj.on_fullscreen_changed()),
); );
obj.connect_map(|win| {
win.resize_default();
});
self.properties_button.connect_active_notify( self.properties_button.connect_active_notify(
glib::clone!(@weak obj => move |_| obj.update_headerbar_style()), glib::clone!(@weak obj => move |_| obj.update_headerbar_style()),
); );
@ -374,7 +378,7 @@ mod imp {
"notify::image-size-available", "notify::image-size-available",
false, false,
glib::closure_local!(@watch obj => move |_: &LpImage, _: &glib::ParamSpec| { glib::closure_local!(@watch obj => move |_: &LpImage, _: &glib::ParamSpec| {
obj.image_size_ready(); obj.image_size_available();
}), }),
); );
@ -846,7 +850,7 @@ impl LpWindow {
self.set_title(Some(&title)); self.set_title(Some(&title));
} }
pub fn image_size_ready(&self) { pub fn image_size_available(&self) {
// if visible for whatever reason, don't do any resize // if visible for whatever reason, don't do any resize
if self.is_visible() { if self.is_visible() {
return; return;
@ -858,11 +862,20 @@ impl LpWindow {
.current_page() .current_page()
.map(|page| page.image()); .map(|page| page.image());
if image.is_some_and(|img| img.image_size() > (0, 0)) { if image.is_some_and(|img| img.image_size_available()) {
log::debug!("Showing window because image size is ready"); log::debug!("Showing window because image size is ready");
self.present();
}
}
pub fn resize_default(&self) {
if self
.image_view()
.current_image()
.is_some_and(|img| img.image_size_available())
{
// this let's the window determine the default size from LpImage's natural size // this let's the window determine the default size from LpImage's natural size
self.set_default_size(-1, -1); self.set_default_size(-1, -1);
self.present();
} }
} }