diff --git a/modules/other/gail/gailadjustment.c b/modules/other/gail/gailadjustment.c index 8a86835a84..5226488312 100644 --- a/modules/other/gail/gailadjustment.c +++ b/modules/other/gail/gailadjustment.c @@ -38,6 +38,8 @@ static void gail_adjustment_get_maximum_value (AtkValue *obj, GValue *value); static void gail_adjustment_get_minimum_value (AtkValue *obj, GValue *value); +static void gail_adjustment_get_minimum_increment (AtkValue *obj, + GValue *value); static gboolean gail_adjustment_set_current_value (AtkValue *obj, const GValue *value); @@ -101,6 +103,7 @@ atk_value_interface_init (AtkValueIface *iface) iface->get_current_value = gail_adjustment_get_current_value; iface->get_maximum_value = gail_adjustment_get_maximum_value; iface->get_minimum_value = gail_adjustment_get_minimum_value; + iface->get_minimum_increment = gail_adjustment_get_minimum_increment; iface->set_current_value = gail_adjustment_set_current_value; } @@ -164,6 +167,47 @@ gail_adjustment_get_minimum_value (AtkValue *obj, g_value_set_double (value, minimum_value); } +static void +gail_adjustment_get_minimum_increment (AtkValue *obj, + GValue *value) +{ + GtkAdjustment* adjustment; + gdouble minimum_increment; + + adjustment = GAIL_ADJUSTMENT (obj)->adjustment; + if (adjustment == NULL) + { + /* State is defunct */ + return; + } + + if (adjustment->step_increment != 0 && + adjustment->page_increment != 0) + { + if (ABS (adjustment->step_increment) < ABS (adjustment->page_increment)) + minimum_increment = adjustment->step_increment; + else + minimum_increment = adjustment->page_increment; + } + else if (adjustment->step_increment == 0 && + adjustment->page_increment == 0) + { + minimum_increment = 0; + } + else if (adjustment->step_increment == 0) + { + minimum_increment = adjustment->page_increment; + } + else + { + minimum_increment = adjustment->step_increment; + } + + memset (value, 0, sizeof (GValue)); + g_value_init (value, G_TYPE_DOUBLE); + g_value_set_double (value, minimum_increment); +} + static gboolean gail_adjustment_set_current_value (AtkValue *obj, const GValue *value) diff --git a/modules/other/gail/gailrange.c b/modules/other/gail/gailrange.c index c21a5b9840..adeb55ecfd 100644 --- a/modules/other/gail/gailrange.c +++ b/modules/other/gail/gailrange.c @@ -48,6 +48,8 @@ static void gail_range_get_maximum_value (AtkValue *obj, GValue *value); static void gail_range_get_minimum_value (AtkValue *obj, GValue *value); +static void gail_range_get_minimum_increment (AtkValue *obj, + GValue *value); static gboolean gail_range_set_current_value (AtkValue *obj, const GValue *value); static void gail_range_value_changed (GtkAdjustment *adjustment, @@ -159,6 +161,7 @@ atk_value_interface_init (AtkValueIface *iface) iface->get_current_value = gail_range_get_current_value; iface->get_maximum_value = gail_range_get_maximum_value; iface->get_minimum_value = gail_range_get_minimum_value; + iface->get_minimum_increment = gail_range_get_minimum_increment; iface->set_current_value = gail_range_set_current_value; } @@ -216,6 +219,23 @@ gail_range_get_minimum_value (AtkValue *obj, atk_value_get_minimum_value (ATK_VALUE (range->adjustment), value); } +static void +gail_range_get_minimum_increment (AtkValue *obj, GValue *value) +{ + GailRange *range; + + g_return_if_fail (GAIL_IS_RANGE (obj)); + + range = GAIL_RANGE (obj); + if (range->adjustment == NULL) + /* + * Adjustment has not been specified + */ + return; + + atk_value_get_minimum_increment (ATK_VALUE (range->adjustment), value); +} + static gboolean gail_range_set_current_value (AtkValue *obj, const GValue *value) { diff --git a/modules/other/gail/gailspinbutton.c b/modules/other/gail/gailspinbutton.c index c8ce6526d3..1cc36db5ed 100644 --- a/modules/other/gail/gailspinbutton.c +++ b/modules/other/gail/gailspinbutton.c @@ -42,6 +42,8 @@ static void gail_spin_button_get_maximum_value (AtkValue *obj, GValue *value); static void gail_spin_button_get_minimum_value (AtkValue *obj, GValue *value); +static void gail_spin_button_get_minimum_increment (AtkValue *obj, + GValue *value); static gboolean gail_spin_button_set_current_value (AtkValue *obj, const GValue *value); static void gail_spin_button_value_changed (GtkAdjustment *adjustment, @@ -106,6 +108,7 @@ atk_value_interface_init (AtkValueIface *iface) iface->get_current_value = gail_spin_button_get_current_value; iface->get_maximum_value = gail_spin_button_get_maximum_value; iface->get_minimum_value = gail_spin_button_get_minimum_value; + iface->get_minimum_increment = gail_spin_button_get_minimum_increment; iface->set_current_value = gail_spin_button_set_current_value; } @@ -163,6 +166,23 @@ gail_spin_button_get_minimum_value (AtkValue *obj, atk_value_get_minimum_value (ATK_VALUE (spin_button->adjustment), value); } +static void +gail_spin_button_get_minimum_increment (AtkValue *obj, GValue *value) +{ + GailSpinButton *spin_button; + + g_return_if_fail (GAIL_IS_SPIN_BUTTON (obj)); + + spin_button = GAIL_SPIN_BUTTON (obj); + if (spin_button->adjustment == NULL) + /* + * Adjustment has not been specified + */ + return; + + atk_value_get_minimum_increment (ATK_VALUE (spin_button->adjustment), value); +} + static gboolean gail_spin_button_set_current_value (AtkValue *obj, const GValue *value)