void forceCloseWindow(FrameworkWindow *window) { forceCloseChildren(window); if(window->menu) { ClearMenuStrip(window->intuitionWindow); FreeMenus(window->menu); } CloseWindow(window->intuitionWindow); if(window->kind->freeGadgets) { (*window->kind->freeGadgets)(window->gadgets); } if(window->kind->closeWindow) { (*window->kind->closeWindow)(window); } if(window->parent) { removeChildWindow(window->parent, window); } if(window->next) { window->next->prev = window->prev; } if(window->prev) { window->prev->next = window->next; } free(window); }
bool Compositor::xcbEvent(const xcb_destroy_notify_event_t *e) { if (e->event != root_) { return false; } removeChildWindow(e->window); return true; }
bool Compositor::xcbEvent(const xcb_reparent_notify_event_t *e) { if (e->event != root_) { return false; } if (e->parent == root_) { addChildWindow(e->window); } else { removeChildWindow(e->window); } return xcbDispatchEvent(e); }