Implement circular inc/dec for SPIN_BUTTON role 65/318065/1
authorYoungsun Suh <youngsun.suh@samsung.com>
Thu, 10 Oct 2024 03:00:49 +0000 (12:00 +0900)
committerSeoyeon Kim <seoyeon2.kim@samsung.com>
Mon, 13 Jan 2025 02:33:57 +0000 (11:33 +0900)
Change-Id: I78ad8cf129cee00ef5f605d76916399300adbcbd

src/navigator.c

index cc71134765b189699e413bd11e7bea429e5a205f..d965cf2737a48c3e7b4f0c873aa288a94b948ceb 100644 (file)
@@ -1190,6 +1190,18 @@ TIZEN_PROD_STATIC AtspiValue *_get_value_interface(NavigatorData *nd)
        return value_interface;
 }
 
+TIZEN_PROD_STATIC AtspiRole _get_role(NavigatorData *nd)
+{
+       AtspiRole role = ATSPI_ROLE_INVALID;
+       AtspiAccessible *obj = _get_currently_controlled_accessible(nd->current_obj);
+       if (obj)
+               role = atspi_accessible_get_role(obj, NULL);
+       g_clear_object(&obj);
+
+       return role;
+}
+
+
 TIZEN_PROD_STATIC void _value_inc(NavigatorData *nd, int diff)
 {
        AtspiValue *value_interface = _get_value_interface(nd);
@@ -1232,6 +1244,13 @@ TIZEN_PROD_STATIC void _value_inc(NavigatorData *nd, int diff)
                DEBUG("new value %f", (double)val);
        }
 
+       if (val > maximum_val && _get_role(nd) == ATSPI_ROLE_SPIN_BUTTON) {
+               gdouble minimum_val = atspi_value_get_minimum_value(value_interface, &err);
+               GERROR_CHECK(err)
+               val = minimum_val;
+               DEBUG("For SpinButton, setting new value to minimum if next value is greater than maximum %f", (double)val);
+       }
+
        if (val > maximum_val) {
                val = maximum_val;
                DEBUG("max value %f", (double)val);
@@ -1280,6 +1299,13 @@ TIZEN_PROD_STATIC void _value_dec(NavigatorData *nd, int diff)
                DEBUG("new value %f", (double)val);
        }
 
+       if (val < minimum_val && _get_role(nd) == ATSPI_ROLE_SPIN_BUTTON) {
+               gdouble maximum_val = atspi_value_get_maximum_value(value_interface, &err);
+               GERROR_CHECK(err)
+               val = maximum_val;
+               DEBUG("For SpinButton, setting new value to maximum if next value is lower than minimum %f", (double)val);
+       }
+
        if (val < minimum_val) {
                val = minimum_val;
                DEBUG("min value %f", (double)val);