]> Dogcows Code - chaz/openbox/blobdiff - src/openbox.cc
80 cols
[chaz/openbox] / src / openbox.cc
index 0143a3eb4e6365378a9f3f72211bfd8596e18a8a..de7767a2151c10594c5ad08771385f464667c63f 100644 (file)
@@ -148,21 +148,29 @@ Openbox::Openbox(int argc, char **argv)
     python_exec(SCRIPTDIR"/defaults.py"); // system default bahaviors
 
   // initialize all the screens
+  _focused_screen = 0;
+
   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())
+    if (screen->managed()) {
       _screens.push_back(screen);
-    else {
+      if (!_focused_screen) // set this to the first screen managed
+        _focused_screen = screen;
+    } else {
       delete screen;
       _screens.push_back(0);
     }
   }
 
+  assert(_focused_screen);
+
   if (_screens.empty()) {
     printf(_("No screens were found without a window manager. Exiting.\n"));
     ::exit(1);
@@ -177,7 +185,6 @@ Openbox::Openbox(int argc, char **argv)
   _bindings->grabKeys(true);
 
   // set up input focus
-  _focused_screen = _screens[0];
   setFocusedClient(0);
   
   _state = State_Normal; // done starting
@@ -353,13 +360,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.020917 seconds and 4 git commands to generate.