return resource_id;
}
-static void _window_append(WindowTrackerData *wtd, AtspiAccessible *window, Eina_Bool view_change_need,
+static bool _window_append(WindowTrackerData *wtd, AtspiAccessible *window, Eina_Bool view_change_need,
Eina_Bool keyboard_window_is, WindowActivateInfoType window_activate_info_type, Eina_Bool is_focused)
{
// Increase reference count immediately to guard against g_object_unref() in the loop below.
if (!wi) {
DEBUG("Memory allocation by g_malloc0 is failed");
g_object_unref(window);
- return;
+ return false;
}
wi->window = window;
wi->keyboard_window_is = keyboard_window_is;
DEBUG("Window appended: %s", id);
g_free(id);
_window_stack_print(wtd);
+ return true;
}
static AtspiAccessible *_top_focused_window_get(WindowTrackerData *wtd, Eina_Bool include_keyboard)
static void _on_atspi_window_cb(AtspiEvent *event, void *user_data)
{
WindowTrackerData *wtd = user_data;
+ bool ret = false;
gchar *name = atspi_accessible_get_name(event->source, NULL);
window_tracker_keyboard_window_append(wtd);
goto end;
}
- _window_append(wtd, event->source, EINA_TRUE, EINA_FALSE, window_activate_info_type, EINA_TRUE);
- _active_window_set(wtd, event->source, EINA_TRUE);
+ ret = _window_append(wtd, event->source, EINA_TRUE, EINA_FALSE, window_activate_info_type, EINA_TRUE);
+ if (ret == true) _active_window_set(wtd, event->source, EINA_TRUE);
} else if (!g_strcmp0(event->type, "window:deactivate")) {
_active_window_set(wtd, event->source, EINA_FALSE);
} else if (!g_strcmp0(event->type, "window:destroy")) {
if (event->detail1) { /* Visible */
if (role == ATSPI_ROLE_WINDOW || keyboard_is) {
DEBUG("Append %sWindow", keyboard_is ? "Keyboard " : "");
- _window_append(wtd, event->source, !keyboard_is, keyboard_is, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED, EINA_TRUE);
- if (!keyboard_is)
+ ret = _window_append(wtd, event->source, !keyboard_is, keyboard_is, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED, EINA_TRUE);
+ if (!keyboard_is && ret)
_active_window_set(wtd, event->source, EINA_TRUE);
}
} else { /* Invisible */
AtspiRole role = atspi_accessible_get_role(event->source, NULL);
if (role == ATSPI_ROLE_FRAME) {
if (event->detail1) {
- _window_append(wtd, event->source, EINA_TRUE, EINA_FALSE, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED, EINA_TRUE);
- _active_window_set(wtd, event->source, EINA_TRUE);
+ ret = _window_append(wtd, event->source, EINA_TRUE, EINA_FALSE, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED, EINA_TRUE);
+ if (ret) _active_window_set(wtd, event->source, EINA_TRUE);
} else
_window_remove(wtd, event->source);
}
void window_tracker_window_append(WindowTrackerData *wtd, AtspiAccessible *window, Eina_Bool is_focused)
{
+ bool ret = false;
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, is_focused);
+ ret = _window_append(wtd, window, EINA_TRUE, EINA_FALSE, ACCESSIBLE_WINDOW_ACTIVATE_INFO_DEFAULT_LABEL_ENABLED, is_focused);
// is_focused is true when this is called from focus_widget. Hence, we should switch focus to the given window.
- if (is_focused)
+ if (is_focused && ret)
_active_window_set(wtd, window, EINA_TRUE);
}