sync with bb-cvs
authorDana Jansens <danakj@orodu.net>
Fri, 26 Jul 2002 08:37:15 +0000 (08:37 +0000)
committerDana Jansens <danakj@orodu.net>
Fri, 26 Jul 2002 08:37:15 +0000 (08:37 +0000)
src/Screen.cc
src/Slit.cc
src/Util.cc
src/Window.cc
src/Window.hh
src/blackbox.cc

index eee7db1..019a29a 100644 (file)
@@ -283,7 +283,7 @@ BScreen::BScreen(Blackbox *bb, unsigned int scrn) : ScreenInfo(bb, scrn) {
 
   // manage shown windows
   for (i = 0; i < nchild; ++i) {
-    if (children[i] == None || (! blackbox->validateWindow(children[i])))
+    if (children[i] == None || ! blackbox->validateWindow(children[i]))
       continue;
 
     XWindowAttributes attrib;
@@ -1232,6 +1232,14 @@ void BScreen::manageWindow(Window w) {
     return;
   }
 
+  // is the window a docking app
+  XWMHints *wmhint = XGetWMHints(blackbox->getXDisplay(), w);
+  if (wmhint && (wmhint->flags & StateHint) &&
+      wmhint->initial_state == WithdrawnState) {
+    slit->addClient(w);
+    return;
+  }
+
   new BlackboxWindow(blackbox, w, this);
 
   BlackboxWindow *win = blackbox->searchWindow(w);
@@ -1763,7 +1771,7 @@ bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) {
           break;
 
         case 421: // exec
-          if ((! *label) && (! *command)) {
+          if (! (*label || *command)) {
             fprintf(stderr, i18n(ScreenSet, ScreenEXECError,
                                  "BScreen::parseMenuFile: [exec] error, "
                                  "no menu label and/or command defined\n"));
@@ -1786,21 +1794,19 @@ bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) {
 
           break;
 
-        case 561: // style
-          {
-            if ((! *label) || (! *command)) {
-              fprintf(stderr,
-                      i18n(ScreenSet, ScreenSTYLEError,
-                           "BScreen::parseMenuFile: [style] error, "
-                           "no menu label and/or filename defined\n"));
-              continue;
-            }
-
-            string style = expandTilde(command);
-
-            menu->insert(label, BScreen::SetStyle, style.c_str());
+        case 561: { // style
+          if (! (*label && *command)) {
+            fprintf(stderr,
+                    i18n(ScreenSet, ScreenSTYLEError,
+                         "BScreen::parseMenuFile: [style] error, "
+                         "no menu label and/or filename defined\n"));
+            continue;
           }
 
+          string style = expandTilde(command);
+
+          menu->insert(label, BScreen::SetStyle, style.c_str());
+        }
           break;
 
         case 630: // config
@@ -1830,7 +1836,7 @@ bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) {
             if (submenufile) {
               struct stat buf;
               if (fstat(fileno(submenufile), &buf) ||
-                  (! S_ISREG(buf.st_mode))) {
+                  ! S_ISREG(buf.st_mode)) {
                 fprintf(stderr,
                         i18n(ScreenSet, ScreenINCLUDEErrorReg,
                              "BScreen::parseMenuFile: [include] error: "
@@ -1912,7 +1918,7 @@ bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) {
           {
             bool newmenu = ((key == 1113) ? True : False);
 
-            if ((! *label) || ((! *command) && newmenu)) {
+            if (! *label || (! *command && newmenu)) {
               fprintf(stderr,
                       i18n(ScreenSet, ScreenSTYLESDIRError,
                            "BScreen::parseMenuFile: [stylesdir/stylesmenu]"
@@ -1958,7 +1964,7 @@ bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) {
                   style += '/';
                   style += fname;
 
-                  if ((! stat(style.c_str(), &statbuf)) &&
+                  if (! stat(style.c_str(), &statbuf) &&
                       S_ISREG(statbuf.st_mode))
                     stylesmenu->insert(fname, BScreen::SetStyle, style);
                 }
index 5a6c322..c15f66c 100644 (file)
@@ -133,6 +133,17 @@ void Slit::addClient(Window w) {
     client->rect.setSize(64, 64);
   }
 
+  Atom *proto;
+  int num_return = 0;
+  if (XGetWMProtocols(display, client->window, &proto, &num_return)) {
+    for (int i = 0; i < num_return; ++i) {
+      if (proto[i] ==
+          blackbox->getXAtom()->getAtom(XAtom::blackbox_structure_messages)) {
+        screen->addNetizen(new Netizen(screen, client->window));
+      }
+    }
+  }
+
   XSetWindowBorderWidth(display, client->window, 0);
 
   XGrabServer(display);
@@ -466,12 +477,17 @@ void Slit::updateStrut(void) {
       case TopCenter:
       case TopLeft:
       case TopRight:
-        strut.top = getExposedHeight() + border_width;
+        strut.top = frame.rect.top() + getExposedHeight() + border_width;
         break;
       case BottomCenter:
       case BottomLeft:
       case BottomRight:
-        strut.bottom = getExposedHeight() + border_width;
+        int pos;
+        if (do_auto_hide)
+          pos = frame.y_hidden;
+        else
+          pos = frame.rect.y();
+        strut.bottom = (screen->getRect().bottom() - pos);
         break;
       case CenterLeft:
         strut.left = getExposedWidth() + border_width;
index d808344..3c49490 100644 (file)
@@ -26,6 +26,8 @@
 #endif // HAVE_CONFIG_H
 
 extern "C" {
+#include <X11/Xatom.h>
+
 #ifdef HAVE_STRING_H
 #include <string.h>
 #endif
@@ -48,11 +50,9 @@ extern "C" {
 #if defined(HAVE_PROCESS_H) && defined(__EMX__)
 #  include <process.h>
 #endif //   HAVE_PROCESS_H             __EMX__
-}
-
-#include <X11/Xatom.h>
 
 #include <assert.h>
+}
 
 #include <algorithm>
 
@@ -171,8 +171,8 @@ void bexec(const string& command, const string& displaystring) {
     assert(ret != -1);
     string cmd = "exec ";
     cmd += command;
-    execl("/bin/sh", "/bin/sh", "-c", cmd.c_str(), NULL);
-    exit(0);
+    ret = execl("/bin/sh", "/bin/sh", "-c", cmd.c_str(), NULL);
+    exit(ret);
   }
 #else //   __EMX__
   spawnlp(P_NOWAIT, "cmd.exe", "cmd.exe", "/c", command, NULL);
@@ -249,10 +249,8 @@ string itostring(unsigned long i) {
 
 
 string itostring(long i) {
-  if (i < 0) {
-    std::string tmp = itostring( (unsigned long) -i);
+  std::string tmp = itostring( (unsigned long) std::abs(i));
+  if (i < 0)
     tmp.insert(tmp.begin(), '-');
-    return tmp;
-  } else
-    return itostring( (unsigned long) i);
+  return tmp;
 }
index 905bd2d..48cfe4a 100644 (file)
@@ -38,9 +38,11 @@ extern "C" {
 #    include <stdio.h>
 #  endif // HAVE_STDIO_H
 #endif // DEBUG
-}
 
-#include <cstdlib>
+#ifdef HAVE_STDLIB_H
+   #include <stdlib.h>
+#endif // HAVE_STDLIB_H
+}
 
 #include "i18n.hh"
 #include "blackbox.hh"
@@ -55,9 +57,9 @@ extern "C" {
 #include "Window.hh"
 #include "Windowmenu.hh"
 #include "Workspace.hh"
-#include "Slit.hh"
 
 using std::string;
+using std::abs;
 
 // change this to change what modifier keys openbox uses for mouse bindings
 // for example: Mod1Mask | ControlMask
@@ -91,21 +93,11 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
     return;
   }
 
-  // set the eventmask early in the game so that we make sure we get
-  // all the events we are interested in
-  XSetWindowAttributes attrib_set;
-  attrib_set.event_mask = PropertyChangeMask | FocusChangeMask |
-                          StructureNotifyMask;
-  attrib_set.do_not_propagate_mask = ButtonPressMask | ButtonReleaseMask |
-                                     ButtonMotionMask;
-  XChangeWindowAttributes(blackbox->getXDisplay(), client.window,
-                          CWEventMask|CWDontPropagate, &attrib_set);
-
   // fetch client size and placement
   XWindowAttributes wattrib;
-  if ((! XGetWindowAttributes(blackbox->getXDisplay(),
-                              client.window, &wattrib)) ||
-      (! wattrib.screen) || wattrib.override_redirect) {
+  if (! XGetWindowAttributes(blackbox->getXDisplay(),
+                             client.window, &wattrib) ||
+      ! wattrib.screen || wattrib.override_redirect) {
 #ifdef    DEBUG
     fprintf(stderr,
             "BlackboxWindow::BlackboxWindow(): XGetWindowAttributes failed\n");
@@ -115,6 +107,21 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
     return;
   }
 
+#ifdef DEBUG
+  fprintf(stderr, "0x%lx: initial (%d, %d) w: %d, h: %d\n", client.window,
+          wattrib.x, wattrib.y, wattrib.width, wattrib.height);
+#endif // DEBUG
+
+  // set the eventmask early in the game so that we make sure we get
+  // all the events we are interested in
+  XSetWindowAttributes attrib_set;
+  attrib_set.event_mask = PropertyChangeMask | FocusChangeMask |
+                          StructureNotifyMask;
+  attrib_set.do_not_propagate_mask = ButtonPressMask | ButtonReleaseMask |
+                                     ButtonMotionMask;
+  XChangeWindowAttributes(blackbox->getXDisplay(), client.window,
+                          CWEventMask|CWDontPropagate, &attrib_set);
+
   flags.moving = flags.resizing = flags.shaded = flags.visible =
     flags.iconic = flags.focused = flags.stuck = flags.modal =
     flags.send_focus_message = flags.shaped = flags.skip_taskbar =
@@ -146,10 +153,12 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
                 Decor_Iconify | Decor_Maximize;
   functions = Func_Resize | Func_Move | Func_Iconify | Func_Maximize;
 
-  client.wm_hint_flags = client.normal_hint_flags = 0;
+  client.normal_hint_flags = 0;
   client.window_group = None;
   client.transient_for = 0;
 
+  current_state = NormalState;
+
   /*
     get the initial size and location of client window (relative to the
     _root window_). This position is the reference point used with the
@@ -175,11 +184,11 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
   getWMHints();
   getWMNormalHints();
 
-  if (client.initial_state == WithdrawnState) {
-    screen->getSlit()->addClient(client.window);
-    delete this;
-    return;
-  }
+#ifdef DEBUG
+  fprintf(stderr, "0x%lx: after hints (%d, %d) w: %d, h: %d\n", client.window,
+          client.rect.x(), client.rect.y(),
+          client.rect.width(), client.rect.height());
+#endif // DEBUG
 
   frame.window = createToplevelWindow();
   frame.plate = createChildWindow(frame.window);
@@ -232,6 +241,14 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
   }
   upsize();
 
+#ifdef DFEBUG
+  fprintf(stderr, "0x%lx: sizes reflect the frame from now on\n",
+          client.window);
+  fprintf(stderr, "0x%lx: after upsize (%d, %d) w: %d, h: %d\n", client.window,
+          frame.rect.x(), frame.rect.y(),
+          frame.rect.width(), frame.rect.height());
+#endif // DEBUG
+
   setAllowedActions();
 
   bool place_window = True;
@@ -243,6 +260,13 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
       place_window = False;
   }
 
+#ifdef DEBUG
+  fprintf(stderr, "0x%lx: after gravity (%d, %d) w: %d, h: %d\n",
+          client.window,
+          frame.rect.x(), frame.rect.y(),
+          frame.rect.width(), frame.rect.height());
+#endif // DEBUG
+
   // add the window's strut. note this is done *after* placing the window.
   screen->addStrut(&client.strut);
   updateStrut();
@@ -272,16 +296,20 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
     // place the window
     configure(frame.rect.x(), frame.rect.y(),
               frame.rect.width(), frame.rect.height());
+
+#ifdef DEBUG
+    fprintf(stderr, "0x%lx: after configure (%d, %d) w: %d, h: %d\n",
+            client.window,
+            frame.rect.x(), frame.rect.y(),
+            frame.rect.width(), frame.rect.height());
+#endif // DEBUG
   }
 
   // preserve the window's initial state on first map, and its current state
   // across a restart
-  if (! getState()) {
-    if (client.wm_hint_flags & StateHint)
-      current_state = client.initial_state;
-    else
-      current_state = NormalState;
-  }
+  unsigned long initial_state = current_state;
+  if (! getState())
+    current_state = initial_state;
 
   // get sticky state from our parent window if we've got one
   if (isTransient() && client.transient_for != (BlackboxWindow *) ~0ul &&
@@ -290,14 +318,14 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
 
   if (flags.shaded) {
     flags.shaded = False;
-    unsigned long orig_state = current_state;
+    initial_state = current_state;
     shade();
 
     /*
       At this point in the life of a window, current_state should only be set
       to IconicState if the window was an *icon*, not if it was shaded.
     */
-    if (orig_state != IconicState)
+    if (initial_state != IconicState)
       current_state = NormalState;
   }
 
@@ -306,9 +334,8 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
     stick();
   }
 
-  if (flags.maximized && (functions & Func_Maximize)) {
+  if (flags.maximized && (functions & Func_Maximize))
     remaximize();
-  }
 
   /*
     When the window is mapped (and also when its attributes are restored), the
@@ -327,6 +354,13 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
   XMapSubwindows(blackbox->getXDisplay(), frame.window);
 
   redrawWindowFrame();
+
+#ifdef DEBUG
+  fprintf(stderr, "0x%lx: end of constructor (%d, %d) w: %d, h: %d\n",
+          client.window,
+          frame.rect.x(), frame.rect.y(),
+          frame.rect.width(), frame.rect.height());
+#endif // DEBUG
 }
 
 
@@ -849,7 +883,7 @@ void BlackboxWindow::grabButtons(void) {
 
 
 void BlackboxWindow::ungrabButtons(void) {
-  if ((! screen->isSloppyFocus()) || screen->doClickRaise())
+  if (! screen->isSloppyFocus() || screen->doClickRaise())
     blackbox->ungrabButton(Button1, 0, frame.plate);
 
   blackbox->ungrabButton(Button1, ModMask, frame.window);
@@ -1033,10 +1067,9 @@ void BlackboxWindow::getWMProtocols(void) {
       if (proto[i] == xatom->getAtom(XAtom::wm_delete_window)) {
         decorations |= Decor_Close;
         functions |= Func_Close;
-      } else if (proto[i] == xatom->getAtom(XAtom::wm_take_focus))
+      } else if (proto[i] == xatom->getAtom(XAtom::wm_take_focus)) {
         flags.send_focus_message = True;
-      else if (proto[i] == xatom->getAtom(XAtom::blackbox_structure_messages))
-        screen->addNetizen(new Netizen(screen, client.window));
+      }
     }
 
     XFree(proto);
@@ -1050,7 +1083,6 @@ void BlackboxWindow::getWMProtocols(void) {
  */
 void BlackboxWindow::getWMHints(void) {
   focus_mode = F_Passive;
-  client.initial_state = NormalState;
 
   // remove from current window group
   if (client.window_group) {
@@ -1077,7 +1109,7 @@ void BlackboxWindow::getWMHints(void) {
   }
 
   if (wmhint->flags & StateHint)
-    client.initial_state = wmhint->initial_state;
+    current_state = wmhint->initial_state;
 
   if (wmhint->flags & WindowGroupHint) {
     client.window_group = wmhint->window_group;
@@ -1092,7 +1124,6 @@ void BlackboxWindow::getWMHints(void) {
       group->addWindow(this);
   }
 
-  client.wm_hint_flags = wmhint->flags;
   XFree(wmhint);
 }
 
@@ -1332,17 +1363,12 @@ bool BlackboxWindow::getBlackboxHints(void) {
   if (blackbox_hint->flags & AttribDecoration) {
     switch (blackbox_hint->decoration) {
     case DecorNone:
-      // clear all decorations except close
-      decorations &= Decor_Close;
-      // clear all functions except close
-      functions &= Func_Close;
-
+      decorations = 0;
       break;
 
     case DecorTiny:
       decorations |= Decor_Titlebar | Decor_Iconify;
       decorations &= ~(Decor_Border | Decor_Handle | Decor_Maximize);
-      functions |= Func_Move | Func_Iconify;
       functions &= ~(Func_Resize | Func_Maximize);
 
       break;
@@ -1350,7 +1376,6 @@ bool BlackboxWindow::getBlackboxHints(void) {
     case DecorTool:
       decorations |= Decor_Titlebar;
       decorations &= ~(Decor_Iconify | Decor_Border | Decor_Handle);
-      functions |= Func_Move;
       functions &= ~(Func_Resize | Func_Maximize | Func_Iconify);
 
       break;
@@ -1359,8 +1384,6 @@ bool BlackboxWindow::getBlackboxHints(void) {
     default:
       decorations |= Decor_Titlebar | Decor_Border | Decor_Handle |
                      Decor_Iconify | Decor_Maximize;
-      functions |= Func_Resize | Func_Move | Func_Iconify | Func_Maximize;
-
       break;
     }
 
@@ -1376,8 +1399,7 @@ bool BlackboxWindow::getBlackboxHints(void) {
 void BlackboxWindow::getTransientInfo(void) {
   if (client.transient_for &&
       client.transient_for != (BlackboxWindow *) ~0ul) {
-    // the transient for hint was removed, so we need to tell our
-    // previous transient_for that we are going away
+    // reset transient_for in preparation of looking for a new owner
     client.transient_for->client.transientList.remove(this);
   }
 
@@ -1548,15 +1570,7 @@ bool BlackboxWindow::setInputFocus(void) {
   assert(! flags.iconic &&
          (flags.stuck ||  // window must be on the current workspace or sticky
           blackbox_attrib.workspace == screen->getCurrentWorkspaceID()));
-#if 0
-  // if the window is not visible, mark the window as wanting focus rather
-  // than give it focus.
-  if (! flags.visible) {
-    Workspace *wkspc = screen->getWorkspace(blackbox_attrib.workspace);
-    wkspc->setLastFocusedWindow(this);
-    return True;
-  }
-#endif
+
   /*
      We only do this check for normal windows and dialogs because other windows
      do this on purpose, such as kde's kicker, and we don't want to go moving
@@ -1855,6 +1869,27 @@ void BlackboxWindow::maximize(unsigned int button) {
 
 // re-maximizes the window to take into account availableArea changes
 void BlackboxWindow::remaximize(void) {
+  if (flags.shaded) {
+    // we only update the window's attributes otherwise we lose the shade bit
+    switch(flags.maximized) {
+    case 1:
+      blackbox_attrib.flags |= AttribMaxHoriz | AttribMaxVert;
+      blackbox_attrib.attrib |= AttribMaxHoriz | AttribMaxVert;
+      break;
+
+    case 2:
+      blackbox_attrib.flags |= AttribMaxVert;
+      blackbox_attrib.attrib |= AttribMaxVert;
+      break;
+
+    case 3:
+      blackbox_attrib.flags |= AttribMaxHoriz;
+      blackbox_attrib.attrib |= AttribMaxHoriz;
+      break;
+    }
+    return;
+  }
+
   // save the original dimensions because maximize will wipe them out
   int premax_x = blackbox_attrib.premax_x,
     premax_y = blackbox_attrib.premax_y,
@@ -2236,6 +2271,56 @@ void BlackboxWindow::restoreAttributes(void) {
     blackbox_attrib.premax_h = h;
   }
 
+  if (net->flags & AttribDecoration) {
+    switch (net->decoration) {
+    case DecorNone:
+      decorations = 0;
+
+      break;
+
+    default:
+    case DecorNormal:
+      decorations |= Decor_Titlebar | Decor_Handle | Decor_Border |
+        Decor_Iconify | Decor_Maximize;
+
+      break;
+
+    case DecorTiny:
+      decorations |= Decor_Titlebar | Decor_Iconify;
+      decorations &= ~(Decor_Border | Decor_Handle | Decor_Maximize);
+
+      break;
+
+    case DecorTool:
+      decorations |= Decor_Titlebar;
+      decorations &= ~(Decor_Iconify | Decor_Border | Decor_Handle);
+
+      break;
+    }
+
+    // sanity check the new decor
+    if (! (functions & Func_Resize) || isTransient())
+      decorations &= ~(Decor_Maximize | Decor_Handle);
+    if (! (functions & Func_Maximize))
+      decorations &= ~Decor_Maximize;
+
+    if (decorations & Decor_Titlebar) {
+      if (functions & Func_Close)   // close button is controlled by function
+        decorations |= Decor_Close; // not decor type
+    } else { 
+      if (flags.shaded) // we can not be shaded if we lack a titlebar
+        shade();
+    }
+
+    if (flags.visible && frame.window) {
+      XMapSubwindows(blackbox->getXDisplay(), frame.window);
+      XMapWindow(blackbox->getXDisplay(), frame.window);
+    }
+
+    reconfigure();
+    setState(current_state);
+  }
+
   // with the state set it will then be the map event's job to read the
   // window's state and behave accordingly
 
@@ -2531,6 +2616,12 @@ void BlackboxWindow::mapRequestEvent(const XMapRequestEvent *re) {
   case InactiveState:
   case ZoomState:
   default:
+#ifdef DEBUG
+    fprintf(stderr, "0x%lx: just before show (%d, %d) w: %d, h: %d\n",
+            client.window,
+            frame.rect.x(), frame.rect.y(),
+            frame.rect.width(), frame.rect.height());
+#endif // DEBUG
     show();
     screen->getWorkspace(blackbox_attrib.workspace)->raiseWindow(this);
     if (isNormal()) {
@@ -2624,6 +2715,12 @@ void BlackboxWindow::propertyNotifyEvent(const XPropertyEvent *pe) {
     }
 
     reconfigure();
+#ifdef DEBUG
+    fprintf(stderr, "0x%lx: transient hint (%d, %d) w: %d, h: %d\n",
+            client.window,
+            frame.rect.x(), frame.rect.y(),
+            frame.rect.width(), frame.rect.height());
+#endif
   }
     break;
 
@@ -2676,6 +2773,12 @@ void BlackboxWindow::propertyNotifyEvent(const XPropertyEvent *pe) {
     if (old_rect != frame.rect)
       reconfigure();
 
+#ifdef DEBUG
+    fprintf(stderr, "0x%lx: normal hint (%d, %d) w: %d, h: %d\n",
+            client.window,
+            frame.rect.x(), frame.rect.y(),
+            frame.rect.width(), frame.rect.height());
+#endif // DEBUG
     break;
   }
 
@@ -2735,11 +2838,19 @@ void BlackboxWindow::configureRequestEvent(const XConfigureRequestEvent *cr) {
       applyGravity(req);
     }
 
-    if (cr->value_mask & CWWidth)
+    if (cr->value_mask & CWWidth) {
       req.setWidth(cr->width + frame.margin.left + frame.margin.right);
+#ifdef DEBUG
+      fprintf(stderr, "0x%lx: new width - %d\n", client.window, cr->width);
+#endif // DEBUG
+    }
 
-    if (cr->value_mask & CWHeight)
+    if (cr->value_mask & CWHeight) {
       req.setHeight(cr->height + frame.margin.top + frame.margin.bottom);
+#ifdef DEBUG
+      fprintf(stderr, "0x%lx: new height - %d\n", client.window, cr->height);
+#endif // DEBUG
+    }
 
     configure(req.x(), req.y(), req.width(), req.height());
   }
@@ -2758,6 +2869,13 @@ void BlackboxWindow::configureRequestEvent(const XConfigureRequestEvent *cr) {
       break;
     }
   }
+
+#ifdef DEBUG
+  fprintf(stderr, "0x%lx: change request (%d, %d) w: %d, h: %d\n",
+          client.window,
+          frame.rect.x(), frame.rect.y(),
+          frame.rect.width(), frame.rect.height());
+#endif // DEBUG
 }
 
 
@@ -3030,10 +3148,10 @@ void BlackboxWindow::doMove(int x_root, int y_root) {
         bool snapped = False;
         
         const Rect &winrect = snapwin->frameRect();
-        int dleft = std::abs(wright - winrect.left()),
-           dright = std::abs(wleft - winrect.right()),
-             dtop = std::abs(wbottom - winrect.top()),
-          dbottom = std::abs(wtop - winrect.bottom());
+        int dleft = abs(wright - winrect.left()),
+           dright = abs(wleft - winrect.right()),
+             dtop = abs(wbottom - winrect.top()),
+          dbottom = abs(wtop - winrect.bottom());
 
         if (wtop >= (signed)(winrect.y() - frame.rect.height() + 1) &&
             wtop < (signed)(winrect.y() + winrect.height() - 1)) {
@@ -3052,8 +3170,8 @@ void BlackboxWindow::doMove(int x_root, int y_root) {
           if (snapped) {
             if (screen->getWindowCornerSnap()) {
               // try corner-snap to its other sides
-              dtop = std::abs(wtop - winrect.top());
-              dbottom = std::abs(wbottom - winrect.bottom());
+              dtop = abs(wtop - winrect.top());
+              dbottom = abs(wbottom - winrect.bottom());
               if (dtop < snap_distance && dtop <= dbottom)
                 dy = winrect.top();
               else if (dbottom < snap_distance)
@@ -3081,8 +3199,8 @@ void BlackboxWindow::doMove(int x_root, int y_root) {
           if (snapped) {
             if (screen->getWindowCornerSnap()) {
               // try corner-snap to its other sides
-              dleft = std::abs(wleft - winrect.left());
-              dright = std::abs(wright - winrect.right());
+              dleft = abs(wleft - winrect.left());
+              dright = abs(wright - winrect.right());
               if (dleft < snap_distance && dleft <= dright)
                 dx = winrect.left();
               else if (dright < snap_distance)
@@ -3128,10 +3246,10 @@ void BlackboxWindow::doMove(int x_root, int y_root) {
                                   frame.rect.height())))
         continue;
 
-      int dleft = std::abs(wleft - srect.left()),
-         dright = std::abs(wright - srect.right()),
-           dtop = std::abs(wtop - srect.top()),
-        dbottom = std::abs(wbottom - srect.bottom());
+      int dleft = abs(wleft - srect.left()),
+         dright = abs(wright - srect.right()),
+           dtop = abs(wtop - srect.top()),
+        dbottom = abs(wbottom - srect.bottom());
 
         // snap left?
         if (dleft < snap_distance && dleft <= dright)
@@ -3466,7 +3584,7 @@ void BlackboxWindow::timeout(void) {
 }
 
 
-void BlackboxWindow::changeBlackboxHints(BlackboxHints *net) {
+void BlackboxWindow::changeBlackboxHints(const BlackboxHints *net) {
   if ((net->flags & AttribShaded) &&
       ((blackbox_attrib.attrib & AttribShaded) !=
        (net->attrib & AttribShaded)))
@@ -3512,8 +3630,7 @@ void BlackboxWindow::changeBlackboxHints(BlackboxHints *net) {
   if (net->flags & AttribDecoration) {
     switch (net->decoration) {
     case DecorNone:
-      // clear all decorations except close
-      decorations &= Decor_Close;
+      decorations = 0;
 
       break;
 
index c024e5b..6cc5dee 100644 (file)
@@ -183,7 +183,7 @@ private:
       base_width, base_height,
       win_gravity;
 
-    unsigned long initial_state, normal_hint_flags, wm_hint_flags;
+    unsigned long initial_state, normal_hint_flags;
   } client;
 
   FunctionFlags functions;
@@ -390,7 +390,7 @@ public:
   void restore(bool remap);
   void configure(int dx, int dy, unsigned int dw, unsigned int dh);
   void setWorkspace(unsigned int n);
-  void changeBlackboxHints(BlackboxHints *net);
+  void changeBlackboxHints(const BlackboxHints *net);
   void restoreAttributes(void);
 
   void buttonPressEvent(const XButtonEvent *be);
index cdc7137..66a62e5 100644 (file)
@@ -282,16 +282,6 @@ void Blackbox::process_event(XEvent *e) {
   }
 
   case ConfigureRequest: {
-    // compress configure requests...
-    XEvent realevent;
-    unsigned int i = 0;
-    while(XCheckTypedWindowEvent(getXDisplay(), e->xconfigurerequest.window,
-                                 ConfigureRequest, &realevent)) {
-      i++;
-    }
-    if ( i > 0 )
-      e = &realevent;
-
     BlackboxWindow *win = (BlackboxWindow *) 0;
     Slit *slit = (Slit *) 0;
 
@@ -496,7 +486,7 @@ void Blackbox::process_event(XEvent *e) {
       if (win->getScreen()->isSloppyFocus() &&
           (! win->isFocused()) && (! no_focus) &&
           win->isNormal()) {  // don't focus non-normal windows with mouseover
-        if (((! sa.leave) || sa.inferior) && win->isVisible()) {
+        if ((! sa.leave || sa.inferior) && win->isVisible()) {
           if (win->setInputFocus())
             win->installColormap(True); // XXX: shouldnt we honour no install?
         }