]> Dogcows Code - chaz/openbox/blobdiff - src/workspace.cc
put an S on the stick button
[chaz/openbox] / src / workspace.cc
index 995c50059033ef65889b07f1791e6763223c5c05..467d868400feda0670af4ed9f1c3897c3147e286 100644 (file)
@@ -1,25 +1,4 @@
 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
-// Workspace.cc for Blackbox - an X11 Window manager
-// Copyright (c) 2001 - 2002 Sean 'Shaleh' Perry <shaleh@debian.org>
-// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the "Software"),
-// to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
-// and/or sell copies of the Software, and to permit persons to whom the
-// Software is furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
 
 #ifdef    HAVE_CONFIG_H
 #  include "../config.h"
@@ -46,13 +25,14 @@ extern "C" {
 using std::string;
 
 #include "blackbox.hh"
-#include "font.hh"
-#include "screen.hh"
-#include "util.hh"
-#include "window.hh"
+#include "otk/font.hh"
+#include "otk/display.hh"
+#include "bbscreen.hh"
+#include "otk/util.hh"
+#include "bbwindow.hh"
 #include "workspace.hh"
-#include "xatom.hh"
 
+namespace ob {
 
 Workspace::Workspace(BScreen *scrn, unsigned int i) {
   screen = scrn;
@@ -120,7 +100,7 @@ void Workspace::removeWindow(BlackboxWindow *w, bool sticky) {
 
   // pass focus to the next appropriate window
   if ((w->isFocused() || w == lastfocus) &&
-      ! screen->getBlackbox()->doShutdown()) {
+      screen->getBlackbox()->state() != Openbox::State_Exiting) {
     focusFallback(w);
   }
     
@@ -209,7 +189,8 @@ void Workspace::showAll(void) {
     // sticky windows arent unmapped on a workspace change so we don't have ot
     // map them, but sometimes on a restart, another app can unmap our sticky
     // windows, so we map on startup always
-    if (! bw->isStuck() || screen->getBlackbox()->isStartup())
+    if (! bw->isStuck() ||
+        screen->getBlackbox()->state() == Openbox::State_Starting)
       bw->show();
   }
 }
@@ -431,7 +412,7 @@ bool Workspace::isCurrent(void) const {
 }
 
 
-bool Workspace::isLastWindow(const BlackboxWindow* const w) const {
+bool Workspace::isLastWindow(const BlackboxWindow *w) const {
   return (w == windowList.back());
 }
 
@@ -442,12 +423,12 @@ void Workspace::setCurrent(void) {
 
 
 void Workspace::readName(void) {
-  XAtom::StringVect namesList;
+  otk::OBProperty::StringVect namesList;
   unsigned long numnames = id + 1;
     
   // attempt to get from the _NET_WM_DESKTOP_NAMES property
-  if (xatom->getValue(screen->getRootWindow(), XAtom::net_desktop_names,
-                      XAtom::utf8, numnames, namesList) &&
+  if (xatom->get(screen->getRootWindow(), otk::OBProperty::net_desktop_names,
+                 otk::OBProperty::utf8, &numnames, &namesList) &&
       namesList.size() > id) {
     name = namesList[id];
   
@@ -469,30 +450,31 @@ void Workspace::readName(void) {
 
 void Workspace::setName(const string& new_name) {
   // set the _NET_WM_DESKTOP_NAMES property with the new name
-  XAtom::StringVect namesList;
+  otk::OBProperty::StringVect namesList;
   unsigned long numnames = (unsigned) -1;
-  if (xatom->getValue(screen->getRootWindow(), XAtom::net_desktop_names,
-                      XAtom::utf8, numnames, namesList) &&
+  if (xatom->get(screen->getRootWindow(),
+                 otk::OBProperty::net_desktop_names,
+                 otk::OBProperty::utf8, &numnames, &namesList) &&
       namesList.size() > id)
     namesList[id] = new_name;
   else
     namesList.push_back(new_name);
 
-  xatom->setValue(screen->getRootWindow(), XAtom::net_desktop_names,
-                  XAtom::utf8, namesList);
+  xatom->set(screen->getRootWindow(), otk::OBProperty::net_desktop_names,
+             otk::OBProperty::utf8, namesList);
 }
 
 
 /*
  * Calculate free space available for window placement.
  */
-Workspace::rectList Workspace::calcSpace(const Rect &win,
+Workspace::rectList Workspace::calcSpace(const otk::Rect &win,
                                          const rectList &spaces) const {
-  Rect isect, extra;
+  otk::Rect isect, extra;
   rectList result;
   rectList::const_iterator siter, end = spaces.end();
   for (siter = spaces.begin(); siter != end; ++siter) {
-    const Rect &curr = *siter;
+    const otk::Rect &curr = *siter;
 
     if(! win.intersects(curr)) {
       result.push_back(curr);
@@ -530,56 +512,56 @@ Workspace::rectList Workspace::calcSpace(const Rect &win,
 }
 
 
-static bool rowRLBT(const Rect &first, const Rect &second) {
+static bool rowRLBT(const otk::Rect &first, const otk::Rect &second) {
   if (first.bottom() == second.bottom())
     return first.right() > second.right();
   return first.bottom() > second.bottom();
 }
 
-static bool rowRLTB(const Rect &first, const Rect &second) {
+static bool rowRLTB(const otk::Rect &first, const otk::Rect &second) {
   if (first.y() == second.y())
     return first.right() > second.right();
   return first.y() < second.y();
 }
 
-static bool rowLRBT(const Rect &first, const Rect &second) {
+static bool rowLRBT(const otk::Rect &first, const otk::Rect &second) {
   if (first.bottom() == second.bottom())
     return first.x() < second.x();
   return first.bottom() > second.bottom();
 }
 
-static bool rowLRTB(const Rect &first, const Rect &second) {
+static bool rowLRTB(const otk::Rect &first, const otk::Rect &second) {
   if (first.y() == second.y())
     return first.x() < second.x();
   return first.y() < second.y();
 }
 
-static bool colLRTB(const Rect &first, const Rect &second) {
+static bool colLRTB(const otk::Rect &first, const otk::Rect &second) {
   if (first.x() == second.x())
     return first.y() < second.y();
   return first.x() < second.x();
 }
 
-static bool colLRBT(const Rect &first, const Rect &second) {
+static bool colLRBT(const otk::Rect &first, const otk::Rect &second) {
   if (first.x() == second.x())
     return first.bottom() > second.bottom();
   return first.x() < second.x();
 }
 
-static bool colRLTB(const Rect &first, const Rect &second) {
+static bool colRLTB(const otk::Rect &first, const otk::Rect &second) {
   if (first.right() == second.right())
     return first.y() < second.y();
   return first.right() > second.right();
 }
 
-static bool colRLBT(const Rect &first, const Rect &second) {
+static bool colRLBT(const otk::Rect &first, const otk::Rect &second) {
   if (first.right() == second.right())
     return first.bottom() > second.bottom();
   return first.right() > second.right();
 }
 
 
-bool Workspace::smartPlacement(Rect& win) {
+bool Workspace::smartPlacement(otk::Rect& win) {
   rectList spaces;
  
   //initially the entire screen is free
@@ -600,7 +582,7 @@ bool Workspace::smartPlacement(Rect& win) {
   } else
 #endif // XINERAMA
   {
-    Rect r = screen->availableArea();
+    otk::Rect r = screen->availableArea();
     r.setRect(r.x() + screen->getSnapOffset(),
               r.y() + screen->getSnapOffset(),
               r.width() - screen->getSnapOffset(),
@@ -611,7 +593,7 @@ bool Workspace::smartPlacement(Rect& win) {
   //Find Free Spaces
   BlackboxWindowList::const_iterator wit = windowList.begin(),
     end = windowList.end();
-  Rect tmp;
+  otk::Rect tmp;
   for (; wit != end; ++wit) {
     const BlackboxWindow* const curr = *wit;
 
@@ -623,8 +605,8 @@ bool Workspace::smartPlacement(Rect& win) {
     }
 
     tmp.setRect(curr->frameRect().x(), curr->frameRect().y(),
-                curr->frameRect().width() + screen->getBorderWidth(),
-                curr->frameRect().height() + screen->getBorderWidth());
+                curr->frameRect().width() + screen->getWindowStyle()->getBorderWidth(),
+                curr->frameRect().height() + screen->getWindowStyle()->getBorderWidth());
 
     spaces = calcSpace(tmp, spaces);
   }
@@ -665,7 +647,7 @@ bool Workspace::smartPlacement(Rect& win) {
     return False;
 
   //set new position based on the empty space found
-  const Rect& where = *sit;
+  const otk::Rect& where = *sit;
   win.setX(where.x());
   win.setY(where.y());
 
@@ -685,14 +667,14 @@ bool Workspace::smartPlacement(Rect& win) {
 }
 
 
-bool Workspace::underMousePlacement(Rect &win) {
+bool Workspace::underMousePlacement(otk::Rect &win) {
   int x, y, rx, ry;
   Window c, r;
   unsigned int m;
-  XQueryPointer(screen->getBlackbox()->getXDisplay(), screen->getRootWindow(),
+  XQueryPointer(otk::OBDisplay::display, screen->getRootWindow(),
                 &r, &c, &rx, &ry, &x, &y, &m);
 
-  Rect area;
+  otk::Rect area;
 #ifdef    XINERAMA
   if (screen->isXineramaActive() &&
       screen->getBlackbox()->doXineramaPlacement()) {
@@ -726,8 +708,8 @@ bool Workspace::underMousePlacement(Rect &win) {
 }
 
 
-bool Workspace::cascadePlacement(Rect &win, const int offset) {
-  Rect area;
+bool Workspace::cascadePlacement(otk::Rect &win, const int offset) {
+  otk::Rect area;
   
 #ifdef    XINERAMA
   if (screen->isXineramaActive() &&
@@ -766,7 +748,7 @@ bool Workspace::cascadePlacement(Rect &win, const int offset) {
 
 
 void Workspace::placeWindow(BlackboxWindow *win) {
-  Rect new_win(0, 0, win->frameRect().width(), win->frameRect().height());
+  otk::Rect new_win(0, 0, win->frameRect().width(), win->frameRect().height());
   bool placed = False;
 
   switch (screen->getPlacementPolicy()) {
@@ -783,7 +765,7 @@ void Workspace::placeWindow(BlackboxWindow *win) {
 
   if (placed == False)
     cascadePlacement(new_win, (win->getTitleHeight() +
-                               screen->getBorderWidth() * 2));
+                               screen->getWindowStyle()->getBorderWidth() * 2));
 
   if (new_win.right() > screen->availableArea().right())
     new_win.setX(screen->availableArea().left());
@@ -792,3 +774,5 @@ void Workspace::placeWindow(BlackboxWindow *win) {
 
   win->configure(new_win.x(), new_win.y(), new_win.width(), new_win.height());
 }
+
+}
This page took 0.031144 seconds and 4 git commands to generate.