]> Dogcows Code - chaz/openbox/blobdiff - src/Window.cc
epist + multihead == <drool>
[chaz/openbox] / src / Window.cc
index 9de8b05291b9ba351fb8e8bec9c3bda3dd7bef60..6131ec4917b21524ac73a5c1635aa40ed70a5e3e 100644 (file)
@@ -59,6 +59,11 @@ extern "C" {
 
 using std::string;
 
+// change this to change what modifier keys openbox uses for mouse bindings
+// for example: Mod1Mask | ControlMask
+//          or: ControlMask| ShiftMask
+const unsigned int ModMask = Mod1Mask;
+
 /*
  * Initializes the class with default values/the window's set initial values.
  */
@@ -826,17 +831,17 @@ void BlackboxWindow::grabButtons(void) {
                          screen->allowScrollLock());
   
   if (functions & Func_Move)
-    blackbox->grabButton(Button1, Mod1Mask, frame.window, True,
+    blackbox->grabButton(Button1, ModMask, frame.window, True,
                          ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
                          GrabModeAsync, frame.window, None,
                          screen->allowScrollLock());
   if (functions & Func_Resize)
-    blackbox->grabButton(Button3, Mod1Mask, frame.window, True,
+    blackbox->grabButton(Button3, ModMask, frame.window, True,
                          ButtonReleaseMask | ButtonMotionMask, GrabModeAsync,
                          GrabModeAsync, frame.window, None,
                          screen->allowScrollLock());
   // alt+middle lowers the window
-  blackbox->grabButton(Button2, Mod1Mask, frame.window, True,
+  blackbox->grabButton(Button2, ModMask, frame.window, True,
                        ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
                        frame.window, None,
                        screen->allowScrollLock());
@@ -847,9 +852,9 @@ void BlackboxWindow::ungrabButtons(void) {
   if ((! screen->isSloppyFocus()) || screen->doClickRaise())
     blackbox->ungrabButton(Button1, 0, frame.plate);
 
-  blackbox->ungrabButton(Button1, Mod1Mask, frame.window);
-  blackbox->ungrabButton(Button2, Mod1Mask, frame.window);
-  blackbox->ungrabButton(Button3, Mod1Mask, frame.window);
+  blackbox->ungrabButton(Button1, ModMask, frame.window);
+  blackbox->ungrabButton(Button2, ModMask, frame.window);
+  blackbox->ungrabButton(Button3, ModMask, frame.window);
 }
 
 
@@ -1805,7 +1810,7 @@ void BlackboxWindow::maximize(unsigned int button) {
 
     frame.changing = *it;
   } else
-#endif
+#endif // XINERAMA
   frame.changing = screen->availableArea();
 
   switch(button) {
@@ -2762,7 +2767,7 @@ void BlackboxWindow::buttonPressEvent(const XButtonEvent *be) {
 
   if (frame.maximize_button == be->window && be->button <= 3) {
     redrawMaximizeButton(True);
-  } else if (be->button == 1 || (be->button == 3 && be->state == Mod1Mask)) {
+  } else if (be->button == 1 || (be->button == 3 && be->state == ModMask)) {
     if (! flags.focused)
       setInputFocus();
 
@@ -2888,7 +2893,7 @@ void BlackboxWindow::buttonReleaseEvent(const XButtonEvent *re) {
   } else if (flags.resizing) {
     endResize();
   } else if (re->window == frame.window) {
-    if (re->button == 2 && re->state == Mod1Mask)
+    if (re->button == 2 && re->state == ModMask)
       XUngrabPointer(blackbox->getXDisplay(), CurrentTime);
   }
 }
@@ -2948,6 +2953,59 @@ void BlackboxWindow::doMove(int x_root, int y_root) {
   dx -= frame.border_w;
   dy -= frame.border_w;
 
+  if (screen->doWorkspaceWarping()) {
+    // workspace warping
+    bool warp = False;
+    unsigned int dest = screen->getCurrentWorkspaceID();
+    if (x_root <= 0) {
+      warp = True;
+
+      if (dest > 0) dest--;
+      else dest = screen->getNumberOfWorkspaces() - 1;
+
+    } else if (x_root >= screen->getRect().right()) {
+      warp = True;
+
+      if (dest < screen->getNumberOfWorkspaces() - 1) dest++;
+      else dest = 0;
+    }
+    if (warp) {
+      endMove();
+      bool focus = flags.focused; // had focus while moving?
+      if (! flags.stuck)
+        screen->reassociateWindow(this, dest, False);
+      screen->changeWorkspaceID(dest);
+      if (focus)
+        setInputFocus();
+
+      /*
+         If the XWarpPointer is done after the configure, we can end up
+         grabbing another window, so made sure you do it first.
+      */
+      int dest_x;
+      if (x_root <= 0) {
+        dest_x = screen->getRect().right() - 1;
+        XWarpPointer(blackbox->getXDisplay(), None, 
+                     screen->getRootWindow(), 0, 0, 0, 0,
+                     dest_x, y_root);
+
+        configure(dx + (screen->getRect().width() - 1), dy,
+                  frame.rect.width(), frame.rect.height());
+      } else {
+        dest_x = 0;
+        XWarpPointer(blackbox->getXDisplay(), None, 
+                     screen->getRootWindow(), 0, 0, 0, 0,
+                     dest_x, y_root);
+
+        configure(dx - (screen->getRect().width() - 1), dy,
+                  frame.rect.width(), frame.rect.height());
+      }
+
+      beginMove(dest_x, y_root);
+      return;
+    }
+  }
+
   const int snap_distance = screen->getEdgeSnapThreshold();
 
   if (snap_distance) {
@@ -3039,17 +3097,25 @@ void BlackboxWindow::doMove(int x_root, int y_root) {
 
     // snap to the strut (and screen boundaries for xinerama)
 #ifdef    XINERAMA
-    if (screen->isXineramaActive() && blackbox->doXineramaSnapping())
+    if (screen->isXineramaActive() && blackbox->doXineramaSnapping()) {
+      if (! screen->doFullMax())
+        snaplist.insert(snaplist.begin(),
+                        screen->allAvailableAreas().begin(),
+                        screen->allAvailableAreas().end());
+
+      // always snap to the screen edges
       snaplist.insert(snaplist.begin(),
-                      screen->allAvailableAreas().begin(),
-                      screen->allAvailableAreas().end());
-    else
+                      screen->getXineramaAreas().begin(),
+                      screen->getXineramaAreas().end());
+    else
 #endif // XINERAMA
+    {
       if (! screen->doFullMax())
         snaplist.push_back(screen->availableArea());
-    
-    // always snap to the screen edges
-    snaplist.push_back(screen->getRect());
+
+      // always snap to the screen edges
+      snaplist.push_back(screen->getRect());
+    }
 
     RectList::const_iterator it, end = snaplist.end();
     for (it = snaplist.begin(); it != end; ++it) {
@@ -3307,7 +3373,7 @@ void BlackboxWindow::motionNotifyEvent(const XMotionEvent *me) {
     } else if ((functions & Func_Resize) &&
                (me->state & Button1Mask && (me->window == frame.right_grip ||
                                             me->window == frame.left_grip)) ||
-               (me->state & Button3Mask && me->state & Mod1Mask &&
+               (me->state & Button3Mask && me->state & ModMask &&
                 me->window == frame.window)) {
       unsigned int zones = screen->getResizeZones();
       Corner corner;
This page took 0.02477 seconds and 4 git commands to generate.