]> Dogcows Code - chaz/openbox/commitdiff
fix compiling with the new strut (new namespace)
authorDana Jansens <danakj@orodu.net>
Wed, 6 Nov 2002 08:06:54 +0000 (08:06 +0000)
committerDana Jansens <danakj@orodu.net>
Wed, 6 Nov 2002 08:06:54 +0000 (08:06 +0000)
and fix general errors that broke compiling.

make xeventhandler find the OBClient for most events..

src/bbwindow.hh
src/client.cc
src/client.hh
src/openbox.cc
src/openbox.hh
src/screen.cc
src/screen.hh
src/xeventhandler.cc

index ff92d5ccd57702064a0b5ff30b504d29fb24d948..1da5dc945bdb61c08d9b9e97baa9f04cefce2f2b 100644 (file)
@@ -14,6 +14,8 @@ extern "C" {
 
 #include "otk/timer.hh"
 #include "otk/property.hh"
+#include "otk/rect.hh"
+#include "otk/strut.hh"
 #include "blackbox.hh"
 #include "util.hh"
 
@@ -148,7 +150,7 @@ private:
     std::string title, icon_title;
 
     otk::Rect rect;
-    Strut strut;
+    otk::Strut strut;
 
     int old_bw;                       // client's borderwidth
 
@@ -219,7 +221,7 @@ private:
     otk::Rect changing;
 
     otk::Rect rect;                  // frame geometry
-    Strut margin;               // margins between the frame and client
+    otk::Strut margin;               // margins between the frame and client
 
     int grab_x, grab_y;         // where was the window when it was grabbed?
 
index 7a3754a669c581f110c67acf25dff926b0667678..253fd235034b0d71947b6d73e15cc68784517f8b 100644 (file)
@@ -18,10 +18,9 @@ extern "C" {
 
 namespace ob {
 
-OBClient::OBClient(BScreen *screen, Window window)
-  : _screen(screen), _window(window)
+OBClient::OBClient(Window window)
+  : _window(window)
 {
-  assert(_screen);
   assert(window);
 
   // initialize vars to false/invalid values
index fa441b6dcd801b8a722702461d5eec995b0652b2..94f12ba312d5b149c64644e56a15aa8cceb559e0 100644 (file)
@@ -13,8 +13,6 @@ extern "C" {
 
 namespace ob {
 
-class BScreen;
-
 class OBClient {
 public:
   enum Max { Max_None,
@@ -64,7 +62,6 @@ public:
   };
 
 private:
-  BScreen *_screen;
   Window   _window;
 
   //! The id of the group the window belongs to
@@ -143,7 +140,7 @@ private:
   void updateClass();
 
 public:
-  OBClient(BScreen *screen, Window window);
+  OBClient(Window window);
   virtual ~OBClient();
 
   inline Window window() const { return _window; }
index f10db5bc63e44478e7995ea96e7f15e918f541c9..c5a93eeb25003d278f6299958b15d9d597a297e6 100644 (file)
@@ -210,5 +210,22 @@ void Openbox::eventLoop()
 }
 
 
+void Openbox::addClient(Window window, OBClient *client)
+{
+  _clients[window] = client;
+}
+
+
+void Openbox::removeClient(Window window)
+{
+  _clients[window] = (OBClient *) 0;
+}
+
+
+OBClient *Openbox::findClient(Window window)
+{
+  return _clients[window];
+}
+
 }
 
index baf9edebe906dc90dd290047bf1a8deab2d4326b..bb05fae81f8f4b544a14a076d4bbd3ec8e1f68e9 100644 (file)
@@ -12,11 +12,13 @@ extern "C" {
 
 #include <string>
 #include <vector>
+#include <map>
 
 #include "otk/screeninfo.hh"
 #include "otk/timerqueuemanager.hh"
 #include "otk/property.hh"
 #include "xeventhandler.hh"
+#include "client.hh"
 
 namespace ob {
 
@@ -46,6 +48,9 @@ public:
     State_Normal,   //!< The window manager is running in its normal state
     State_Exiting   //!< The window manager is exiting (being destroyed)
   };
+
+  //! A map for looking up a specific client class from the window id
+  typedef std::map<Window, OBClient *> ClientMap;
   
 private:
   // stuff that can be passed on the command line
@@ -64,6 +69,9 @@ private:
   //! The value of argv[0], i.e. how this application was executed
   char *_argv0;
 
+  //! A list of all managed clients
+  ClientMap _clients;
+
   //! Manages all timers for the application
   /*!
     Use of the otk::OBTimerQueueManager::fire funtion in this object ensures
@@ -128,6 +136,15 @@ public:
   */
   void eventLoop();
 
+  //! Adds an OBClient to the client list for lookups
+  void addClient(Window window, OBClient *client);
+
+  //! Removes an OBClient from the client list for lookups
+  void removeClient(Window window);
+
+  //! Finds an OBClient based on its window id
+  OBClient *findClient(Window window);
+
   //! Requests that the window manager exit
   /*!
     Causes the Openbox::eventLoop function to stop looping, so that the window
index 0d5810d7f4495c95b86f20ffc82ce37a8785c230..20a6169a51e810b9caf5423b5d3eb0f17e36da81 100644 (file)
@@ -113,7 +113,8 @@ BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(scrn) {
 
 //  xatom->setSupported(this);    // set-up netwm support
 #ifdef    HAVE_GETPID
-  xatom->setValue(getRootWindow(), otk::OBProperty::blackbox_pid, otk::OBProperty::cardinal,
+  xatom->setValue(getRootWindow(), otk::OBProperty::blackbox_pid,
+                  otk::OBProperty::Atom_Cardinal,
                   (unsigned long) getpid());
 #endif // HAVE_GETPID
   unsigned long geometry[] = { getWidth(),
@@ -1519,12 +1520,12 @@ void BScreen::hideGeometry(void) {
 }
 
 
-void BScreen::addStrut(Strut *strut) {
+void BScreen::addStrut(otk::Strut *strut) {
   strutList.push_back(strut);
 }
 
 
-void BScreen::removeStrut(Strut *strut) {
+void BScreen::removeStrut(otk::Strut *strut) {
   strutList.remove(strut);
 }
 
@@ -1569,7 +1570,7 @@ void BScreen::updateAvailableArea(void) {
   StrutList::const_iterator it = strutList.begin(), end = strutList.end();
 
   for(; it != end; ++it) {
-    Strut *strut = *it;
+    otk::Strut *strut = *it;
     if (strut->left > current_left)
       current_left = strut->left;
     if (strut->top > current_top)
index 1c09c6334e737e822aa9f76eda63e8667f65bdd0..349635081eaa2bae437a4c284feb5823be3433e0 100644 (file)
@@ -24,6 +24,7 @@ extern "C" {
 #include "otk/font.hh"
 #include "otk/texture.hh"
 #include "otk/image.hh"
+#include "otk/strut.hh"
 #include "otk/property.hh"
 #include "timer.hh"
 #include "workspace.hh"
@@ -31,8 +32,6 @@ extern "C" {
 
 namespace ob {
 
-struct Strut;
-
 enum TextJustify { LeftJustify = 1, RightJustify, CenterJustify };
 
 struct PixmapMask {
@@ -83,7 +82,7 @@ private:
   RectList xineramaUsableArea;
 #endif // XINERAMA
 
-  typedef std::list<Strut*> StrutList;
+  typedef std::list<otk::Strut*> StrutList;
   StrutList strutList;
   typedef std::vector<Workspace*> WorkspaceList;
   WorkspaceList workspacesList;
@@ -270,8 +269,8 @@ public:
   const RectList& allAvailableAreas(void) const;
 #endif // XINERAMA
   void updateAvailableArea(void);
-  void addStrut(Strut *strut);
-  void removeStrut(Strut *strut);
+  void addStrut(otk::Strut *strut);
+  void removeStrut(otk::Strut *strut);
 
   unsigned int addWorkspace(void);
   unsigned int removeLastWorkspace(void);
index ba60edf7e5c9e4e6e61b71585963f1b9854d9a79..c31aaf9793a96093167b079c2888cbe96269cc99 100644 (file)
@@ -1,6 +1,8 @@
 // -*- mode: C++; indent-tabs-mode: nil; -*-
 
 #include "xeventhandler.hh"
+#include "client.hh"
+#include "openbox.hh"
 #include "otk/display.hh"
 #include "otk/rect.hh"
 
@@ -45,6 +47,10 @@ void OBXEventHandler::motion(const XMotionEvent &e)
 void OBXEventHandler::enterNotify(const XCrossingEvent &e)
 {
   _lasttime = e.time;
+
+  OBClient *client = Openbox::instance->findClient(e.window);
+  if (!client) return;
+  
 /*
   BScreen *screen = (BScreen *) 0;
   BlackboxWindow *win = (BlackboxWindow *) 0;
@@ -65,6 +71,10 @@ void OBXEventHandler::enterNotify(const XCrossingEvent &e)
 void OBXEventHandler::leaveNotify(const XCrossingEvent &e)
 {
   _lasttime = e.time;
+
+  OBClient *client = Openbox::instance->findClient(e.window);
+  if (!client) return;
+  
 /*
   BlackboxWindow *win = (BlackboxWindow *) 0;
 
@@ -76,7 +86,9 @@ void OBXEventHandler::leaveNotify(const XCrossingEvent &e)
 
 void OBXEventHandler::configureRequest(const XConfigureRequestEvent &e)
 {
-  (void)e;
+  OBClient *client = Openbox::instance->findClient(e.window);
+  if (!client) return;
+  
 /*  BlackboxWindow *win = (BlackboxWindow *) 0;
 
   if ((win = searchWindow(e->xconfigurerequest.window))) {
@@ -106,6 +118,16 @@ void OBXEventHandler::mapRequest(const XMapRequestEvent &e)
 #ifdef    DEBUG
   printf("MapRequest for 0x%lx\n", e.window);
 #endif // DEBUG
+
+  OBClient *client = Openbox::instance->findClient(e.window);
+
+  if (client) {
+    // XXX: uniconify and/or unshade the window
+  } else {
+    // XXX: manage the window, i.e. grab events n shit
+    Openbox::instance->addClient(e.window, new OBClient(e.window));
+  }
+  
 /*
   BlackboxWindow *win = searchWindow(e->xmaprequest.window);
 
@@ -160,48 +182,37 @@ void OBXEventHandler::mapRequest(const XMapRequestEvent &e)
 
 void OBXEventHandler::unmapNotify(const XUnmapEvent &e)
 {
-  (void)e;
-/*
-  BlackboxWindow *win = (BlackboxWindow *) 0;
-  BScreen *screen = (BScreen *) 0;
-
-  if ((win = searchWindow(e->xunmap.window))) {
-    win->unmapNotifyEvent(&e->xunmap);
-  } else if ((screen = searchSystrayWindow(e->xunmap.window))) {
-    screen->removeSystrayWindow(e->xunmap.window);
-  }
-*/
+  OBClient *client = Openbox::instance->findClient(e.window);
+  if (!client) return;
+  
+  // XXX: unmanage the window, i.e. ungrab events n reparent n shit
+  Openbox::instance->removeClient(e.window);
 }
 
 
 void OBXEventHandler::destroyNotify(const XDestroyWindowEvent &e)
 {
-  (void)e;
-/*
-  BlackboxWindow *win = (BlackboxWindow *) 0;
-  BScreen *screen = (BScreen *) 0;
-  BWindowGroup *group = (BWindowGroup *) 0;
-
-  if ((win = searchWindow(e->xdestroywindow.window))) {
-    win->destroyNotifyEvent(&e->xdestroywindow);
-  } else if ((group = searchGroup(e->xdestroywindow.window))) {
-    delete group;
-  } else if ((screen = searchSystrayWindow(e->xunmap.window))) {
-    screen->removeSystrayWindow(e->xunmap.window);
-  }
-*/
+  // XXX: window group leaders can come through here too!
+  
+  OBClient *client = Openbox::instance->findClient(e.window);
+  if (!client) return;
+  
+  // XXX: unmanage the window, i.e. ungrab events n reparent n shit
+  Openbox::instance->removeClient(e.window);
 }
 
 
 void OBXEventHandler::reparentNotify(const XReparentEvent &e)
 {
-  (void)e;
   /*
     this event is quite rare and is usually handled in unmapNotify
     however, if the window is unmapped when the reparent event occurs
     the window manager never sees it because an unmap event is not sent
     to an already unmapped window.
   */
+  OBClient *client = Openbox::instance->findClient(e.window);
+  if (!client) return;
+
 /*
   BlackboxWindow *win = searchWindow(e->xreparent.window);
   if (win)
@@ -213,45 +224,40 @@ void OBXEventHandler::reparentNotify(const XReparentEvent &e)
 void OBXEventHandler::propertyNotify(const XPropertyEvent &e)
 {
   _lasttime = e.time;
-/*
-  BlackboxWindow *win = (BlackboxWindow *) 0;
-  BScreen *screen = (BScreen *) 0;
 
-  if ((win = searchWindow(e->xproperty.window)))
-    win->propertyNotifyEvent(&e->xproperty);
-  else if ((screen = searchScreen(e->xproperty.window)))
-    screen->propertyNotifyEvent(&e->xproperty);
-*/
+  OBClient *client = Openbox::instance->findClient(e.window);
+  if (!client) return;
+
+  client->update(e);
 }
 
 
 void OBXEventHandler::expose(const XExposeEvent &first)
 {
-    // compress expose events
-    XEvent e; e.xexpose = first;
-    unsigned int i = 0;
-    otk::Rect area(e.xexpose.x, e.xexpose.y, e.xexpose.width,
-                   e.xexpose.height);
-    while (XCheckTypedWindowEvent(otk::OBDisplay::display,
-                                  e.xexpose.window, Expose, &e)) {
-      i++;
-      // merge expose area
-      area |= otk::Rect(e.xexpose.x, e.xexpose.y, e.xexpose.width,
-                        e.xexpose.height);
-    }
-    if ( i > 0 ) {
-      // use the merged area
-      e.xexpose.x = area.x();
-      e.xexpose.y = area.y();
-      e.xexpose.width = area.width();
-      e.xexpose.height = area.height();
-    }
-/*
-    BlackboxWindow *win = (BlackboxWindow *) 0;
+  OBClient *client = Openbox::instance->findClient(first.window);
+  if (!client) return;
+
+  // compress expose events
+  XEvent e; e.xexpose = first;
+  unsigned int i = 0;
+  otk::Rect area(e.xexpose.x, e.xexpose.y, e.xexpose.width,
+                 e.xexpose.height);
+  while (XCheckTypedWindowEvent(otk::OBDisplay::display,
+                                e.xexpose.window, Expose, &e)) {
+    i++;
+    // merge expose area
+    area |= otk::Rect(e.xexpose.x, e.xexpose.y, e.xexpose.width,
+                      e.xexpose.height);
+  }
+  if ( i > 0 ) {
+    // use the merged area
+    e.xexpose.x = area.x();
+    e.xexpose.y = area.y();
+    e.xexpose.width = area.width();
+    e.xexpose.height = area.height();
+  }
 
-    if ((win = searchWindow(e->xexpose.window)))
-      win->exposeEvent(&e->xexpose);
-*/
+  // XXX: make the decorations redraw!
 }
 
 
This page took 0.036236 seconds and 4 git commands to generate.