#endif
typedef struct {
- AtspiAccessible *base_root;
AtspiAccessible *root;
+ GList *base_roots;
GList *callbacks;
guint timer;
} SubTreeRootData;
g_object_unref(new_highlighted_obj);
new_highlighted_obj = NULL;
}
-
if (!strcmp("object:state-changed:showing", event->type) ||
!strcmp("object:state-changed:visible", event->type) ||
!strcmp("object:state-changed:defunct", event->type)) {
for (l = _roots; l != NULL; l = l->next) {
std = l->data;
+ GList *l_base_root = g_list_last(std->base_roots);
- if (!_object_has_showing_state(std->root) && std->base_root) {
- std->root = std->base_root;
- std->base_root = NULL;
+ if (!_object_has_showing_state(std->root) && l_base_root->data != NULL ) {
+ std->root = l_base_root->data;
+ std->base_roots = g_list_remove(std->base_roots, std->root);
}
if (_is_descendant(std->root, event->source)) {
if (std->timer)
g_source_remove(std->timer);
- DEBUG("Before Checking if modal is showing");
- if (_object_has_modal_state(event->source)) {
- DEBUG("Object is modal");
- std->base_root = std->root;
- std->root = event->source;
- }
+ DEBUG("Before Checking if modal is showing");
+ if (_object_has_modal_state(event->source)) {
+ DEBUG("Object is modal");
+ std->base_roots = g_list_append(std->base_roots, std->root);
+ std->root = event->source;
+ }
std->timer = g_timeout_add(APP_TRACKER_INVACTIVITY_TIMEOUT, _on_timeout_cb, std);
}
}
if (!rd) {
rd = g_new(SubTreeRootData, 1);
rd->root = app;
- rd->base_root = NULL;
rd->callbacks = NULL;
rd->timer = 0;
_roots = g_list_append(_roots, rd);
+ rd->base_roots = NULL;
+ AtspiAccessible *t = NULL;
+ rd->base_roots = g_list_append(rd->base_roots, t);
}
cd = g_new(EventCallbackData, 1);
SubTreeRootData *std = NULL;
for (l = _roots; l != NULL; l = l->next) {
- if (((SubTreeRootData *) l->data)->root == app || ((SubTreeRootData *) l->data)->base_root == app) {
+ if (((SubTreeRootData *) l->data)->root == app || ((SubTreeRootData *) l->data)->base_roots->data == app) {
std = l->data;
break;
}
AtspiAccessible *modal_descendant = _get_modal_descendant(window);
app_tracker_callback_register(modal_descendant ? modal_descendant : window, _view_content_changed, NULL);
_view_content_changed(modal_descendant ? modal_descendant : window, NULL);
+ top_window = modal_descendant ? modal_descendant : window;
g_object_unref(modal_descendant);
} else {
flat_navi_context_free(context);
ERROR("No top window found!");
}
- top_window = window;
DEBUG("END");
}