X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.cc;h=e626081ce19e871a2fe37e25653f5f257ee69ed0;hb=d7a30f93b517ac76816d0acea92e9c56ad5d6594;hp=74783eedac3c5e875ed47d9ff489bd1ed6834bd8;hpb=8c0fe026fe45d5cccfb0175f698d088d3eb9bc13;p=chaz%2Fopenbox diff --git a/src/client.cc b/src/client.cc index 74783eed..e626081c 100644 --- a/src/client.cc +++ b/src/client.cc @@ -882,8 +882,14 @@ void OBClient::unfocus() } -void OBClient::focusHandler(const XFocusChangeEvent &) +void OBClient::focusHandler(const XFocusChangeEvent &e) { +#ifdef DEBUG + printf("FocusIn for 0x%lx\n", e.window); +#endif // DEBUG + + OtkEventHandler::focusHandler(e); + frame->focus(); _focused = true; @@ -891,18 +897,30 @@ void OBClient::focusHandler(const XFocusChangeEvent &) } -void OBClient::unfocusHandler(const XFocusChangeEvent &) +void OBClient::unfocusHandler(const XFocusChangeEvent &e) { +#ifdef DEBUG + printf("FocusOut for 0x%lx\n", e.window); +#endif // DEBUG + + OtkEventHandler::unfocusHandler(e); + frame->unfocus(); _focused = false; - if (Openbox::instance->focusedClient() == this) - Openbox::instance->setFocusedClient(0); + if (Openbox::instance->focusedClient() == this) { + printf("UNFOCUSED!\n"); + Openbox::instance->setFocusedClient(this); + } } void OBClient::configureRequestHandler(const XConfigureRequestEvent &e) { +#ifdef DEBUG + printf("ConfigureRequest for 0x%lx\n", e.window); +#endif // DEBUG + OtkEventHandler::configureRequestHandler(e); // XXX: if we are iconic (or shaded? (fvwm does that)) ignore the event @@ -989,4 +1007,26 @@ void OBClient::destroyHandler(const XDestroyWindowEvent &e) } +void OBClient::reparentHandler(const XReparentEvent &e) +{ + // this is when the client is first taken captive in the frame + if (e.parent == frame->plate()) return; + +#ifdef DEBUG + printf("ReparentNotify for 0x%lx\n", e.window); +#endif // DEBUG + + OtkEventHandler::reparentHandler(e); + + /* + This event is quite rare and is usually handled in unmapHandler. + However, if the window is unmapped when the reparent event occurs, + the window manager never sees it because an unmap event is not sent + to an already unmapped window. + */ + + // this deletes us etc + Openbox::instance->screen(_screen)->unmanageWindow(this); +} + }