Unify switching navigation context on TAP and on ATSPI event 05/311405/2 accepted/tizen/7.0/unified/20240522.101253
authorLukasz Oleksak <l.oleksak@samsung.com>
Thu, 16 May 2024 12:49:10 +0000 (14:49 +0200)
committerMaria Bialota <m.bialota@samsung.com>
Tue, 21 May 2024 13:35:26 +0000 (15:35 +0200)
Change-Id: I40b5060823b5622356dc2e4236644826103183bc

include/window_tracker.h
src/app_tracker.c
src/keyboard_tracker.c
src/navigator.c
src/window_tracker.c

index 629e313ed5e41e2744c40264e626e2e6aef15f9d..5bc26914d36a077c2896591a81ad48e92b3c1bbb 100644 (file)
@@ -55,7 +55,7 @@ AtspiAccessible *window_tracker_top_window_get(WindowTrackerData *wtd);
 /*
  * @brief Appends window from window list
  */
-void window_tracker_window_append(WindowTrackerData *wtd, AtspiAccessible *window, AtspiRole role);
+void window_tracker_window_append(WindowTrackerData *wtd, AtspiAccessible *window);
 
 /*
  * @brief Removes window from window list
index b23bc58e3617f9feb0f3291e9c708c91d6840c8e..5c227ded7da92eec30ea4c276e64874768c81305 100644 (file)
@@ -55,6 +55,10 @@ struct _App_Tracker_Data {
        AtspiAccessible *desktop;
 };
 
+#ifndef SCREEN_READER_TV
+static void app_tracker_window_append(void *data, AtspiAccessible *root);
+#endif
+
 #ifndef SCREEN_READER_TV
 static void app_tracker_context_switch(void *data, AtspiAccessible *root);
 #endif
@@ -328,7 +332,7 @@ static void _on_atspi_event_cb(AtspiEvent *event, void *user_data)
                                because the 'visible' callback of window tracker is not called on window tracker side,
                                if window object is removed. */
                                DEBUG("Append Window");
