]> Dogcows Code - chaz/openbox/commitdiff
apply gravity when positioning the frame
authorDana Jansens <danakj@orodu.net>
Tue, 3 Dec 2002 21:18:53 +0000 (21:18 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 3 Dec 2002 21:18:53 +0000 (21:18 +0000)
src/frame.cc
src/frame.hh

index c8d47882373c97da6fbb6f98ef651cfa2a19f5d2..a945413d35a62b4e25a34ef1879df84a58f40933 100644 (file)
@@ -130,7 +130,7 @@ void OBFrame::adjust()
   _decorations = _client->decorations();
   _decorations = 0xffffffff;
   
-  int width;   // the width of the whole frame
+  int width;   // the width of the client and its border
   int bwidth;  // width to make borders
   int cbwidth; // width of the inner client border
   
@@ -139,6 +139,8 @@ void OBFrame::adjust()
     cbwidth = _style->getFrameWidth();
   } else
     bwidth = cbwidth = 0;
+  // inside this function _size is the size EXCLUDING the outer border
+  // at the end of this function it becomes the size INCLUDING the outer border
   _size.left = _size.top = _size.bottom = _size.right = cbwidth;
   width = _client->area().width() + cbwidth * 2;
 
@@ -286,6 +288,13 @@ void OBFrame::adjust()
   else
     _handle.hide(true);
   
+  // inside this function _size is the size EXCLUDING the outer border
+  // at the end of this function it becomes the size INCLUDING the outer border
+  _size.left += bwidth;
+  _size.right += bwidth;
+  _size.top += bwidth;
+  _size.bottom += bwidth;
+
   // XXX: more is gunna have to happen here
 
   adjustShape();
@@ -353,8 +362,9 @@ void OBFrame::grabClient()
   //XRaiseWindow(otk::OBDisplay::display, _client->window());
   // map the client so it maps when the frame does
   XMapWindow(otk::OBDisplay::display, _client->window());
-  
+
   adjust();
+  applyGravity();
 }
 
 
@@ -380,47 +390,64 @@ void OBFrame::releaseClient(bool remap)
 }
 
 
-Window OBFrame::createChild(Window parent, Cursor cursor)
+void OBFrame::applyGravity()
 {
-  XSetWindowAttributes attrib_create;
-  unsigned long create_mask = CWBackPixmap | CWBorderPixel | CWEventMask;
-
-  attrib_create.background_pixmap = None;
-  attrib_create.event_mask = ButtonPressMask | ButtonReleaseMask |
-                             ButtonMotionMask | ExposureMask;
-
-  if (cursor) {
-    create_mask |= CWCursor;
-    attrib_create.cursor = cursor;
+  int x, y;
+  // apply horizontal window gravity
+  switch (_client->gravity()) {
+  default:
+  case NorthWestGravity:
+  case SouthWestGravity:
+  case WestGravity:
+    x = _client->area().x();
+    break;
+
+  case NorthGravity:
+  case SouthGravity:
+  case CenterGravity:
+    x = _client->area().x() - (_size.left + _size.right) / 2;
+    break;
+
+  case NorthEastGravity:
+  case SouthEastGravity:
+  case EastGravity:
+    x = _client->area().x() - _size.left - _size.right + 2;
+    break;
+
+  case ForgetGravity:
+  case StaticGravity:
+    x = _client->area().x() - _size.left;
+    break;
   }
 
-  Window w = XCreateWindow(otk::OBDisplay::display, parent, 0, 0, 1, 1, 0,
-                           _screen->getDepth(), InputOutput,
-                           _screen->getVisual(), create_mask, &attrib_create);
-  return w;
+  // apply vertical window gravity
+  switch (_client->gravity()) {
+  default:
+  case NorthWestGravity:
+  case NorthEastGravity:
+  case NorthGravity:
+    y = _client->area().y();
+    break;
+
+  case CenterGravity:
+  case EastGravity:
+  case WestGravity:
+    y = _client->area().y() - (_size.top + _size.bottom) / 2;
+    break;
+
+  case SouthWestGravity:
+  case SouthEastGravity:
+  case SouthGravity:
+    y = _client->area().y() - _size.top - _size.bottom + 2;
+    break;
+
+  case ForgetGravity:
+  case StaticGravity:
+    y = _client->area().y() - _size.top;
+    break;
+  }
+  move(x, y);
 }
 
 
-Window OBFrame::createFrame()
-{
-  XSetWindowAttributes attrib_create;
-  unsigned long create_mask = CWBackPixmap | CWBorderPixel | CWColormap |
-                              CWOverrideRedirect | CWEventMask;
-
-  attrib_create.background_pixmap = None;
-  attrib_create.colormap = _screen->getColormap();
-  attrib_create.override_redirect = True;
-  attrib_create.event_mask = EnterWindowMask | LeaveWindowMask | ButtonPress;
-  /*
-    We catch button presses because other wise they get passed down to the
-    root window, which will then cause root menus to show when you click the
-    window's frame.
-  */
-
-  return XCreateWindow(otk::OBDisplay::display, _screen->getRootWindow(),
-                       0, 0, 1, 1, 0,
-                       _screen->getDepth(), InputOutput, _screen->getVisual(),
-                       create_mask, &attrib_create);
-}
-
 }
index 74b1ba6488b09244218696e32747594d0fed3d2d..ff6a21ad0becd3ab9db8d8f74fbdc440b6adf4c4 100644 (file)
@@ -56,11 +56,6 @@ private:
   */
   OBClient::DecorationFlags _decorations;
 
-  //! Creates the base frame window
-  Window createFrame();
-  //! Creates a child frame decoration element window
-  Window createChild(Window parent, Cursor cursor);
-
   //! Reparents the client window from the root window onto the frame
   void grabClient();
   //! Reparents the client window back to the root window
@@ -85,7 +80,11 @@ public:
   //! Update the frame to match the client
   void adjust();
   //! Shape the frame window to the client window
-  void adjustShape(); 
+  void adjustShape();
+
+  //! Applies gravity for the client's gravity, moving the frame to the
+  //! appropriate place
+  void applyGravity();
 };
 
 }
This page took 0.025468 seconds and 4 git commands to generate.