static void
_on_atspi_window_cb(const AtspiEvent *event)
{
- if (!strcmp(event->type, "window:activate"))
+ if (!strcmp(event->type, "window:activate") ||
+ !strcmp(event->type, "window:restore"))
{
- last_active_win = event->source;
- if (user_cb) user_cb(user_data, event->source);
+ if (last_active_win != event->source)
+ {
+ if (user_cb) user_cb(user_data, event->source);
+ last_active_win = event->source;
+ }
}
else if (!strcmp(event->type, "window:deactivate"))
{
if ((last_active_win == event->source) &&
user_cb)
user_cb(user_data, NULL);
+ last_active_win = NULL;
}
}
listener = atspi_event_listener_new_simple(_on_atspi_window_cb, NULL);
atspi_event_listener_register(listener, "window:activate", NULL);
atspi_event_listener_register(listener, "window:deactivate", NULL);
+ atspi_event_listener_register(listener, "window:restore", NULL);
}
void window_tracker_shutdown(void)
{
atspi_event_listener_deregister(listener, "window:activate", NULL);
atspi_event_listener_deregister(listener, "window:deactivate", NULL);
+ atspi_event_listener_deregister(listener, "window:restore", NULL);
g_object_unref(listener);
listener = NULL;
user_cb = NULL;