Perform synchronization of local cache of window information also on window:destroy... 35/274435/3
authorLukasz Oleksak <l.oleksak@samsung.com>
Thu, 28 Apr 2022 08:32:05 +0000 (10:32 +0200)
committerLukasz Oleksak <l.oleksak@samsung.com>
Thu, 22 Dec 2022 15:17:01 +0000 (15:17 +0000)
Change-Id: I315a230ec28465763143e6238d89b497218ff495

src/window_tracker.c

index 90343ee6218111a14002c3ce6539f499acfcdc75..eaf4ccab5bfa386aef020b97530f1e25171d7153 100644 (file)
@@ -378,6 +378,9 @@ static void _on_atspi_window_cb(AtspiEvent *event, void *user_data)
                        goto end;
                }
                _window_append(wtd, event->source, EINA_TRUE, EINA_FALSE, window_activate_info_type);
+       } else if (!g_strcmp0(event->type, "window:deactivate") || !g_strcmp0(event->type, "window:destroy")) {
+               DEBUG("Remove Window");
+               _window_remove(wtd, event->source);
        } else if (!g_strcmp0("object:state-changed:visible", event->type)
                           && name && (!g_strcmp0(name, "Quickpanel Window") || !g_strcmp0(name, "volume") || !g_strcmp0(name, "Keyboard"))) {
 
@@ -521,6 +524,7 @@ WindowTrackerData *window_tracker_init(void)
 
        atspi_event_listener_register(wtd->listener, "window:activate", NULL);
        atspi_event_listener_register(wtd->listener, "window:deactivate", NULL);
+       atspi_event_listener_register(wtd->listener, "window:destroy", NULL);
        atspi_event_listener_register(wtd->listener, "object:state-changed:visible", NULL);
 
        _name_owner_changed_listener_register(wtd);
@@ -545,6 +549,7 @@ void window_tracker_shutdown(WindowTrackerData *wtd)
        if (wtd->listener) {
                atspi_event_listener_deregister(wtd->listener, "window:activate", NULL);
                atspi_event_listener_deregister(wtd->listener, "window:deactivate", NULL);
+               atspi_event_listener_deregister(wtd->listener, "window:destroy", NULL);
                atspi_event_listener_deregister(wtd->listener, "object:state-changed:visible", NULL);
                g_object_unref(wtd->listener);
                wtd->listener = NULL;