summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-07-20 20:25:56 +0000
committerDana Jansens <danakj@orodu.net>2002-07-20 20:25:56 +0000
commit675d16c71a888d9e0fa96636ee473e5bca4a454a (patch)
tree31eba3584986201b03b3a1cb20c516cc9459e55c /util
parent5b91573e0c01a7ee6e504451c2ef3143709d06a2 (diff)
implement window resizing. using resizing incrememnts if the window has requested them!
Diffstat (limited to 'util')
-rw-r--r--util/epist/actions.hh4
-rw-r--r--util/epist/window.cc50
-rw-r--r--util/epist/window.hh4
3 files changed, 46 insertions, 12 deletions
diff --git a/util/epist/actions.hh b/util/epist/actions.hh
index bfd16abe..30ea0e68 100644
--- a/util/epist/actions.hh
+++ b/util/epist/actions.hh
@@ -46,8 +46,8 @@ public:
moveWindowDown, //done
moveWindowLeft, //done
moveWindowRight, //done
- resizeWindowWidth,
- resizeWindowHeight,
+ resizeWindowWidth, //done
+ resizeWindowHeight, //done
toggleMaximizeFull, //done
toggleMaximizeVertical, //done
diff --git a/util/epist/window.cc b/util/epist/window.cc
index 7ee67426..628bceba 100644
--- a/util/epist/window.cc
+++ b/util/epist/window.cc
@@ -44,8 +44,8 @@ XWindow::XWindow(epist *epist, screen *screen, Window window)
XSelectInput(_epist->getXDisplay(), _window,
PropertyChangeMask | StructureNotifyMask);
+ updateHints();
updateDimentions();
- updateGravity();
updateState();
updateDesktop();
updateTitle();
@@ -77,15 +77,27 @@ void XWindow::updateDimentions() {
}
-void XWindow::updateGravity() {
+void XWindow::updateHints() {
XSizeHints size;
long ret;
- if (XGetWMNormalHints(_epist->getXDisplay(), _window, &size, &ret) &&
- (size.flags & PWinGravity))
- _gravity = size.win_gravity;
- else
- _gravity = NorthWestGravity;
+ // defaults
+ _gravity = NorthWestGravity;
+ _inc_x = _inc_y = 1;
+ _base_x = _base_y = 0;
+
+ if (XGetWMNormalHints(_epist->getXDisplay(), _window, &size, &ret)) {
+ if (size.flags & PWinGravity)
+ _gravity = size.win_gravity;
+ if (size.flags & PBaseSize) {
+ _base_x = size.base_width;
+ _base_y = size.base_height;
+ }
+ if (size.flags & PResizeInc) {
+ _inc_x = size.width_inc;
+ _inc_y = size.height_inc;
+ }
+ }
}
@@ -158,7 +170,7 @@ void XWindow::processEvent(const XEvent &e) {
break;
case PropertyNotify:
if (e.xproperty.atom == XA_WM_NORMAL_HINTS)
- updateGravity();
+ updateHints();
else if (e.xproperty.atom == _xatom->getAtom(XAtom::net_wm_state))
updateState();
else if (e.xproperty.atom == _xatom->getAtom(XAtom::net_wm_desktop))
@@ -307,7 +319,27 @@ void XWindow::move(int x, int y) const {
void XWindow::resize(unsigned int width, unsigned int height) const {
- XResizeWindow(_epist->getXDisplay(), _window, width, height);
+ // resize in increments if requested by the window
+
+ unsigned int wdest = width / _inc_x * _inc_x + _base_x;
+ unsigned int hdest = height / _inc_y * _inc_y + _base_y;
+
+ if (width > wdest) {
+ while (width > wdest)
+ wdest += _inc_x;
+ } else {
+ while (width < wdest)
+ wdest -= _inc_x;
+ }
+ if (height > hdest) {
+ while (height > hdest)
+ hdest += _inc_y;
+ } else {
+ while (height < hdest)
+ hdest -= _inc_y;
+ }
+
+ XResizeWindow(_epist->getXDisplay(), _window, wdest, hdest);
}
diff --git a/util/epist/window.hh b/util/epist/window.hh
index df925ad6..406efe09 100644
--- a/util/epist/window.hh
+++ b/util/epist/window.hh
@@ -57,6 +57,8 @@ private:
std::string _app_name;
std::string _app_class;
Rect _rect;
+ int _inc_x, _inc_y; // resize increments
+ int _base_x, _base_y; // base size
int _gravity;
// states
@@ -68,7 +70,7 @@ private:
bool _unmapped;
void updateDimentions();
- void updateGravity();
+ void updateHints();
void updateState();
void updateDesktop();
void updateTitle();