-                               window_tracker_window_append(atd->window_tracker_data, event->source, role);
+                               window_tracker_window_append(atd->window_tracker_data, event->source);
                        } else if (role == ATSPI_ROLE_PAGE_TAB) {
                                // refresh default label for newly showing page tab
                                DEBUG("Refreshing TAB");
@@ -640,7 +644,7 @@ app_tracker_init(AppTrackerEventWithDefaultLabelInfoCB view_content_changed_cb,
        DEBUG("Registering app_tracker_context_switch=%p, for atd=%p", app_tracker_context_switch, atd);
        window_tracker_register(atd->window_tracker_data, app_tracker_context_switch, atd);
        window_tracker_active_window_request(atd->window_tracker_data);
-       navigator_set_context_switch_cb(nd, app_tracker_context_switch, atd);
+       navigator_set_context_switch_cb(nd, app_tracker_window_append, atd);
 #endif
 
        atd->desktop = atspi_get_desktop(0);
@@ -707,6 +711,18 @@ void app_tracker_shutdown(App_Tracker_Data *atd)
        g_free(atd);
 }
 
+#ifndef SCREEN_READER_TV
+static void app_tracker_window_append(void *data, AtspiAccessible *root)
+{
+       App_Tracker_Data *atd = (App_Tracker_Data *)data;
+       if (!atd) {
+               ERROR("app_tracker module used without initialization");
+               return;
+       }
+       window_tracker_window_append(atd->window_tracker_data, root);
+}
+#endif
+
 #ifndef SCREEN_READER_TV
 static void app_tracker_context_switch(void *data, AtspiAccessible *root)
 {
index 3f04dc72fe407fc17afc2f75e4393d6950001ff5..cc353f8501b16334547d4044ddd67913f178139b 100644 (file)
@@ -99,8 +99,7 @@ static void keyboard_changed_cb(keynode_t *node, void *user_data)
 static void _set_vconf_key_changed_callback_keyboard_status(KeyboardTrackerData *ktd)
 {
        DEBUG("START");
-       int keyboard_state;
-       int ret = vconf_get_int(VCONFKEY_ISF_INPUT_PANEL_STATE, &keyboard_state);
+       int ret = vconf_get_int(VCONFKEY_ISF_INPUT_PANEL_STATE, &ktd->prev_keyboard_state);
        if (ret != 0) {
                ERROR("ret == %d", ret);
                return;
index b477360a9c4f1bed1ecafabca1e4d6b8625c0624..9cd51dd1c1645458fb617f323cd2e3ac2fe30aed 100644 (file)
@@ -2285,15 +2285,12 @@ TIZEN_PROD_STATIC void on_gesture_detected(void *data, const Eldbus_Message *msg
                                return;
                        }
                        nd->last_hover_event_time = info->state != 1 ? -1 : info->event_time;
+                       _focus_widget(nd, info);
+
                        keyboard_status = keyboard_event_status(nd->keyboard_tracker_data, info->resource_id);
                        if (keyboard_status) {
                                keyboard_signal_emit(nd->keyboard_tracker_data, info->type, info->x_end, info->y_end);
-                               /*TODO: Check if break is necessary or not.
-                               If the keypad window is top, the _focus_widget should be used
-                               to make highlight on keypad window. */
-                               //break;
                        }
-                       _focus_widget(nd, info);
                }
                break;
        case TWO_FINGERS_HOVER:
@@ -2340,18 +2337,14 @@ TIZEN_PROD_STATIC void on_gesture_detected(void *data, const Eldbus_Message *msg
                }
                break;
        case ONE_FINGER_SINGLE_TAP:
-               keyboard_status = keyboard_event_status(nd->keyboard_tracker_data, info->resource_id);
-               if (keyboard_status) {
-                       keyboard_signal_emit(nd->keyboard_tracker_data, info->type, info->x_end, info->y_end);
-                       /*TODO: Check if break is necessary or not.
-                       If the keypad window is top, the _focus_widget should be used
-                       to make highlight on keypad window. */
-                       //break;
-               }
                if (info->state == 2 && nd->prepared)
                        nd->prepared = false;
                if (!nd->prepared)
                        _focus_widget(nd, info);
+               keyboard_status = keyboard_event_status(nd->keyboard_tracker_data, info->resource_id);
+               if (keyboard_status) {
+                       keyboard_signal_emit(nd->keyboard_tracker_data, info->type, info->x_end, info->y_end);
+               }
                break;
        case ONE_FINGER_DOUBLE_TAP:
                keyboard_status = keyboard_event_status(nd->keyboard_tracker_data, info->resource_id);
index ca13c7c11a4fd9272943df3f85b49aabeb4b73fe..f439dfbfe30608ae8b5457035150179408419f94 100644 (file)
@@ -391,6 +391,7 @@ static void _on_atspi_window_cb(AtspiEvent *event, void *user_data)
                        (window_activate_info_type & ACCESSIBLE_WINDOW_ACTIVATE_INFO_KEYBOARD);
                if (keyboard_window_activated) {
                        wtd->keyboard_window = g_object_ref(event->source);
+                       window_tracker_keyboard_window_append(wtd);
                        goto end;
                }
                _window_append(wtd, event->source, EINA_TRUE, EINA_FALSE, window_activate_info_type);
@@ -629,8 +630,12 @@ AtspiAccessible *window_tracker_top_window_get(WindowTrackerData *wtd)
        return _top_window_get(wtd);
 }
 
-void window_tracker_window_append(WindowTrackerData *wtd, AtspiAccessible *window, AtspiRole role)
+void window_tracker_window_append(WindowTrackerData *wtd, AtspiAccessible *window)
 {
+       if (atspi_accessible_is_equal(wtd->keyboard_window, window)) {
+               window_tracker_keyboard_window_append(wtd);
+               return;
+       }
        _window_append(wtd, window, EINA_TRUE, EINA_FALSE, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED);
 }