X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fclient.cc;h=e8a6b84bd14028f96b0e7e08147a09c454a7b9e3;hb=08a28187c441ec6bd0420c16f8091e28db4bac64;hp=1c411adb7893b58bb50a4a3eb688e478d8c160c3;hpb=6a73cff16d94526cb5b187ab57ee8a3429906bcc;p=chaz%2Fopenbox diff --git a/src/client.cc b/src/client.cc index 1c411adb..e8a6b84b 100644 --- a/src/client.cc +++ b/src/client.cc @@ -234,7 +234,7 @@ void Client::setupDecorAndFunctions() } } - // XXX: changeAllowedActions(); + changeAllowedActions(); } @@ -901,7 +901,14 @@ void Client::shapeHandler(const XShapeEvent &e) #endif -void Client::resize(Corner anchor, int w, int h, int x, int y) +void Client::resize(Corner anchor, int w, int h) +{ + if (!(_functions & Func_Resize)) return; + internal_resize(anchor, w, h); +} + + +void Client::internal_resize(Corner anchor, int w, int h, int x, int y) { w -= _base_size.x(); h -= _base_size.y(); @@ -963,11 +970,18 @@ void Client::resize(Corner anchor, int w, int h, int x, int y) // resize the frame to match the request frame->adjustSize(); - move(x, y); + internal_move(x, y); } void Client::move(int x, int y) +{ + if (!(_functions & Func_Move)) return; + internal_move(x, y); +} + + +void Client::internal_move(int x, int y) { _area.setPos(x, y); @@ -1058,6 +1072,30 @@ void Client::changeState() } +void Client::changeAllowedActions(void) +{ + Atom actions[7]; + int num = 0; + + actions[num++] = otk::Property::atoms.net_wm_action_shade; + actions[num++] = otk::Property::atoms.net_wm_action_change_desktop; + + if (_functions & Func_Close) + actions[num++] = otk::Property::atoms.net_wm_action_close; + if (_functions & Func_Move) + actions[num++] = otk::Property::atoms.net_wm_action_move; + if (_functions & Func_Resize) + actions[num++] = otk::Property::atoms.net_wm_action_resize; + if (_functions & Func_Maximize) { + actions[num++] = otk::Property::atoms.net_wm_action_maximize_horz; + actions[num++] = otk::Property::atoms.net_wm_action_maximize_vert; + } + + otk::Property::set(_window, otk::Property::atoms.net_wm_allowed_actions, + otk::Property::atoms.atom, actions, num); +} + + void Client::shade(bool shade) { if (shade == _shaded) return; // already done @@ -1179,13 +1217,13 @@ void Client::configureRequestHandler(const XConfigureRequestEvent &e) if (e.value_mask & (CWX | CWY)) { int x = (e.value_mask & CWX) ? e.x : _area.x(); int y = (e.value_mask & CWY) ? e.y : _area.y(); - resize(corner, w, h, x, y); + internal_resize(corner, w, h, x, y); } else // if JUST resizing... - resize(corner, w, h); + internal_resize(corner, w, h); } else if (e.value_mask & (CWX | CWY)) { // if JUST moving... int x = (e.value_mask & CWX) ? e.x : _area.x(); int y = (e.value_mask & CWY) ? e.y : _area.y(); - move(x, y); + internal_move(x, y); } if (e.value_mask & CWStackMode) {