let the client be moved to a position specified for the *frame*
authorDana Jansens <danakj@orodu.net>
Mon, 3 Feb 2003 04:14:54 +0000 (04:14 +0000)
committerDana Jansens <danakj@orodu.net>
Mon, 3 Feb 2003 04:14:54 +0000 (04:14 +0000)
src/client.cc
src/client.hh
src/frame.cc

index f60a8da..1b3ad1a 100644 (file)
@@ -495,7 +495,7 @@ void Client::updateNormalHints()
       // changing its gravity
       if (frame && _gravity != oldgravity) {
         // move our idea of the client's position based on its new gravity
-        int x, y;
+        int x = frame->rect().x(), y = frame->rect().y();
         frame->frameGravity(x, y);
         _area.setPos(x, y);
       }
@@ -1146,9 +1146,11 @@ void Client::internal_resize(Corner anchor, int w, int h, bool user,
 }
 
 
-void Client::move(int x, int y)
+void Client::move(int x, int y, bool framepos)
 {
   if (!(_functions & Func_Move)) return;
+  if (framepos)
+    frame->frameGravity(x, y);
   internal_move(x, y);
 }
 
@@ -1386,6 +1388,8 @@ void Client::maximize(bool max, int dir, bool savearea)
     _gravity = StaticGravity;
     // adjust our idea of position based on StaticGravity, so we stay put
     // unless asked
+    x = frame->rect().x();
+    y = frame->rect().y();
     frame->frameGravity(x, y);
 
     if (savearea) {
@@ -1471,7 +1475,7 @@ void Client::maximize(bool max, int dir, bool savearea)
   if (max) {
     // because of my little gravity trick in here, we have to set the position
     // of the client to what it really is
-    int x, y;
+    int x = frame->rect().x(), y = frame->rect().y();
     frame->frameGravity(x, y);
     _area.setPos(x, y);
   }
index 02c12d4..6b44706 100644 (file)
@@ -621,8 +621,10 @@ BB    @param window The window id that the Client class should handle
   /*!
     @param x The X coordinate to move to.
     @param y The Y coordinate to move to.
+    @param bool framepos True if the frame should be moved to the position
+                instead of the client. This makes it ignore the gravity.
   */
-  void move(int x, int y);
+  void move(int x, int y, bool framepos = false);
   
   //! Resizes the client window, anchoring it in a given corner
   /*!
index 06b263d..ab21daf 100644 (file)
@@ -344,6 +344,8 @@ void Frame::adjustSize()
 void Frame::adjustPosition()
 {
   int x, y;
+  x = _client->area().x();
+  y = _client->area().y();
   clientGravity(x, y);
   move(x, y);
 }
@@ -450,9 +452,6 @@ void Frame::releaseClient()
 
 void Frame::clientGravity(int &x, int &y)
 {
-  x = _client->area().x();
-  y = _client->area().y();
-
   // horizontal
   switch (_client->gravity()) {
   default:
@@ -509,9 +508,6 @@ void Frame::clientGravity(int &x, int &y)
 
 void Frame::frameGravity(int &x, int &y)
 {
-  x = rect().x();
-  y = rect().y();
-  
   // horizontal
   switch (_client->gravity()) {
   default: