From ccecab79152aaf511714b49f8211262475a20a90 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 22 Jul 2002 07:31:07 +0000 Subject: [PATCH] dont snap windows to rects they arent in for the screen regions (xinerama) or strut/screenarea --- src/Screen.cc | 5 ++++- src/Screen.hh | 2 +- src/Window.cc | 19 ++++++++++++------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/Screen.cc b/src/Screen.cc index 46b15b22..ef7fb6a5 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -2075,9 +2075,12 @@ const Rect& BScreen::availableArea(void) const { #ifdef XINERAMA -RectList BScreen::allAvailableAreas(void) const { +const RectList& BScreen::allAvailableAreas(void) const { assert(isXineramaActive()); assert(xineramaUsableArea.size() > 0); + fprintf(stderr, "1found x %d y %d w %d h %d\n", + xineramaUsableArea[0].x(), xineramaUsableArea[0].y(), + xineramaUsableArea[0].width(), xineramaUsableArea[0].height()); return xineramaUsableArea; } #endif // XINERAMA diff --git a/src/Screen.hh b/src/Screen.hh index 87d11c68..a3620553 100644 --- a/src/Screen.hh +++ b/src/Screen.hh @@ -313,7 +313,7 @@ public: // as then Xinerama will work correctly. const Rect& availableArea(void) const; #ifdef XINERAMA - RectList allAvailableAreas(void) const; + const RectList& allAvailableAreas(void) const; #endif // XINERAMA void updateAvailableArea(void); void addStrut(Strut *strut); diff --git a/src/Window.cc b/src/Window.cc index a5fe7b4b..9de8b052 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -3039,11 +3039,11 @@ 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()) { - RectList::iterator it, end = screen->allAvailableAreas().end(); - for (it = screen->allAvailableAreas().begin(); it != end; ++it) - snaplist.push_back(*it); - } else + if (screen->isXineramaActive() && blackbox->doXineramaSnapping()) + snaplist.insert(snaplist.begin(), + screen->allAvailableAreas().begin(), + screen->allAvailableAreas().end()); + else #endif // XINERAMA if (! screen->doFullMax()) snaplist.push_back(screen->availableArea()); @@ -3051,9 +3051,14 @@ void BlackboxWindow::doMove(int x_root, int y_root) { // always snap to the screen edges snaplist.push_back(screen->getRect()); - RectList::iterator it, end = snaplist.end(); + RectList::const_iterator it, end = snaplist.end(); for (it = snaplist.begin(); it != end; ++it) { - Rect &srect = *it; + const Rect &srect = *it; + + // if we're not in the rectangle then don't snap to it. + if (! srect.intersects(Rect(wleft, wtop, frame.rect.width(), + frame.rect.height()))) + continue; int dleft = std::abs(wleft - srect.left()), dright = std::abs(wright - srect.right()), -- 2.39.2