]> Dogcows Code - chaz/openbox/blobdiff - src/client.cc
notify the frame when the desktop changes
[chaz/openbox] / src / client.cc
index 453bf745602144a4cd989c2e1e94cc0700935bb4..3175b3ba75658ebdfab932ff42cc5e66556fac34 100644 (file)
@@ -83,7 +83,6 @@ Client::Client(int screen, Window window)
   // any changes we've made here
   otk::Property::set(_window, otk::Property::atoms.net_wm_desktop,
                      otk::Property::atoms.cardinal, (unsigned)_desktop);
-  
   changeState();
 }
 
@@ -750,14 +749,12 @@ void Client::setDesktop(unsigned int target)
     return;
 
   _desktop = target;
-
   // set the desktop hint
   otk::Property::set(_window, otk::Property::atoms.net_wm_desktop,
                      otk::Property::atoms.cardinal, _desktop);
-  
+  frame->adjustState(); // the frame can display the current desktop state
   // 'move' the window to the new desktop
   showhide();
-
   openbox->screen(_screen)->updateStruts();
 }
 
@@ -1017,15 +1014,23 @@ void Client::clientMessageHandler(const XClientMessageEvent &e)
 #ifdef DEBUG
     printf("net_active_window for 0x%lx\n", _window);
 #endif
+    if (openbox->screen(_screen)->showingDesktop())
+      openbox->screen(_screen)->showDesktop(false);
     if (_iconic)
       iconify(false);
+    else if (!frame->visible()) // if its not visible for other reasons, then
+      return;                   // don't mess with it
     if (_shaded)
       shade(false);
     focus();
     openbox->screen(_screen)->raiseWindow(this);
   } else if (e.message_type == otk::Property::atoms.openbox_active_window) {
+    if (openbox->screen(_screen)->showingDesktop())
+      openbox->screen(_screen)->showDesktop(false);
     if (_iconic)
       iconify(false);
+    else if (!frame->visible()) // if its not visible for other reasons, then
+      return;                   // don't mess with it
     if (e.data.l[0] && _shaded)
       shade(false);
     focus();
@@ -1553,6 +1558,10 @@ void Client::iconify(bool iconic, bool curdesk)
 {
   if (_iconic == iconic) return; // nothing to do
 
+#ifdef DEBUG
+    printf("%sconifying window: 0x%lx\n", (iconic ? "I" : "Uni"), _window);
+#endif
+
   _iconic = iconic;
 
   if (_iconic) {
@@ -1568,9 +1577,7 @@ void Client::iconify(bool iconic, bool curdesk)
     XMapWindow(**otk::display, _window);
   }
   changeState();
-
   showhide();
-  
   openbox->screen(_screen)->updateStruts();
 }
 
This page took 0.021389 seconds and 4 git commands to generate.