implement toggleMaximize(Vert|Horz|Full)
Dana Jansens danakj@orodu.net
5 files changed,
103 insertions(+),
3 deletions(-)
M
util/epist/actions.hh
→
util/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.cc
→
util/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.cc
→
util/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.cc
→
util/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.hh
→
util/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; }