diff options
author | Daniel Boles <dboles.src@gmail.com> | 2018-07-04 20:18:04 +0100 |
---|---|---|
committer | Daniel Boles <dboles.src@gmail.com> | 2018-07-04 20:47:40 +0100 |
commit | b9aea5f461cd9ee3eabf26da5f7e87132f728487 (patch) | |
tree | bc85f71c012771b6131d245a6b5ababf5b0a8455 | |
parent | 2feb5c93ca02f3ca6cb09d45be80f6b7bface500 (diff) | |
download | gtk+-dboles/switch-slider-active-state-gtk4.tar.gz |
Switch: Implement :active state on slider subnodedboles/switch-slider-active-state-gtk4
https://gitlab.gnome.org/GNOME/gtk/issues/1201
-rw-r--r-- | gtk/gtkswitch.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/gtk/gtkswitch.c b/gtk/gtkswitch.c index b02c7fdd04..de24142e6f 100644 --- a/gtk/gtkswitch.c +++ b/gtk/gtkswitch.c @@ -181,6 +181,18 @@ gtk_switch_begin_toggle_animation (GtkSwitch *sw) } static void +gtk_switch_set_slider_state_active (GtkSwitch *sw, + gboolean active) +{ + GtkSwitchPrivate *priv = gtk_switch_get_instance_private (sw); + + if (active) + gtk_widget_set_state_flags (priv->slider, GTK_STATE_FLAG_ACTIVE, FALSE); + else + gtk_widget_unset_state_flags (priv->slider, GTK_STATE_FLAG_ACTIVE); +} + +static void gtk_switch_multipress_gesture_pressed (GtkGestureMultiPress *gesture, gint n_press, gdouble x, @@ -199,6 +211,8 @@ gtk_switch_multipress_gesture_pressed (GtkGestureMultiPress *gesture, if ((priv->is_active && x <= switch_bounds.size.width / 2.0) || (!priv->is_active && x > switch_bounds.size.width / 2.0)) gtk_gesture_set_state (priv->pan_gesture, GTK_EVENT_SEQUENCE_DENIED); + else + gtk_switch_set_slider_state_active (sw, TRUE); } static void @@ -210,6 +224,7 @@ gtk_switch_multipress_gesture_released (GtkGestureMultiPress *gesture, { GdkEventSequence *sequence; + gtk_switch_set_slider_state_active (sw, FALSE); sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture)); if (gtk_widget_contains (GTK_WIDGET (sw), x, y) && @@ -242,6 +257,7 @@ gtk_switch_pan_gesture_pan (GtkGesturePan *gesture, priv->handle_pos = CLAMP (offset, 0, 1.0); /* we need to redraw the handle */ + gtk_switch_set_slider_state_active (sw, TRUE); gtk_widget_queue_allocate (widget); } @@ -270,6 +286,7 @@ gtk_switch_pan_gesture_drag_end (GtkGestureDrag *gesture, return; priv->handle_pos = active ? 1.0 : 0.0; + gtk_switch_set_slider_state_active (sw, FALSE); gtk_switch_set_active (sw, active); gtk_widget_queue_allocate (GTK_WIDGET (sw)); } |