From cd556c3811075ea26f171f808bdc5aaeee10bbe4 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Thu, 4 Apr 2024 14:11:10 +0200 Subject: [PATCH] spinbutton: Fix a corner case Fix a bug where a zero increment would make the value unsettable, when the more natural operation is to allow any value to be set. --- gtk/gtkspinbutton.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c index 51e958ad1b..47bad0cb12 100644 --- a/gtk/gtkspinbutton.c +++ b/gtk/gtkspinbutton.c @@ -1524,17 +1524,18 @@ gtk_spin_button_snap (GtkSpinButton *spin_button, double val) { double inc; - double tmp; inc = gtk_adjustment_get_step_increment (spin_button->adjustment); - if (inc == 0) - return; + if (inc != 0) + { + double tmp; - tmp = (val - gtk_adjustment_get_lower (spin_button->adjustment)) / inc; - if (tmp - floor (tmp) < ceil (tmp) - tmp) - val = gtk_adjustment_get_lower (spin_button->adjustment) + floor (tmp) * inc; - else - val = gtk_adjustment_get_lower (spin_button->adjustment) + ceil (tmp) * inc; + tmp = (val - gtk_adjustment_get_lower (spin_button->adjustment)) / inc; + if (tmp - floor (tmp) < ceil (tmp) - tmp) + val = gtk_adjustment_get_lower (spin_button->adjustment) + floor (tmp) * inc; + else + val = gtk_adjustment_get_lower (spin_button->adjustment) + ceil (tmp) * inc; + } gtk_spin_button_set_value (spin_button, val); }