]> Dogcows Code - chaz/openbox/commitdiff
add a getGravity function to get the gravity from the window attributes initially
authorDana Jansens <danakj@orodu.net>
Fri, 17 Jan 2003 02:43:31 +0000 (02:43 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 17 Jan 2003 02:43:31 +0000 (02:43 +0000)
src/client.cc
src/client.hh

index df136bf29a586cf5a3b611f051ac335e58980bc9..4e44d4bc9358794ec0cb3b6206b8acebd8023a59 100644 (file)
@@ -47,6 +47,7 @@ Client::Client(int screen, Window window)
   // pick a layer to start from
   _layer = Layer_Normal;
   
+  getGravity();
   getArea();
   getDesktop();
 
@@ -60,7 +61,6 @@ Client::Client(int screen, Window window)
   getShaped();
 
   updateProtocols();
-  updateNormalHints();
   updateWMHints();
   updateTitle();
   updateIconTitle();
@@ -91,6 +91,17 @@ Client::~Client()
 }
 
 
+void Client::getGravity()
+{
+  XWindowAttributes wattrib;
+  Status ret;
+  
+  ret = XGetWindowAttributes(**otk::display, _window, &wattrib);
+  assert(ret != BadWindow);
+
+  _gravity = wattrib.win_gravity;
+}
+
 void Client::getDesktop()
 {
   // defaults to the current desktop
@@ -378,7 +389,6 @@ void Client::updateNormalHints()
   int oldgravity = _gravity;
 
   // defaults
-  _gravity = NorthWestGravity;
   _size_inc.setPoint(1, 1);
   _base_size.setPoint(0, 0);
   _min_size.setPoint(0, 0);
@@ -391,8 +401,18 @@ void Client::updateNormalHints()
   if (XGetWMNormalHints(**otk::display, _window, &size, &ret)) {
     _positioned = (size.flags & (PPosition|USPosition));
 
-    if (size.flags & PWinGravity)
+    if (size.flags & PWinGravity) {
       _gravity = size.win_gravity;
+      
+      // if the client has a frame, i.e. has already been mapped and is
+      // changing its gravity
+      if (frame && _gravity != oldgravity) {
+        // move our idea of the client's position based on its new gravity
+        int x, y;
+        frame->frameGravity(x, y);
+        _area.setPos(x, y);
+      }
+    }
 
     if (size.flags & PMinSize)
       _min_size.setPoint(size.min_width, size.min_height);
@@ -406,15 +426,6 @@ void Client::updateNormalHints()
     if (size.flags & PResizeInc)
       _size_inc.setPoint(size.width_inc, size.height_inc);
   }
-
-  // if the client has a frame, i.e. has already been mapped and is
-  // changing its gravity
-  if (frame && _gravity != oldgravity) {
-    // move our idea of the client's position based on its new gravity
-    int x, y;
-    frame->frameGravity(x, y);
-    _area.setPos(x, y);
-  }
 }
 
 
index 9bac56f58abf73cf3720dd824782475ddde41ed1..37a38ac1084231c04ed397e61e228bae3d2161ce 100644 (file)
@@ -311,6 +311,8 @@ private:
   */
   FunctionFlags _functions;
 
+  //! Retrieves the window's initial gravity
+  void getGravity();
   //! Retrieves the desktop hint's value and sets Client::_desktop
   void getDesktop();
   //! Retrieves the window's type and sets Client::_type
This page took 0.027017 seconds and 4 git commands to generate.