]> Dogcows Code - chaz/openbox/commitdiff
implement window resizing. using resizing incrememnts if the window has requested...
authorDana Jansens <danakj@orodu.net>
Sat, 20 Jul 2002 20:25:56 +0000 (20:25 +0000)
committerDana Jansens <danakj@orodu.net>
Sat, 20 Jul 2002 20:25:56 +0000 (20:25 +0000)
util/epist/actions.hh
util/epist/window.cc
util/epist/window.hh

index bfd16abe2bb7652cb3dde967c40ecb6bdd05647f..30ea0e68074a9338c05e144d2f1f74974700b2b1 100644 (file)
@@ -46,8 +46,8 @@ public:
     moveWindowDown, //done
     moveWindowLeft, //done
     moveWindowRight, //done
-    resizeWindowWidth,
-    resizeWindowHeight,
+    resizeWindowWidth, //done
+    resizeWindowHeight, //done
 
     toggleMaximizeFull, //done
     toggleMaximizeVertical, //done
index 7ee674268551c8e3d8598bc66a2f717472967d1c..628bcebac79758b5abaaefe086f1cf92ca22e3eb 100644 (file)
@@ -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);
 }
 
 
index df925ad69081d238e3157e41f454a1314f2c70b8..406efe09487c343c01c2bc35649b5a3a8772c4ea 100644 (file)
@@ -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();
This page took 0.030148 seconds and 4 git commands to generate.