]> Dogcows Code - chaz/openbox/blobdiff - src/openbox.cc
mention that 2.9x is not supported
[chaz/openbox] / src / openbox.cc
index caacb63ba6f2e75f2e1351fbd216eaa5b9c70794..9c1041acfce5f4baa31d0d8fa6964bbd06a0f83a 100644 (file)
@@ -1,8 +1,6 @@
 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
 
-#ifdef HAVE_CONFIG_H
-# include "../config.h"
-#endif
+#include "config.h"
 
 #include "openbox.hh"
 #include "client.hh"
 #include "otk/property.hh"
 #include "otk/util.hh"
 #include "otk/rendercolor.hh"
+#include "otk/renderstyle.hh"
 
 extern "C" {
 #include <X11/cursorfont.h>
 
-#ifdef    HAVE_STDIO_H
-#  include <stdio.h>
-#endif // HAVE_STDIO_H
-
-#ifdef    HAVE_STDLIB_H
-#  include <stdlib.h>
-#endif // HAVE_STDLIB_H
-
 #ifdef    HAVE_SIGNAL_H
 #  include <signal.h>
 #endif // HAVE_SIGNAL_H
@@ -44,6 +35,8 @@ extern "C" {
 }
 
 #include <algorithm>
+#include <cstdio>
+#include <cstdlib>
 
 namespace ob {
 
@@ -120,6 +113,7 @@ Openbox::Openbox(int argc, char **argv)
   while (waitpid(-1, NULL, WNOHANG) > 0);
 
   otk::RenderColor::initialize();
+  otk::RenderStyle::initialize();
   otk::Timer::initialize();
   otk::Property::initialize();
   _actions = new Actions();
@@ -152,10 +146,12 @@ Openbox::Openbox(int argc, char **argv)
 
   for (int i = 0, max = ScreenCount(**otk::display); i < max; ++i) {
     Screen *screen;
+    // in single mode skip the screens we don't want to manage
     if (_single && i != DefaultScreen(**otk::display)) {
       _screens.push_back(0);
       continue;
     }
+    // try manage the screen
     screen = new Screen(i);
     if (screen->managed()) {
       _screens.push_back(screen);
@@ -178,7 +174,7 @@ Openbox::Openbox(int argc, char **argv)
   for (it = _screens.begin(); it != end; ++it) {
     (*it)->manageExisting();
   }
+  
   // grab any keys set up before the screens existed
   _bindings->grabKeys(true);
 
@@ -210,6 +206,7 @@ Openbox::~Openbox()
   //delete _display;
 
   otk::Timer::destroy();
+  otk::RenderStyle::destroy();
   otk::RenderColor::destroy();
 }
 
@@ -358,13 +355,30 @@ Client *Openbox::findClient(Window window)
 
 void Openbox::setFocusedClient(Client *c)
 {
+  // sometimes this is called with the already-focused window, this is
+  // important for the python scripts to work (eg, c = 0 twice). don't just
+  // return if _focused_client == c
+  
+  assert(_focused_screen);
+
+  // uninstall the old colormap
+  if (_focused_client)
+    _focused_client->installColormap(false);
+  else
+    _focused_screen->installColormap(false);
+  
   _focused_client = c;
   if (c) {
     _focused_screen = _screens[c->screen()];
+
+    // install the client's colormap
+    c->installColormap(true);
   } else {
-    assert(_focused_screen);
     XSetInputFocus(**otk::display, _focused_screen->focuswindow(),
                    RevertToNone, CurrentTime);
+
+    // install the root window colormap
+    _focused_screen->installColormap(true);
   }
   // set the NET_ACTIVE_WINDOW hint for all screens
   ScreenList::iterator it, end = _screens.end();
This page took 0.026631 seconds and 4 git commands to generate.