]> Dogcows Code - chaz/openbox/blobdiff - src/xeventhandler.cc
add a bunch of documentation
[chaz/openbox] / src / xeventhandler.cc
index f09a32b873e57aea38e896dc2ceb469cd5abd73e..ca9be143965467823eb67641bf185274c40e8bf3 100644 (file)
@@ -1,9 +1,16 @@
 // -*- mode: C++; indent-tabs-mode: nil; -*-
 
 #include "xeventhandler.hh"
+#include "client.hh"
+#include "openbox.hh"
 #include "otk/display.hh"
 #include "otk/rect.hh"
 
+extern "C" {
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+}
+
 namespace ob {
 
 
@@ -45,6 +52,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 +76,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 +91,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))) {
@@ -101,11 +118,120 @@ void OBXEventHandler::configureRequest(const XConfigureRequestEvent &e)
 }
 
 
+// XXX: put this into the OBScreen or OBClient class!
+static void manageWindow(Window window)
+{
+  OBClient *client = 0;
+  XWMHints *wmhint;
+  XSetWindowAttributes attrib_set;
+
+  // XXX: manage the window, i.e. grab events n shit
+
+  // is the window a docking app
+  if ((wmhint = XGetWMHints(otk::OBDisplay::display, window))) {
+    if ((wmhint->flags & StateHint) &&
+        wmhint->initial_state == WithdrawnState) {
+      //slit->addClient(w); // XXX: make dock apps work!
+      XFree(wmhint);
+      return;
+    }
+    XFree(wmhint);
+  }
+
+  // choose the events we want to receive on the CLIENT window
+  attrib_set.event_mask = PropertyChangeMask | FocusChangeMask |
+                          StructureNotifyMask;
+  attrib_set.do_not_propagate_mask = ButtonPressMask | ButtonReleaseMask |
+                                     ButtonMotionMask;
+  XChangeWindowAttributes(otk::OBDisplay::display, window,
+                          CWEventMask|CWDontPropagate, &attrib_set);
+
+  // create the OBClient class, which gets all of the hints on the window
+  Openbox::instance->addClient(window, client = new OBClient(window));
+
+  // we dont want a border on the client
+  XSetWindowBorderWidth(otk::OBDisplay::display, window, 0);
+  
+  // specify that if we exit, the window should not be destroyed and should be
+  // reparented back to root automatically
+  XChangeSaveSet(otk::OBDisplay::display, window, SetModeInsert);
+
+  if (!client->positionRequested()) {
+    // XXX: position the window intelligenty
+  }
+  
+  // XXX: grab server, reparent client to the frame, ungrab server
+
+  // XXX: if shaped, shape the frame..
+
+  // XXX: if on the current desktop..
+  /// XMapSubwindows(otk::OBDisplay::display, FRAMEWINDOW);
+  XMapWindow(otk::OBDisplay::display, window);
+  // XXX: handle any requested states such as shaded/maximized
+}
+
+// XXX: move this to the OBScreen or OBClient class!
+static void unmanageWindow(OBClient *client)
+{
+  bool remap = false; // remap the window when we're done?
+  
+  Window window = client->window();
+
+  // XXX: pass around focus if this window was focused
+  
+  // remove the window from our save set
+  XChangeSaveSet(otk::OBDisplay::display, window, SetModeDelete);
+
+  // we dont want events no more
+  XSelectInput(otk::OBDisplay::display, window, NoEventMask);
+
+  // XXX: XUnmapWindow(otk::OBDisplay::display, FRAME);
+  XUnmapWindow(otk::OBDisplay::display, window);
+  
+  // we dont want a border on the client
+  XSetWindowBorderWidth(otk::OBDisplay::display, window,client->borderWidth());
+
+  // remove the client class from the search list
+  Openbox::instance->removeClient(window);
+
+  // check if the app has already reparented its window to the root window
+  XEvent ev;
+  if (XCheckTypedWindowEvent(otk::OBDisplay::display, window, ReparentNotify,
+                             &ev)) {
+    remap = true; // XXX: why do we remap the window if they already
+                  // reparented to root?
+  } else {
+    // according to the ICCCM - if the client doesn't reparent to
+    // root, then we have to do it for them
+    XReparentWindow(otk::OBDisplay::display, window,
+                    RootWindow(otk::OBDisplay::display,
+                               DefaultScreen(otk::OBDisplay::display)),
+                    // XXX: screen->getRootWindow(),
+                    client->area().x(), client->area().y());
+  }
+
+  // if we want to remap the window, do so now
+  if (remap)
+    XMapWindow(otk::OBDisplay::display, window);
+
+  delete client;
+}
+
 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 {
+    manageWindow(e.window);
+  }
+  
 /*
   BlackboxWindow *win = searchWindow(e->xmaprequest.window);
 
@@ -160,48 +286,35 @@ 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;
+  
+  unmanageWindow(client);
 }
 
 
 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;
+  
+  unmanageWindow(client);
 }
 
 
 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 +326,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!
 }
 
 
@@ -384,6 +492,85 @@ void OBXEventHandler::shapeEvent(const XShapeEvent &e)
 #endif // SHAPE
 
 
+void OBXEventHandler::clientMessage(const XClientMessageEvent &e)
+{
+  if (e.format != 32)
+    return;
+/*  
+  } else if (e->xclient.message_type == 
+             xatom->getAtom(XAtom::blackbox_change_workspace) || 
+             e->xclient.message_type == 
+             xatom->getAtom(XAtom::net_current_desktop)) {
+    // NET_CURRENT_DESKTOP message
+    BScreen *screen = searchScreen(e->xclient.window);
+
+    unsigned int workspace = e->xclient.data.l[0];
+    if (screen && workspace < screen->getWorkspaceCount())
+      screen->changeWorkspaceID(workspace);
+  } else if (e->xclient.message_type == 
+             xatom->getAtom(XAtom::net_active_window)) {
+    // NET_ACTIVE_WINDOW
+    BlackboxWindow *win = searchWindow(e->xclient.window);
+
+    if (win) {
+      BScreen *screen = win->getScreen();
+
+      if (win->isIconic())
+        win->deiconify(False, False);
+      if (! win->isStuck() &&
+          (win->getWorkspaceNumber() != screen->getCurrentWorkspaceID())) {
+        no_focus = True;
+        screen->changeWorkspaceID(win->getWorkspaceNumber());
+      }
+      if (win->isVisible() && win->setInputFocus()) {
+        win->getScreen()->getWorkspace(win->getWorkspaceNumber())->
+          raiseWindow(win);
+        win->installColormap(True);
+      }
+    }
+  } else if (e->xclient.message_type == 
+             xatom->getAtom(XAtom::net_number_of_desktops)) {
+    // NET_NUMBER_OF_DESKTOPS
+    BScreen *screen = searchScreen(e->xclient.window);
+        
+    if (e->xclient.data.l[0] > 0)
+      screen->changeWorkspaceCount((unsigned) e->xclient.data.l[0]);
+  } else if (e->xclient.message_type ==
+             xatom->getAtom(XAtom::net_close_window)) {
+    // NET_CLOSE_WINDOW
+    BlackboxWindow *win = searchWindow(e->xclient.window);
+    if (win && win->validateClient())
+      win->close(); // could this be smarter?
+  } else if (e->xclient.message_type ==
+             xatom->getAtom(XAtom::net_wm_moveresize)) {
+    // NET_WM_MOVERESIZE
+    BlackboxWindow *win = searchWindow(e->xclient.window);
+    if (win && win->validateClient()) {
+      int x_root = e->xclient.data.l[0],
+        y_root = e->xclient.data.l[1];
+      if ((Atom) e->xclient.data.l[2] ==
+          xatom->getAtom(XAtom::net_wm_moveresize_move)) {
+        win->beginMove(x_root, y_root);
+      } else {
+        if ((Atom) e->xclient.data.l[2] ==
+            xatom->getAtom(XAtom::net_wm_moveresize_size_topleft))
+          win->beginResize(x_root, y_root, BlackboxWindow::TopLeft);
+        else if ((Atom) e->xclient.data.l[2] ==
+                 xatom->getAtom(XAtom::net_wm_moveresize_size_topright))
+          win->beginResize(x_root, y_root, BlackboxWindow::TopRight);
+        else if ((Atom) e->xclient.data.l[2] ==
+                 xatom->getAtom(XAtom::net_wm_moveresize_size_bottomleft))
+          win->beginResize(x_root, y_root, BlackboxWindow::BottomLeft);
+        else if ((Atom) e->xclient.data.l[2] ==
+                 xatom->getAtom(XAtom::net_wm_moveresize_size_bottomright))
+          win->beginResize(x_root, y_root, BlackboxWindow::BottomRight);
+      }
+    }
+  }
+*/
+}
+
+
 void OBXEventHandler::handle(const XEvent &e)
 {
   /* mouse button events can get translated into:
@@ -463,6 +650,9 @@ void OBXEventHandler::handle(const XEvent &e)
     focusOut(e.xfocus);
     break;
 
+  case ClientMessage:
+    clientMessage(e.xclient);
+
   default:
 #ifdef    SHAPE
     if (e.type == otk::OBDisplay::shapeEventBase())
@@ -472,278 +662,9 @@ void OBXEventHandler::handle(const XEvent &e)
     
 /*
   case ClientMessage: {
-    if (e->xclient.format == 32) {
-      if (e->xclient.message_type == xatom->getAtom(XAtom::wm_change_state)) {
-        // WM_CHANGE_STATE message
-        BlackboxWindow *win = searchWindow(e->xclient.window);
-        if (! win || ! win->validateClient()) return;
-
-        if (e->xclient.data.l[0] == IconicState)
-          win->iconify();
-        if (e->xclient.data.l[0] == NormalState)
-          win->deiconify();
-      } else if (e->xclient.message_type == 
-                 xatom->getAtom(XAtom::blackbox_change_workspace) || 
-                 e->xclient.message_type == 
-                 xatom->getAtom(XAtom::net_current_desktop)) {
-        // NET_CURRENT_DESKTOP message
-        BScreen *screen = searchScreen(e->xclient.window);
-
-        unsigned int workspace = e->xclient.data.l[0];
-        if (screen && workspace < screen->getWorkspaceCount())
-          screen->changeWorkspaceID(workspace);
-      } else if (e->xclient.message_type == 
-                 xatom->getAtom(XAtom::blackbox_change_window_focus)) {
-        // TEMP HACK TO KEEP BBKEYS WORKING
-        BlackboxWindow *win = searchWindow(e->xclient.window);
-
-        if (win && win->isVisible() && win->setInputFocus())
-          win->installColormap(True);
-      } else if (e->xclient.message_type == 
-                 xatom->getAtom(XAtom::net_active_window)) {
-        // NET_ACTIVE_WINDOW
-        BlackboxWindow *win = searchWindow(e->xclient.window);
-
-        if (win) {
-          BScreen *screen = win->getScreen();
-
-          if (win->isIconic())
-            win->deiconify(False, False);
-          if (! win->isStuck() &&
-              (win->getWorkspaceNumber() != screen->getCurrentWorkspaceID())) {
-            no_focus = True;
-            screen->changeWorkspaceID(win->getWorkspaceNumber());
-          }
-          if (win->isVisible() && win->setInputFocus()) {
-            win->getScreen()->getWorkspace(win->getWorkspaceNumber())->
-              raiseWindow(win);
-            win->installColormap(True);
-          }
-        }
-      } else if (e->xclient.message_type == 
-                 xatom->getAtom(XAtom::blackbox_cycle_window_focus)) {
-        // BLACKBOX_CYCLE_WINDOW_FOCUS
-        BScreen *screen = searchScreen(e->xclient.window);
-
-        if (screen) {
-          if (! e->xclient.data.l[0])
-            screen->prevFocus();
-          else
-            screen->nextFocus();
-        }
-      } else if (e->xclient.message_type == 
-                 xatom->getAtom(XAtom::net_wm_desktop)) {
-        // NET_WM_DESKTOP
-        BlackboxWindow *win = searchWindow(e->xclient.window);
-
-        if (win) {
-          BScreen *screen = win->getScreen();
-          unsigned long wksp = (unsigned) e->xclient.data.l[0];
-          if (wksp < screen->getWorkspaceCount()) {
-            if (win->isIconic()) win->deiconify(False, True);
-            if (win->isStuck()) win->stick();
-            if (wksp != screen->getCurrentWorkspaceID())
-              win->withdraw();
-            else
-              win->show();
-            screen->reassociateWindow(win, wksp, True);
-          } else if (wksp == 0xfffffffe || // XXX: BUG, BUT DOING THIS SO KDE WORKS FOR NOW!!
-                     wksp == 0xffffffff) {
-            if (win->isIconic()) win->deiconify(False, True);
-            if (! win->isStuck()) win->stick();
-            if (! win->isVisible()) win->show();
-          }
-        }
-      } else if (e->xclient.message_type == 
-                 xatom->getAtom(XAtom::blackbox_change_attributes)) {
-        // BLACKBOX_CHANGE_ATTRIBUTES
-        BlackboxWindow *win = searchWindow(e->xclient.window);
-
-        if (win && win->validateClient()) {
-          BlackboxHints net;
-          net.flags = e->xclient.data.l[0];
-          net.attrib = e->xclient.data.l[1];
-          net.workspace = e->xclient.data.l[2];
-          net.stack = e->xclient.data.l[3];
-          net.decoration = e->xclient.data.l[4];
-
-          win->changeBlackboxHints(&net);
-        }
-      } else if (e->xclient.message_type == 
-                xatom->getAtom(XAtom::net_number_of_desktops)) {
-        // NET_NUMBER_OF_DESKTOPS
-        BScreen *screen = searchScreen(e->xclient.window);
-        
-        if (e->xclient.data.l[0] > 0)
-          screen->changeWorkspaceCount((unsigned) e->xclient.data.l[0]);
-      } else if (e->xclient.message_type ==
-                 xatom->getAtom(XAtom::net_close_window)) {
-        // NET_CLOSE_WINDOW
-        BlackboxWindow *win = searchWindow(e->xclient.window);
-        if (win && win->validateClient())
-          win->close(); // could this be smarter?
-      } else if (e->xclient.message_type ==
-                 xatom->getAtom(XAtom::net_wm_moveresize)) {
-        // NET_WM_MOVERESIZE
-        BlackboxWindow *win = searchWindow(e->xclient.window);
-        if (win && win->validateClient()) {
-          int x_root = e->xclient.data.l[0],
-              y_root = e->xclient.data.l[1];
-          if ((Atom) e->xclient.data.l[2] ==
-              xatom->getAtom(XAtom::net_wm_moveresize_move)) {
-            win->beginMove(x_root, y_root);
-          } else {
-            if ((Atom) e->xclient.data.l[2] ==
-                xatom->getAtom(XAtom::net_wm_moveresize_size_topleft))
-              win->beginResize(x_root, y_root, BlackboxWindow::TopLeft);
-            else if ((Atom) e->xclient.data.l[2] ==
-                     xatom->getAtom(XAtom::net_wm_moveresize_size_topright))
-              win->beginResize(x_root, y_root, BlackboxWindow::TopRight);
-            else if ((Atom) e->xclient.data.l[2] ==
-                     xatom->getAtom(XAtom::net_wm_moveresize_size_bottomleft))
-              win->beginResize(x_root, y_root, BlackboxWindow::BottomLeft);
-            else if ((Atom) e->xclient.data.l[2] ==
-                xatom->getAtom(XAtom::net_wm_moveresize_size_bottomright))
-              win->beginResize(x_root, y_root, BlackboxWindow::BottomRight);
-          }
-        }
-      } else if (e->xclient.message_type ==
-                 xatom->getAtom(XAtom::net_wm_state)) {
-        // NET_WM_STATE
-        BlackboxWindow *win = searchWindow(e->xclient.window);
-        if (win && win->validateClient()) {
-          const Atom action = (Atom) e->xclient.data.l[0];
-          const Atom state[] = { (Atom) e->xclient.data.l[1],
-                                 (Atom) e->xclient.data.l[2] };
-          
-          for (int i = 0; i < 2; ++i) {
-            if (! state[i])
-              continue;
-
-            if ((Atom) e->xclient.data.l[0] == 1) {
-              // ADD
-              if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
-                win->setModal(True);
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
-                if (win->isMaximizedHoriz()) {
-                  win->maximize(0); // unmaximize
-                  win->maximize(1); // full
-                } else if (! win->isMaximized()) {
-                  win->maximize(2); // vert
-                }
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
-                if (win->isMaximizedVert()) {
-                  win->maximize(0); // unmaximize
-                  win->maximize(1); // full
-                } else if (! win->isMaximized()) {
-                  win->maximize(3); // horiz
-                }
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_shaded)) {
-                if (! win->isShaded())
-                  win->shade();
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
-                win->setSkipTaskbar(True);
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
-                win->setSkipPager(True);
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
-                win->setFullscreen(True);
-              }
-            } else if (action == 0) {
-              // REMOVE
-              if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
-                win->setModal(False);
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
-                if (win->isMaximizedFull()) {
-                  win->maximize(0); // unmaximize
-                  win->maximize(3); // horiz
-                } else if (win->isMaximizedVert()) {
-                  win->maximize(0); // unmaximize
-                }
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
-                if (win->isMaximizedFull()) {
-                  win->maximize(0); // unmaximize
-                  win->maximize(2); // vert
-                } else if (win->isMaximizedHoriz()) {
-                  win->maximize(0); // unmaximize
-                }
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_shaded)) {
-                if (win->isShaded())
-                  win->shade();
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
-                win->setSkipTaskbar(False);
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
-                win->setSkipPager(False);
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
-                win->setFullscreen(False);
-              }
-            } else if (action == 2) {
-              // TOGGLE
-              if (state[i] == xatom->getAtom(XAtom::net_wm_state_modal)) {
-                win->setModal(! win->isModal());
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_maximized_vert)) {
-                if (win->isMaximizedFull()) {
-                  win->maximize(0); // unmaximize
-                  win->maximize(3); // horiz
-                } else if (win->isMaximizedVert()) {
-                  win->maximize(0); // unmaximize
-                } else if (win->isMaximizedHoriz()) {
-                  win->maximize(0); // unmaximize
-                  win->maximize(1); // full
-                } else {
-                  win->maximize(2); // vert
-                }
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_maximized_horz)) {
-                if (win->isMaximizedFull()) {
-                  win->maximize(0); // unmaximize
-                  win->maximize(2); // vert
-                } else if (win->isMaximizedHoriz()) {
-                  win->maximize(0); // unmaximize
-                } else if (win->isMaximizedVert()) {
-                  win->maximize(0); // unmaximize
-                  win->maximize(1); // full
-                } else {
-                  win->maximize(3); // horiz
-                }
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_shaded)) {
-                win->shade();
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_skip_taskbar)) {
-                win->setSkipTaskbar(! win->skipTaskbar());
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_skip_pager)) {
-                win->setSkipPager(! win->skipPager());
-              } else if (state[i] ==
-                         xatom->getAtom(XAtom::net_wm_state_fullscreen)) {
-                win->setFullscreen(! win->isFullscreen());
-              }
-            }
-          }
-        }
-      }
-    }
-
     break;
   }
 
-  case NoExpose:
-  case ConfigureNotify:
-  case MapNotify:
-    break; // not handled, just ignore
 */
   } // switch
 }
This page took 0.0381280000000001 seconds and 4 git commands to generate.