all repos — openbox @ cc5bde6d00892cf27fcb6e4e0b4974bcecca265f

openbox fork - make it a bit more like ryudo

toggledecor almost done
some code cleanups/fixes
Dana Jansens danakj@orodu.net
commit

cc5bde6d00892cf27fcb6e4e0b4974bcecca265f

parent

d181f1ad05332c42eb090384666171a142f54b0c

M src/XAtom.ccsrc/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.hhsrc/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.hhutil/epist/actions.hh

@@ -87,6 +87,7 @@

// these are openbox extensions showRootMenu, showWorkspaceMenu, + toggleDecorations, stringChain, keyChain,
M util/epist/config.ccutil/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.hhutil/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.ccutil/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.ccutil/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.ccutil/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.hhutil/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;