From f2dbee5ef8f912b706ee7e00f663c239a13aef9d Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Thu, 4 Dec 2025 21:22:07 +0100 Subject: [PATCH] image_view: Make space for always on scrollbars Increase the margin of the overlay if scrollbars are set to always visible. Fixes #528 --- data/resources/style.css | 13 +++++++++++++ ...rlays-and-always-visible-scrollbars-conflict | 1 + src/widgets/edit/crop.rs | 1 - src/widgets/image_page.rs | 13 +++---------- src/widgets/image_view.rs | 17 +++++++++++++++++ src/widgets/image_view.ui | 8 -------- 6 files changed, 34 insertions(+), 19 deletions(-) create mode 100644 news.d/50.alpha/fixed-overlays-and-always-visible-scrollbars-conflict diff --git a/data/resources/style.css b/data/resources/style.css index ac7f6a5..d54758e 100644 --- a/data/resources/style.css +++ b/data/resources/style.css @@ -10,6 +10,19 @@ border-radius: 12px; background-color: var(--osd-background-color); padding: 6px; + margin: 18px; +} + +.always-show-scrollbars .osd-box { + margin-bottom: 42px; +} + +.always-show-scrollbars .osd-box:dir(ltr) { + margin-right: 42px; +} + +.always-show-scrollbars .osd-box:dir(rtl) { + margin-left: 42px; } .osd-box menubutton button { diff --git a/news.d/50.alpha/fixed-overlays-and-always-visible-scrollbars-conflict b/news.d/50.alpha/fixed-overlays-and-always-visible-scrollbars-conflict new file mode 100644 index 0000000..2b7aa6c --- /dev/null +++ b/news.d/50.alpha/fixed-overlays-and-always-visible-scrollbars-conflict @@ -0,0 +1 @@ +Fixed image navigation overlay controls conflicting with always visible scrollbars. diff --git a/src/widgets/edit/crop.rs b/src/widgets/edit/crop.rs index 4239f16..7e8f8ae 100644 --- a/src/widgets/edit/crop.rs +++ b/src/widgets/edit/crop.rs @@ -290,7 +290,6 @@ mod imp { } else { LpOrientation::Landscape }; - dbg!("setting to", orientation); let res = self .obj() .activate_action("edit-crop.orientation", Some(&orientation.to_variant())); diff --git a/src/widgets/image_page.rs b/src/widgets/image_page.rs index eeb6f91..8d62ca4 100644 --- a/src/widgets/image_page.rs +++ b/src/widgets/image_page.rs @@ -20,6 +20,8 @@ //! //! This widget also handles showing the context menu. +use std::time::Duration; + use adw::subclass::prelude::*; use glib::{Properties, clone}; use gtk::CompositeTemplate; @@ -33,8 +35,6 @@ use crate::util::gettext::*; use crate::widgets::LpImage; mod imp { - use std::time::Duration; - use super::*; #[derive(Debug, Default, CompositeTemplate, Properties)] @@ -85,15 +85,8 @@ mod imp { } } + #[glib::derived_properties] impl ObjectImpl for LpImagePage { - fn properties() -> &'static [glib::ParamSpec] { - Self::derived_properties() - } - - fn property(&self, id: usize, pspec: &glib::ParamSpec) -> glib::Value { - self.derived_property(id, pspec) - } - fn constructed(&self) { let obj = self.obj(); diff --git a/src/widgets/image_view.rs b/src/widgets/image_view.rs index 6e4ae67..00dbed6 100644 --- a/src/widgets/image_view.rs +++ b/src/widgets/image_view.rs @@ -329,6 +329,15 @@ mod imp { } )); + // Adjust overlays margins to always visible scrollbars + obj.update_scrollbar_styles(); + obj.settings() + .connect_gtk_overlay_scrolling_notify(glib::clone!( + #[weak] + obj, + move |_| obj.update_scrollbar_styles() + )); + obj.add_controller(self.drag_source.clone()); } } @@ -912,4 +921,12 @@ impl LpImageView { value.parse::().ok().map(|x| x / 100.) } + + fn update_scrollbar_styles(&self) { + if self.settings().is_gtk_overlay_scrolling() { + self.remove_css_class("always-show-scrollbars"); + } else { + self.add_css_class("always-show-scrollbars"); + } + } } diff --git a/src/widgets/image_view.ui b/src/widgets/image_view.ui index ec39b37..05c8616 100644 --- a/src/widgets/image_view.ui +++ b/src/widgets/image_view.ui @@ -14,10 +14,6 @@ end start - 18 - 18 - 18 - 18 6