all repos — openbox @ 4aeca296e895bfe74d59d4732e740c2d49c10080

openbox fork - make it a bit more like ryudo

implement toggleMaximize(Vert|Horz|Full)
Dana Jansens danakj@orodu.net
commit

4aeca296e895bfe74d59d4732e740c2d49c10080

parent

f7a41999bfa20750f192d7fa5447bb133451db76

M util/epist/actions.hhutil/epist/actions.hh

@@ -47,9 +47,9 @@ moveWindowDown, //done

moveWindowLeft, //done moveWindowRight, //done - toggleMaximizeFull, - toggleMaximizeVertical, - toggleMaximizeHorizontal, + toggleMaximizeFull, //done + toggleMaximizeVertical, //done + toggleMaximizeHorizontal, //done sendToWorkspace, //done
M util/epist/epist.ccutil/epist/epist.cc

@@ -142,6 +142,18 @@ _actions.push_back(Action(Action::toggleomnipresent,

XKeysymToKeycode(getXDisplay(), XStringToKeysym("O")), Mod1Mask | ControlMask)); + _actions.push_back(Action(Action::toggleMaximizeHorizontal, + XKeysymToKeycode(getXDisplay(), + XStringToKeysym("X")), + ShiftMask | Mod1Mask)); + _actions.push_back(Action(Action::toggleMaximizeVertical, + XKeysymToKeycode(getXDisplay(), + XStringToKeysym("X")), + ShiftMask | ControlMask)); + _actions.push_back(Action(Action::toggleMaximizeFull, + XKeysymToKeycode(getXDisplay(), + XStringToKeysym("X")), + Mod1Mask | ControlMask)); _actions.push_back(Action(Action::changeWorkspace, XKeysymToKeycode(getXDisplay(), XStringToKeysym("1")),
M util/epist/screen.ccutil/epist/screen.cc

@@ -265,6 +265,18 @@ case Action::toggleshade:

window->shade(! window->shaded()); return; + case Action::toggleMaximizeHorizontal: + window->toggleMaximize(XWindow::Max_Horz); + return; + + case Action::toggleMaximizeVertical: + window->toggleMaximize(XWindow::Max_Vert); + return; + + case Action::toggleMaximizeFull: + window->toggleMaximize(XWindow::Max_Full); + return; + default: assert(false); // unhandled action type! break;
M util/epist/window.ccutil/epist/window.cc

@@ -289,3 +289,69 @@ int fx, fy;

findFramePosition(fx, fy); XMoveWindow(_epist->getXDisplay(), _window, fx + x, fy + y); } + + +void XWindow::toggleMaximize(Max max) const { + switch (max) { + case Max_Full: + _xatom-> + sendClientMessage(_screen->rootWindow(), XAtom::net_wm_state, + _window, (_max_vert == _max_horz ? 2 : 1), + _xatom->getAtom(XAtom::net_wm_state_maximized_horz), + _xatom->getAtom(XAtom::net_wm_state_maximized_vert)); + break; + + case Max_Horz: + _xatom-> + sendClientMessage(_screen->rootWindow(), XAtom::net_wm_state, + _window, 2, + _xatom->getAtom(XAtom::net_wm_state_maximized_horz)); + break; + + case Max_Vert: + _xatom-> + sendClientMessage(_screen->rootWindow(), XAtom::net_wm_state, + _window, 2, + _xatom->getAtom(XAtom::net_wm_state_maximized_vert)); + break; + + case Max_None: + assert(false); // you should not do this. it is pointless and probly a bug + break; + } +} + + +void XWindow::maximize(Max max) const { + switch (max) { + case Max_None: + _xatom-> + sendClientMessage(_screen->rootWindow(), XAtom::net_wm_state, + _window, 0, + _xatom->getAtom(XAtom::net_wm_state_maximized_horz), + _xatom->getAtom(XAtom::net_wm_state_maximized_vert)); + break; + + case Max_Full: + _xatom-> + sendClientMessage(_screen->rootWindow(), XAtom::net_wm_state, + _window, 1, + _xatom->getAtom(XAtom::net_wm_state_maximized_horz), + _xatom->getAtom(XAtom::net_wm_state_maximized_vert)); + break; + + case Max_Horz: + _xatom-> + sendClientMessage(_screen->rootWindow(), XAtom::net_wm_state, + _window, 1, + _xatom->getAtom(XAtom::net_wm_state_maximized_horz)); + break; + + case Max_Vert: + _xatom-> + sendClientMessage(_screen->rootWindow(), XAtom::net_wm_state, + _window, 1, + _xatom->getAtom(XAtom::net_wm_state_maximized_vert)); + break; + } +}
M util/epist/window.hhutil/epist/window.hh

@@ -38,6 +38,14 @@

typedef std::list<XWindow *> WindowList; class XWindow { +public: + enum Max { + Max_None, + Max_Horz, + Max_Vert, + Max_Full + }; + private: epist *_epist; screen *_screen;

@@ -90,6 +98,8 @@ void iconify() const;

void focus() const; void sendTo(unsigned int dest) const; void move(int x, int y) const; + void toggleMaximize(Max max) const; // i hate toggle functions + void maximize(Max max) const; bool operator == (const XWindow &w) const { return w._window == _window; } bool operator == (const Window &w) const { return w == _window; }