Add ComboBox to potentially modal objects 24/317724/1
authorArtur Świgoń <a.swigon@samsung.com>
Fri, 31 May 2024 10:53:43 +0000 (12:53 +0200)
committerSeoyeon Kim <seoyeon2.kim@samsung.com>
Tue, 7 Jan 2025 05:11:37 +0000 (14:11 +0900)
An object needs to have both ATSPI_ROLE_COMBO_BOX and ATSPI_STATE_MODAL.

Change-Id: Iefd43d570f6bc04a7ae50bd3fb3a246ae0abdddc

include/utils.h
src/app_tracker.c
src/utils.c

index df664bd1916224ee99229e549198e8f866ca15a2..f65b8ae957f629ae09c933ea1e3b297a0e2a5fb4 100644 (file)
@@ -138,7 +138,7 @@ unsigned short int get_object_reading_info_type_attributes(AtspiAccessible *obj)
 void utils_a11y_bus_connection_set(Eldbus_Connection *conn);
 Eldbus_Connection *utils_a11y_bus_connection_get(void);
 
-Eina_Bool object_has_modal_role(AtspiRole role);
+Eina_Bool object_has_modal_role(AtspiAccessible *obj, AtspiRole role);
 Eina_Bool object_has_focused_state(AtspiAccessible *obj);
 Eina_Bool object_has_defunct_state(AtspiAccessible *obj);
 Eina_Bool object_has_highlighted_state(AtspiAccessible *obj);
index 16ebba3ec368977e435aaf1f77164bd79e499a6c..8b83605ed813e481ad06eeec4ab7ec9e2c305610 100644 (file)
@@ -341,7 +341,7 @@ static void _on_atspi_event_cb(AtspiEvent *event, void *user_data)
                                DEBUG("READING NOTIFICATION : %s", text_to_speak ? text_to_speak : "text_to_speak nil");
                                tw_speak_customized(text_to_speak, EINA_TRUE, EINA_FALSE, event->source, 0);
                                free(text_to_speak);
-                       } else if (object_has_modal_role(role)) {
+                       } else if (object_has_modal_role(event->source, role)) {
                                DEBUG("Rebuilding context on modal PUSH");
                                timer_reschedule(atd);
                        }
@@ -352,7 +352,7 @@ static void _on_atspi_event_cb(AtspiEvent *event, void *user_data)
                                if window object is removed. */
                                DEBUG("Remove Window");
                                window_tracker_window_remove(atd->window_tracker_data, event->source);
-                       } else if (object_has_modal_role(role)) {
+                       } else if (object_has_modal_role(event->source, role)) {
                                DEBUG("Rebuilding context on modal POP");
                                timer_reschedule(atd);
                        } else if (atspi_accessible_is_equal(flat_navi_context_current_get(navigator_get_flat_navi_context(atd->view_content_changed_ecd->user_data)), event->source)) {
@@ -856,4 +856,3 @@ void app_tracker_null_context_switch(App_Tracker_Data *atd)
        g_clear_object(&atd->root);
        flat_navi_context_root_change(ctx, app_tracker_desktop_get(atd));
 }
-
index 876f84535d0598d48c2d7f65b3854fd131f0400e..8a450a68ba350686f3e578cd6ebf7de1cb78693f 100644 (file)
@@ -202,7 +202,22 @@ unsigned short int get_object_reading_info_type_attributes(AtspiAccessible *obj)
        return attribute;
 }
 
-Eina_Bool object_has_modal_role(AtspiRole role)
+static Eina_Bool _object_has_state(AtspiAccessible *obj, AtspiStateType state)
+{
+       if (!obj)
+               return EINA_FALSE;
+
+       Eina_Bool ret = EINA_FALSE;
+
+       AtspiStateSet *ss = atspi_accessible_get_state_set(obj);
+
+       if (atspi_state_set_contains(ss, state))
+               ret = EINA_TRUE;
+       g_object_unref(ss);
+       return ret;
+}
+
+Eina_Bool object_has_modal_role(AtspiAccessible *obj, AtspiRole role)
 {
        Eina_Bool ret = EINA_FALSE;
 
@@ -212,6 +227,9 @@ Eina_Bool object_has_modal_role(AtspiRole role)
        case ATSPI_ROLE_DIALOG:
                ret = EINA_TRUE;
                break;
+       case ATSPI_ROLE_COMBO_BOX:
+               ret = _object_has_state(obj, ATSPI_STATE_MODAL);
+               break;
        default:
                break;
        }
@@ -219,21 +237,6 @@ Eina_Bool object_has_modal_role(AtspiRole role)
        return ret;
 }
 
-static Eina_Bool _object_has_state(AtspiAccessible *obj, AtspiStateType state)
-{
-       if (!obj)
-               return EINA_FALSE;
-
-       Eina_Bool ret = EINA_FALSE;
-
-       AtspiStateSet *ss = atspi_accessible_get_state_set(obj);
-
-       if (atspi_state_set_contains(ss, state))
-               ret = EINA_TRUE;
-       g_object_unref(ss);
-       return ret;
-}
-
 Eina_Bool object_has_defunct_state(AtspiAccessible *obj)
 {
        return _object_has_state(obj, ATSPI_STATE_DEFUNCT);