diff --git a/ks_includes/KlippyGtk.py b/ks_includes/KlippyGtk.py index 517862f3..5d40b737 100644 --- a/ks_includes/KlippyGtk.py +++ b/ks_includes/KlippyGtk.py @@ -6,6 +6,7 @@ import gi gi.require_version("Gtk", "3.0") from gi.repository import Gdk, GdkPixbuf, Gio, Gtk, Pango +from ks_includes.widgets.scroll import CustomScrolledWindow def find_widget(widget, wanted_type): @@ -270,11 +271,6 @@ class KlippyGtk: return logging.debug(f"Cannot remove dialog {dialog}") - def ScrolledWindow(self, steppers=True): - scroll = Gtk.ScrolledWindow(hexpand=True, vexpand=True, overlay_scrolling=False) - scroll.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | - Gdk.EventMask.TOUCH_MASK | - Gdk.EventMask.BUTTON_RELEASE_MASK) - if self.screen._config.get_main_config().getboolean("show_scroll_steppers", fallback=False) and steppers: - scroll.get_vscrollbar().get_style_context().add_class("with-steppers") - return scroll + def ScrolledWindow(self, steppers=True, **kwargs): + steppers = steppers and self.screen._config.get_main_config().getboolean("show_scroll_steppers", fallback=False) + return CustomScrolledWindow(steppers, **kwargs) diff --git a/ks_includes/widgets/scroll.py b/ks_includes/widgets/scroll.py new file mode 100644 index 00000000..57880d7a --- /dev/null +++ b/ks_includes/widgets/scroll.py @@ -0,0 +1,20 @@ +import gi + +gi.require_version("Gtk", "3.0") +from gi.repository import Gtk, Gdk + + +class CustomScrolledWindow(Gtk.ScrolledWindow): + def __init__(self, steppers=False, **kwargs): + args = { + "hexpand": True, + "vexpand": True, + "overlay_scrolling": False + } + args.update(kwargs) + super().__init__(**args) + self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | + Gdk.EventMask.TOUCH_MASK | + Gdk.EventMask.BUTTON_RELEASE_MASK) + if steppers: + self.get_vscrollbar().get_style_context().add_class("with-steppers")