[gtk/matthiasc/for-master: 138/140] spinbutton: Make buttons clickable




commit 65dea929bca7cc970f1cb674d0a06bf4a0038ea4
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Oct 15 15:42:15 2020 -0400

    spinbutton: Make buttons clickable
    
    We steal events from the buttons to implement our
    own behaviors, but buttons can also be "clicked"
    by a11y actions, so support that as well.

 gtk/gtkspinbutton.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)
---
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index b0ff1672f0..6f5d6945f0 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -862,6 +862,17 @@ start_spinning (GtkSpinButton *spin,
   gtk_spin_button_real_spin (spin, click_child == spin->up_button ? step : -step);
 }
 
+static void
+button_clicked_cb (GtkButton *button,
+                   gpointer   user_data)
+{
+  GtkSpinButton *spin = user_data;
+  double step;
+
+  step = gtk_adjustment_get_step_increment (spin->adjustment);
+  gtk_spin_button_real_spin (spin, GTK_WIDGET (button) == spin->up_button ? step : -step);
+}
+
 static void
 button_pressed_cb (GtkGestureClick *gesture,
                    int              n_pressses,
@@ -989,6 +1000,9 @@ gtk_spin_button_init (GtkSpinButton *spin_button)
   gtk_widget_set_can_focus (spin_button->down_button, FALSE);
   gtk_widget_set_parent (spin_button->down_button, GTK_WIDGET (spin_button));
 
+  g_signal_connect (spin_button->down_button, "clicked",
+                    G_CALLBACK (button_clicked_cb), spin_button);
+
   gesture = gtk_gesture_click_new ();
   gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0);
   gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), FALSE);
@@ -1006,6 +1020,9 @@ gtk_spin_button_init (GtkSpinButton *spin_button)
   gtk_widget_set_can_focus (spin_button->up_button, FALSE);
   gtk_widget_set_parent (spin_button->up_button, GTK_WIDGET (spin_button));
 
+  g_signal_connect (spin_button->down_button, "clicked",
+                    G_CALLBACK (button_clicked_cb), spin_button);
+
   gesture = gtk_gesture_click_new ();
   gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0);
   gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (gesture), FALSE);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]