diff options
Diffstat (limited to 'src/client.cc')
| -rw-r--r-- | src/client.cc | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/client.cc b/src/client.cc index 9b26b3bf..5ecbb9ae 100644 --- a/src/client.cc +++ b/src/client.cc @@ -34,6 +34,7 @@ OBClient::OBClient(Window window) getState(); getShaped(); + updateProtocols(); updateNormalHints(); updateWMHints(); // XXX: updateTransientFor(); @@ -176,6 +177,7 @@ void OBClient::getArea() assert(XGetWindowAttributes(otk::OBDisplay::display, _window, &wattrib)); _area.setRect(wattrib.x, wattrib.y, wattrib.width, wattrib.height); + _border_width = wattrib.border_width; } @@ -227,6 +229,29 @@ void OBClient::getShaped() } +void OBClient::updateProtocols() { + const otk::OBProperty *property = Openbox::instance->property(); + + Atom *proto; + int num_return = 0; + + _focus_notify = false; + + if (XGetWMProtocols(otk::OBDisplay::display, _window, &proto, &num_return)) { + for (int i = 0; i < num_return; ++i) { + if (proto[i] == property->atom(otk::OBProperty::wm_delete_window)) { + // XXX: do shit with this! let the window close, and show a close + // button + } else if (proto[i] == property->atom(otk::OBProperty::wm_take_focus)) + // if this protocol is requested, then the window will be notified + // by the window manager whenever it receives focus + _focus_notify = true; + } + XFree(proto); + } +} + + void OBClient::updateNormalHints() { XSizeHints size; @@ -351,7 +376,10 @@ void OBClient::update(const XPropertyEvent &e) updateTitle(); else if (e.atom == property->atom(otk::OBProperty::wm_class)) updateClass(); + else if (e.atom == property->atom(otk::OBProperty::wm_protocols)) + updateProtocols(); // XXX: transient for hint + // XXX: strut hint } |
