*/
WindowInfo* app_tracker_top_window_info_get(App_Tracker_Data *atd);
+/**
+ * @brief This function allows access to submodule functinality of app_tracker.
+ *
+ * @param atd internal data of app tracker module
+ */
+AtspiAccessible* app_tracker_desktop_get(App_Tracker_Data *atd);
+
+/**
+ * @brief This function allows access to submodule functinality of app_tracker.
+ *
+ * @param atd internal data of app tracker module
+ */
+bool app_tracker_null_context_is(App_Tracker_Data *atd);
+
+/**
+ * @brief This function allows access to submodule functinality of app_tracker.
+ *
+ * @param atd internal data of app tracker module
+ */
+void app_tracker_null_context_switch(App_Tracker_Data *atd);
+
#endif /* end of include guard: APP_TRACKER_H_ */
AtspiAccessible *scroll_gesture_required_obj;
#endif
WindowTrackerData *window_tracker_data;
+ AtspiAccessible *desktop;
};
#ifndef SCREEN_READER_TV
navigator_set_context_switch_cb(nd, app_tracker_context_switch, atd);
#endif
+ atd->desktop = atspi_get_desktop(0);
+ if (!atd->desktop)
+ ERROR("atspi_get_desktop() failed");
+
atd->new_obj_highlighted_callback = NULL;
atd->new_obj_highlighted_callback_user_data = NULL;
atd->listener = atspi_event_listener_new(_on_atspi_event_cb, atd, NULL);
g_object_unref(atd->listener);
atd->listener = NULL;
+ g_object_unref(atd->desktop);
+
atd->new_obj_highlighted_callback = NULL;
if (atd->new_obj_highlighted_callback_user_data) {
WARNING("You should deregister new_obj_highlighted_callback before shutdown!");
{
return atd ? window_tracker_top_window_info_get(atd->window_tracker_data) : NULL;
}
+
+AtspiAccessible* app_tracker_desktop_get(App_Tracker_Data *atd)
+{
+ return atd ? atd->desktop : NULL;
+}
+
+bool app_tracker_null_context_is(App_Tracker_Data *atd)
+{
+ FlatNaviContext *ctx = navigator_get_flat_navi_context(atd->view_content_changed_ecd->user_data);
+
+ return flat_navi_context_root_get(ctx) == app_tracker_desktop_get(atd);
+}
+
+void app_tracker_null_context_switch(App_Tracker_Data *atd)
+{
+ FlatNaviContext *ctx = navigator_get_flat_navi_context(atd->view_content_changed_ecd->user_data);
+
+ DEBUG("Setting null context");
+
+ flat_navi_context_root_change(ctx, app_tracker_desktop_get(atd));
+}
+
touched_window = app_tracker_resource_id_window_get(nd->app_tracker_data, resource_id);
- if (!touched_window) return;
+ if (!touched_window) {
+ app_tracker_null_context_switch(nd->app_tracker_data);
+ return;
+ }
if (nd->context_switch_cb)
nd->context_switch_cb(nd->context_switch_data, touched_window);
DEBUG("Incoming gesture name is %s : %d %d %d %d %d %u", utils_enum_to_string(info->type),
info->x_beg, info->y_beg, info->x_end, info->y_end, info->state, info->resource_id);
+ if (info->type != ONE_FINGER_SINGLE_TAP && app_tracker_null_context_is(nd->app_tracker_data)) {
+ DEBUG("Ignoring gesture because of null context");
+ g_free(info);
+ return;
+ }
+
_on_auto_review_stop(nd);
if (info->type == ONE_FINGER_SINGLE_TAP && info->state == 3) {
nd->last_table_unique_id = g_strdup(table_unique_id);
}
}
+
#include <string.h>
+#include <app_tracker.h>
#include <logger.h>
#include <screen_reader.h>
#include <utils.h>
struct WindowTrackerDataImpl
{
WindowTrackerCb user_cb;
- void *user_data;
+ void *user_data; // App_Tracker_Data *
AtspiEventListener *listener;
AtspiAccessible *last_active_win;
AtspiAccessible *top_win;
wtd->user_cb(wtd->user_data, top_window);
}
}
+
+ if (!wi_top)
+ app_tracker_null_context_switch(wtd->user_data);
}
}
if (top_window)
wtd->user_cb(wtd->user_data, top_window);
}
+
+ if (!top_window)
+ app_tracker_null_context_switch(wtd->user_data);
+
gchar *id = atspi_accessible_get_unique_id(top_window, NULL);
DEBUG("top window: %s", id);
g_free(id);