From 1327dc23e43a4a5918eef2d54bf634dbf441eaa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Dzi=C4=99giel?= Date: Sun, 7 Apr 2024 20:08:48 +0200 Subject: [PATCH] clapper-gtk: Fix seek bar touchpad scrolling Since we only do seek on scale drop, handle scrubbing using touchpad the same way by marking it as "dragging" after scrubbing starts and doing seek after it ends. --- src/lib/clapper-gtk/clapper-gtk-seek-bar.c | 38 +++++++++++++++++++ .../clapper-gtk/ui/clapper-gtk-seek-bar.ui | 9 +++++ 2 files changed, 47 insertions(+) diff --git a/src/lib/clapper-gtk/clapper-gtk-seek-bar.c b/src/lib/clapper-gtk/clapper-gtk-seek-bar.c index f157379b..6afdbf99 100644 --- a/src/lib/clapper-gtk/clapper-gtk-seek-bar.c +++ b/src/lib/clapper-gtk/clapper-gtk-seek-bar.c @@ -55,6 +55,9 @@ struct _ClapperGtkSeekBar gboolean has_hours; gboolean has_markers; + gboolean can_scrub; + gboolean scrubbing; + gboolean dragging; guint position_uint; @@ -288,6 +291,38 @@ scale_css_classes_changed_cb (GtkWidget *widget, } } +static void +scale_scroll_begin_cb (GtkEventControllerScroll *scroll, ClapperGtkSeekBar *self) +{ + self->can_scrub = TRUE; +} + +static gboolean +scale_scroll_cb (GtkEventControllerScroll *scroll, + gdouble dx, gdouble dy, ClapperGtkSeekBar *self) +{ + if (self->can_scrub && !self->scrubbing) { + GST_DEBUG_OBJECT (self, "Scrubbing start"); + self->scrubbing = TRUE; + gtk_widget_add_css_class (self->scale, "dragging"); + + return TRUE; + } + + return FALSE; +} + +static void +scale_scroll_end_cb (GtkEventControllerScroll *scroll, ClapperGtkSeekBar *self) +{ + if (self->scrubbing) { + GST_DEBUG_OBJECT (self, "Scrubbing end"); + gtk_widget_remove_css_class (self->scale, "dragging"); + self->scrubbing = FALSE; + } + self->can_scrub = FALSE; +} + static void motion_cb (GtkEventControllerMotion *motion, gdouble x, gdouble y, ClapperGtkSeekBar *self) @@ -773,6 +808,9 @@ clapper_gtk_seek_bar_class_init (ClapperGtkSeekBarClass *klass) gtk_widget_class_bind_template_callback (widget_class, scale_value_changed_cb); gtk_widget_class_bind_template_callback (widget_class, scale_css_classes_changed_cb); + gtk_widget_class_bind_template_callback (widget_class, scale_scroll_begin_cb); + gtk_widget_class_bind_template_callback (widget_class, scale_scroll_cb); + gtk_widget_class_bind_template_callback (widget_class, scale_scroll_end_cb); gtk_widget_class_bind_template_callback (widget_class, motion_cb); gtk_widget_class_bind_template_callback (widget_class, motion_leave_cb); gtk_widget_class_bind_template_callback (widget_class, touch_released_cb); diff --git a/src/lib/clapper-gtk/ui/clapper-gtk-seek-bar.ui b/src/lib/clapper-gtk/ui/clapper-gtk-seek-bar.ui index 264ecb49..c0109aa0 100644 --- a/src/lib/clapper-gtk/ui/clapper-gtk-seek-bar.ui +++ b/src/lib/clapper-gtk/ui/clapper-gtk-seek-bar.ui @@ -29,6 +29,15 @@ position_adjustment + + + capture + both-axes + + + + +