toggledecor almost done some code cleanups/fixes
Dana Jansens danakj@orodu.net
9 files changed,
49 insertions(+),
4 deletions(-)
M
src/XAtom.cc
→
src/XAtom.cc
@@ -497,7 +497,7 @@
void XAtom::sendClientMessage(Window target, Atoms type, Window about, long data, long data1, long data2, - long data3) const { + long data3, long data4) const { assert(atom >= 0 && atom < NUM_ATOMS); assert(target != None);@@ -510,6 +510,7 @@ e.xclient.data.l[0] = data;
e.xclient.data.l[1] = data1; e.xclient.data.l[2] = data2; e.xclient.data.l[3] = data3; + e.xclient.data.l[4] = data4; XSendEvent(_display, target, False, SubstructureRedirectMask | SubstructureNotifyMask,
M
src/XAtom.hh
→
src/XAtom.hh
@@ -216,7 +216,7 @@
// sends a client message a window void sendClientMessage(Window target, Atoms type, Window about, long data = 0, long data1 = 0, long data2 = 0, - long data3 = 0) const; + long data3 = 0, long data4 = 0) const; // temporary function!! remove when not used in blackbox.hh anymore!! inline Atom getAtom(Atoms a)
M
util/epist/actions.hh
→
util/epist/actions.hh
@@ -87,6 +87,7 @@
// these are openbox extensions showRootMenu, showWorkspaceMenu, + toggleDecorations, stringChain, keyChain,
M
util/epist/config.cc
→
util/epist/config.cc
@@ -22,6 +22,8 @@ // DEALINGS IN THE SOFTWARE.
#include "config.hh" +using std::string; + Config::Config() {} Config::~Config()
M
util/epist/keytree.hh
→
util/epist/keytree.hh
@@ -40,7 +40,7 @@
class keytree : public TimeoutHandler { public: keytree(Display *, epist *); - ~keytree(); + virtual ~keytree(); void grabDefaults(screen *); void ungrabDefaults(screen *);@@ -72,8 +72,8 @@
keynode *_head; keynode *_current; Display *_display; - BTimer *_timer; screen *_timeout_screen; + BTimer *_timer; epist *_epist; };
M
util/epist/parser.cc
→
util/epist/parser.cc
@@ -101,6 +101,7 @@ { "nextscreen", Action::nextScreen },
{ "prevscreen", Action::prevScreen }, { "showrootmenu", Action::showRootMenu }, { "showworkspacemenu", Action::showWorkspaceMenu }, + { "toggledecorations", Action::toggleDecorations }, { "stringchain", Action::stringChain }, { "keychain", Action::keyChain }, { "numberchain", Action::numberChain },
M
util/epist/screen.cc
→
util/epist/screen.cc
@@ -321,6 +321,10 @@
case Action::toggleMaximizeFull: window->toggleMaximize(XWindow::Max_Full); return; + + case Action::toggleDecorations: + window->decorate(! window->decorated()); + return; default: assert(false); // unhandled action type!
M
util/epist/window.cc
→
util/epist/window.cc
@@ -44,6 +44,7 @@
XSelectInput(_epist->getXDisplay(), _window, PropertyChangeMask | StructureNotifyMask); + updateBlackboxAttributes(); updateNormalHints(); updateWMHints(); updateDimentions();@@ -75,6 +76,23 @@ &x, &y, &child))
_rect.setRect(x, y, w, h); else _rect.setRect(0, 0, 1, 1); +} + + +void XWindow::updateBlackboxAttributes() { + unsigned long *data; + unsigned long num = PropBlackboxAttributesElements; + + _decorated = true; + + if (_xatom->getValue(_window, + XAtom::blackbox_attributes, XAtom::blackbox_attributes, + num, &data)) { + if (num == PropBlackboxAttributesElements) + if (data[0] & AttribDecoration) + _decorated = (data[4] != DecorNone); + delete data; + } }@@ -436,3 +454,11 @@ _xatom->getAtom(XAtom::net_wm_state_maximized_vert));
break; } } + + +void XWindow::decorate(bool d) const { + _xatom->sendClientMessage(_screen->rootWindow(), + XAtom::blackbox_change_attributes, + _window, AttribDecoration, + 0, 0, 0, (d ? DecorNormal : DecorNone)); +}
M
util/epist/window.hh
→
util/epist/window.hh
@@ -46,6 +46,12 @@ Max_Full
}; private: + // defined by black/openbox + static const unsigned int PropBlackboxAttributesElements = 9; + static const unsigned int AttribDecoration = 1 << 6; + static const unsigned int DecorNone = 0; + static const unsigned int DecorNormal = 2; + epist *_epist; screen *_screen; XAtom *_xatom;@@ -67,10 +73,12 @@ bool _shaded;
bool _iconic; bool _max_vert; bool _max_horz; + bool _decorated; bool _unmapped; void updateDimentions(); + void updateBlackboxAttributes(); void updateNormalHints(); void updateWMHints(); void updateState();@@ -95,6 +103,7 @@ inline bool shaded() const { return _shaded; }
inline bool iconic() const { return _iconic; } inline bool maxVert() const { return _max_vert; } inline bool maxHorz() const { return _max_horz; } + inline bool decorated() const { return _decorated; } inline const Rect &area() const { return _rect; } inline unsigned int x() const { return _rect.x(); } inline unsigned int y() const { return _rect.y(); }@@ -109,6 +118,7 @@ void raise() const;
void lower() const; void iconify() const; void focus() const; + void decorate(bool d) const; void sendTo(unsigned int dest) const; void move(int x, int y) const; void resizeRel(int dwidth, int dheight) const;