]> Dogcows Code - chaz/openbox/blobdiff - src/Window.cc
change to match blackbox
[chaz/openbox] / src / Window.cc
index d33692449329e071432702f8407d03f3a5b6288a..417e15ac7f5d68615eb72e9f0bd2b5d4666ffe61 100644 (file)
@@ -254,11 +254,6 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
               frame.rect.width(), frame.rect.height());
   }
 
-  // get sticky state from our parent window if we've got one
-  if (isTransient() && client.transient_for != (BlackboxWindow *) ~0ul &&
-      client.transient_for->isStuck() != flags.stuck)
-    stick();
-
   if (flags.shaded) {
     flags.shaded = False;
     shade();
@@ -273,7 +268,6 @@ BlackboxWindow::BlackboxWindow(Blackbox *b, Window w, BScreen *s) {
 
 
 BlackboxWindow::~BlackboxWindow(void) {
-
 #ifdef    DEBUG
   fprintf(stderr, "BlackboxWindow::~BlackboxWindow: destroying 0x%lx\n",
           client.window);
@@ -1614,9 +1608,6 @@ void BlackboxWindow::shade(void) {
 }
 
 
-/*
- * (Un)Sticks a window and its relatives.
- */
 void BlackboxWindow::stick(void) {
   if (flags.stuck) {
     blackbox_attrib.flags ^= AttribOmnipresent;
@@ -1636,16 +1627,6 @@ void BlackboxWindow::stick(void) {
 
     setState(current_state);
   }
-  // go up the chain
-  if (isTransient() && client.transient_for != (BlackboxWindow *) ~0ul &&
-      client.transient_for->isStuck() != flags.stuck)
-    client.transient_for->stick();
-  // go down the chain
-  BlackboxWindowList::iterator it;
-  const BlackboxWindowList::iterator end = client.transientList.end();
-  for (it = client.transientList.begin(); it != end; ++it)
-    if ((*it)->isStuck() != flags.stuck)
-      (*it)->stick();
 }
 
 
@@ -2543,38 +2524,84 @@ void BlackboxWindow::motionNotifyEvent(XMotionEvent *me) {
         Workspace *w = screen->getWorkspace(getWorkspaceNumber());
         assert(w);
 
-        // try snap to another window
-        for (unsigned int i = 0, c = w->getCount(); i < c; ++i) {
-          BlackboxWindow *snapwin = w->getWindow(i);
-          if (snapwin == this)
-            continue;   // don't snap to self
-
-          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());
-
-          // snap left?
-          if (dleft < snap_distance && dleft <= dright) {
-            dx = winrect.left() - frame.rect.width();
-            continue;
-          }
-          // snap right?
-          else if (dright < snap_distance) {
-            dx = winrect.right() + 1;
-            continue;
-          }
-
-          // snap top?
-          if (dtop < snap_distance && dtop <= dbottom) {
-            dy = winrect.top() - frame.rect.height();
-            continue;
-          }
-          // snap bottom?
-          else if (dbottom < snap_distance) {
-            dy = winrect.bottom() + 1;
-            continue;
+        if (screen->getWindowToWindowSnap()) {
+          // try snap to another window
+          for (unsigned int i = 0, c = w->getCount(); i < c; ++i) {
+            BlackboxWindow *snapwin = w->getWindow(i);
+            if (snapwin == this)
+              continue;   // don't snap to self
+
+            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());
+
+            // snap top of other window?
+            if (dtop < snap_distance && dtop <= dbottom) {
+              dy = winrect.top() - frame.rect.height();
+
+              if (screen->getWindowCornerSnap()) {
+                // try corner-snap to its other sides
+                dleft = std::abs(wleft - winrect.left());
+                dright = std::abs(wright - winrect.right());
+                if (dleft < snap_distance && dleft <= dright)
+                  dx = winrect.left();
+                else if (dright < snap_distance)
+                  dx = winrect.right() - frame.rect.width() + 1;
+              }
+
+              continue;
+            }
+            // snap bottom of other window?
+            else if (dbottom < snap_distance) {
+              dy = winrect.bottom() + 1;
+
+              if (screen->getWindowCornerSnap()) {
+                // try corner-snap to its other sides
+                dleft = std::abs(wleft - winrect.left());
+                dright = std::abs(wright - winrect.right());
+                if (dleft < snap_distance && dleft <= dright)
+                  dx = winrect.left();
+                else if (dright < snap_distance)
+                  dx = winrect.right() - frame.rect.width() + 1;
+              }
+
+              continue;
+            }
+
+            // snap left of other window?
+            if (dleft < snap_distance && dleft <= dright) {
+              dx = winrect.left() - frame.rect.width();
+
+              if (screen->getWindowCornerSnap()) {
+                // try corner-snap to its other sides
+                dtop = std::abs(wtop - winrect.top());
+                dbottom = std::abs(wbottom - winrect.bottom());
+                if (dtop < snap_distance && dtop <= dbottom)
+                  dy = winrect.top();
+                else if (dbottom < snap_distance)
+                  dy = winrect.bottom() - frame.rect.height() + 1;
+              }
+
+              continue;
+            }
+            // snap right of other window?
+            else if (dright < snap_distance) {
+              dx = winrect.right() + 1;
+
+              if (screen->getWindowCornerSnap()) {
+                // try corner-snap to its other sides
+                dtop = std::abs(wtop - winrect.top());
+                dbottom = std::abs(wbottom - winrect.bottom());
+                if (dtop < snap_distance && dtop <= dbottom)
+                  dy = winrect.top();
+                else if (dbottom < snap_distance)
+                  dy = winrect.bottom() - frame.rect.height() + 1;
+              }
+
+              continue;
+            }
           }
         }
                 
This page took 0.025205 seconds and 4 git commands to generate.