[libadwaita/wip/exalm/swipe-group: 8/14] swipe-tracker: Remove GtkButton hack
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libadwaita/wip/exalm/swipe-group: 8/14] swipe-tracker: Remove GtkButton hack
- Date: Fri, 7 May 2021 07:29:03 +0000 (UTC)
commit 0b64bfb9ac430af0bc03bdd3090e81a8ed6381bd
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Fri Feb 26 14:38:13 2021 +0500
swipe-tracker: Remove GtkButton hack
GtkButton doesn't claim the event sequence on press anymore, so we can
safely swipe from it.
Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/18
src/adw-swipe-tracker.c | 73 +------------------------------------------------
1 file changed, 1 insertion(+), 72 deletions(-)
---
diff --git a/src/adw-swipe-tracker.c b/src/adw-swipe-tracker.c
index d49b3d1..204ed8d 100644
--- a/src/adw-swipe-tracker.c
+++ b/src/adw-swipe-tracker.c
@@ -78,7 +78,6 @@ struct _AdwSwipeTracker
double start_x;
double start_y;
- gboolean use_capture_phase;
double initial_progress;
double progress;
@@ -135,7 +134,6 @@ reset (AdwSwipeTracker *self)
self->start_x = 0;
self->start_y = 0;
- self->use_capture_phase = FALSE;
self->cancelled = FALSE;
}
@@ -477,73 +475,13 @@ should_suppress_drag (AdwSwipeTracker *self,
return found_window_handle;
}
-static gboolean
-has_conflicts (AdwSwipeTracker *self,
- GtkWidget *widget)
-{
- AdwSwipeTracker *other;
-
- if (widget == GTK_WIDGET (self->swipeable))
- return TRUE;
-
- if (!ADW_IS_SWIPEABLE (widget))
- return FALSE;
-
- other = adw_swipeable_get_swipe_tracker (ADW_SWIPEABLE (widget));
-
- return self->orientation == other->orientation;
-}
-
-/* HACK: Since we don't have _gtk_widget_consumes_motion(), we can't do a proper
- * check for whether we can drag from a widget or not. So we trust the widgets
- * to propagate or stop their events. However, GtkButton stops press events,
- * making it impossible to drag from it.
- */
-static gboolean
-should_force_drag (AdwSwipeTracker *self,
- GtkWidget *widget)
-{
- GtkWidget *parent = widget;
- gboolean found_button = FALSE;
-
- while (parent && !has_conflicts (self, parent)) {
- found_button |= GTK_IS_BUTTON (parent);
-
- parent = gtk_widget_get_parent (parent);
- }
-
- return found_button && parent == GTK_WIDGET (self->swipeable);
-}
-
static void
drag_capture_begin_cb (AdwSwipeTracker *self,
double start_x,
double start_y,
GtkGestureDrag *gesture)
{
- GtkWidget *widget;
-
- if (self->state != ADW_SWIPE_TRACKER_STATE_NONE) {
- gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED);
- return;
- }
-
- widget = gtk_widget_pick (GTK_WIDGET (self->swipeable),
- start_x,
- start_y,
- GTK_PICK_DEFAULT);
-
- if (should_suppress_drag (self, widget) || !should_force_drag (self, widget)) {
- gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED);
- return;
- }
-
- self->use_capture_phase = TRUE;
-
- self->start_x = start_x;
- self->start_y = start_y;
-
- gtk_gesture_set_state (self->touch_gesture, GTK_EVENT_SEQUENCE_DENIED);
+ gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED);
}
static void
@@ -771,9 +709,6 @@ scroll_begin_cb (AdwSwipeTracker *self,
{
GdkEvent *event;
- if (self->use_capture_phase)
- return;
-
event = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (controller));
handle_scroll_event (self, event);
@@ -787,9 +722,6 @@ scroll_cb (AdwSwipeTracker *self,
{
GdkEvent *event;
- if (self->use_capture_phase)
- return GDK_EVENT_PROPAGATE;
-
event = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (controller));
return handle_scroll_event (self, event);
@@ -801,9 +733,6 @@ scroll_end_cb (AdwSwipeTracker *self,
{
GdkEvent *event;
- if (self->use_capture_phase)
- return;
-
event = gtk_event_controller_get_current_event (GTK_EVENT_CONTROLLER (controller));
handle_scroll_event (self, event);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]