X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fclient.cc;h=f07de8df40d8d6d00c91bf2b5d3b380cb6f90806;hb=d833fb1ecc6a65a8bccbbe15e372904f4bf17f23;hp=23de426a3bf13f39f12440ba8b5dc8d1e94b120c;hpb=cc39863363f6c424a1d5f3790ef182b52b69a53e;p=chaz%2Fopenbox diff --git a/src/client.cc b/src/client.cc index 23de426a..f07de8df 100644 --- a/src/client.cc +++ b/src/client.cc @@ -89,11 +89,17 @@ void OBClient::getDesktop() const otk::OBProperty *property = Openbox::instance->property(); // defaults to the current desktop - _desktop = 0; // XXX: change this to the current desktop! - - property->get(_window, otk::OBProperty::net_wm_desktop, - otk::OBProperty::Atom_Cardinal, - &_desktop); + _desktop = Openbox::instance->screen(_screen)->desktop(); + + if (!property->get(_window, otk::OBProperty::net_wm_desktop, + otk::OBProperty::Atom_Cardinal, + (long unsigned*)&_desktop)) { + // make sure the hint exists + Openbox::instance->property()->set(_window, + otk::OBProperty::net_wm_desktop, + otk::OBProperty::Atom_Cardinal, + (unsigned)_desktop); + } } @@ -649,12 +655,23 @@ void OBClient::setWMState(long state) void OBClient::setDesktop(long target) { + if (target == _desktop) return; + printf("Setting desktop %ld\n", target); assert(target >= 0 || target == (signed)0xffffffff); //assert(target == 0xffffffff || target < MAX); - // XXX: move the window to the new desktop (and set root property) + if (!(target >= 0 || target == (signed)0xffffffff)) return; + _desktop = target; + + Openbox::instance->property()->set(_window, + otk::OBProperty::net_wm_desktop, + otk::OBProperty::Atom_Cardinal, + (unsigned)_desktop); + + + // XXX: move the window to the new desktop } @@ -877,15 +894,23 @@ void OBClient::clientMessageHandler(const XClientMessageEvent &e) setDesktop(e.data.l[0]); // use the original event } else if (e.message_type == property->atom(otk::OBProperty::net_wm_state)) { // can't compress these +#ifdef DEBUG + printf("net_wm_state for 0x%lx\n", _window); +#endif setState((StateAction)e.data.l[0], e.data.l[1], e.data.l[2]); } else if (e.message_type == property->atom(otk::OBProperty::net_close_window)) { +#ifdef DEBUG + printf("net_close_window for 0x%lx\n", _window); +#endif close(); } else if (e.message_type == property->atom(otk::OBProperty::net_active_window)) { +#ifdef DEBUG + printf("net_active_window for 0x%lx\n", _window); +#endif focus(); Openbox::instance->screen(_screen)->restack(true, this); // raise - } else { } } @@ -1130,10 +1155,8 @@ void OBClient::unfocusHandler(const XFocusChangeEvent &e) frame->unfocus(); _focused = false; - if (Openbox::instance->focusedClient() == this) { - printf("UNFOCUSED!\n"); - Openbox::instance->setFocusedClient(this); - } + if (Openbox::instance->focusedClient() == this) + Openbox::instance->setFocusedClient(0); } @@ -1236,10 +1259,7 @@ 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()) { - printf("Ignored ReparentNotify for 0x%lx\n", e.window); - return; - } + if (e.parent == frame->plate()) return; #ifdef DEBUG printf("ReparentNotify for 0x%lx\n", e.window);