Add ComboBox to potentially modal objects 98/311998/2
authorArtur Świgoń <a.swigon@samsung.com>
Fri, 31 May 2024 10:53:43 +0000 (12:53 +0200)
committerArtur Świgoń <a.swigon@samsung.com>
Fri, 31 May 2024 10:59:17 +0000 (12:59 +0200)
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 f7c1ba8186a53b90a2a95acc4b1ddd4ac3b2c5d6..7b16cc5dad802c16fcdf5b4714fe80aa48b8a1ee 100644 (file)
@@ -136,7 +136,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 ed98bd5018f84ce007abe626c8ec57b4de2fda2e..68ec9fa41f0ffa290372a73ddaf68b14d2c21d46 100644 (file)
@@ -345,7 +345,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);
                        }
@@ -356,7 +356,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)) {
@@ -874,4 +874,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 5dfc7dcb9508d6be015631c381e4e36683261142..f34c690a7fb047ee40aa494a11d44e94f2f11bba 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);