[gnome-builder] view-stack: add swipe gestures to view stack
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] view-stack: add swipe gestures to view stack
- Date: Tue, 25 Aug 2015 23:00:44 +0000 (UTC)
commit bc26db1f23395c07c762437fc7e21cccb26add07
Author: Christian Hergert <christian hergert me>
Date: Tue Aug 25 16:00:35 2015 -0700
view-stack: add swipe gestures to view stack
I feel that this interacts poorly with the GtkTextView selection grips,
but it does get us started in the right direction.
Longer term, I imagine we'll either make GtkStack allow to scroll multiple
child views, or write our own widget to do that. Then we can get more
appropriate slide transitions.
src/views/gb-view-stack-private.h | 1 +
src/views/gb-view-stack.c | 29 +++++++++++++++++++++++++++++
2 files changed, 30 insertions(+), 0 deletions(-)
---
diff --git a/src/views/gb-view-stack-private.h b/src/views/gb-view-stack-private.h
index 298ad38..a09389e 100644
--- a/src/views/gb-view-stack-private.h
+++ b/src/views/gb-view-stack-private.h
@@ -30,6 +30,7 @@ struct _GbViewStack
GList *focus_history;
IdeBackForwardList *back_forward_list;
+ GtkGesture *swipe_gesture;
/* Weak references */
GtkWidget *active_view;
diff --git a/src/views/gb-view-stack.c b/src/views/gb-view-stack.c
index 88867a6..53c5a33 100644
--- a/src/views/gb-view-stack.c
+++ b/src/views/gb-view-stack.c
@@ -399,6 +399,26 @@ gb_view_stack__views_listbox_row_activated_cb (GbViewStack *self,
}
static void
+gb_view_stack_swipe (GbViewStack *self,
+ gdouble velocity_x,
+ gdouble velocity_y,
+ GtkGestureSwipe *gesture)
+{
+ g_assert (GB_IS_VIEW_STACK (self));
+ g_assert (GTK_IS_GESTURE_SWIPE (gesture));
+
+ if (ABS (velocity_x) > ABS (velocity_y))
+ {
+ if (velocity_x < 0)
+ gb_widget_activate_action (GTK_WIDGET (self), "view-stack", "previous-view", NULL);
+ else if (velocity_x > 0)
+ gb_widget_activate_action (GTK_WIDGET (self), "view-stack", "next-view", NULL);
+ }
+
+ g_print ("SWIPE: %lf %lf\n", velocity_x, velocity_y);
+}
+
+static void
gb_view_stack_destroy (GtkWidget *widget)
{
GbViewStack *self = (GbViewStack *)widget;
@@ -434,6 +454,7 @@ gb_view_stack_finalize (GObject *object)
ide_clear_weak_pointer (&self->title_binding);
ide_clear_weak_pointer (&self->active_view);
g_clear_object (&self->back_forward_list);
+ g_clear_object (&self->swipe_gesture);
G_OBJECT_CLASS (gb_view_stack_parent_class)->finalize (object);
}
@@ -549,6 +570,14 @@ gb_view_stack_init (GbViewStack *self)
self,
G_CONNECT_SWAPPED);
+ self->swipe_gesture = gtk_gesture_swipe_new (GTK_WIDGET (self));
+ gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (self->swipe_gesture), TRUE);
+ g_signal_connect_object (self->swipe_gesture,
+ "swipe",
+ G_CALLBACK (gb_view_stack_swipe),
+ self,
+ G_CONNECT_SWAPPED);
+
/*
* FIXME:
*
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]