dont snap windows to rects they arent in for the screen regions (xinerama) or strut/screenarea

This commit is contained in:
Dana Jansens 2002-07-22 07:31:07 +00:00
parent debe8a2f74
commit ccecab7915
3 changed files with 17 additions and 9 deletions

View file

@ -2075,9 +2075,12 @@ const Rect& BScreen::availableArea(void) const {
#ifdef XINERAMA #ifdef XINERAMA
RectList BScreen::allAvailableAreas(void) const { const RectList& BScreen::allAvailableAreas(void) const {
assert(isXineramaActive()); assert(isXineramaActive());
assert(xineramaUsableArea.size() > 0); 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; return xineramaUsableArea;
} }
#endif // XINERAMA #endif // XINERAMA

View file

@ -313,7 +313,7 @@ public:
// as then Xinerama will work correctly. // as then Xinerama will work correctly.
const Rect& availableArea(void) const; const Rect& availableArea(void) const;
#ifdef XINERAMA #ifdef XINERAMA
RectList allAvailableAreas(void) const; const RectList& allAvailableAreas(void) const;
#endif // XINERAMA #endif // XINERAMA
void updateAvailableArea(void); void updateAvailableArea(void);
void addStrut(Strut *strut); void addStrut(Strut *strut);

View file

@ -3039,11 +3039,11 @@ void BlackboxWindow::doMove(int x_root, int y_root) {
// snap to the strut (and screen boundaries for xinerama) // snap to the strut (and screen boundaries for xinerama)
#ifdef XINERAMA #ifdef XINERAMA
if (screen->isXineramaActive() && blackbox->doXineramaSnapping()) { if (screen->isXineramaActive() && blackbox->doXineramaSnapping())
RectList::iterator it, end = screen->allAvailableAreas().end(); snaplist.insert(snaplist.begin(),
for (it = screen->allAvailableAreas().begin(); it != end; ++it) screen->allAvailableAreas().begin(),
snaplist.push_back(*it); screen->allAvailableAreas().end());
} else else
#endif // XINERAMA #endif // XINERAMA
if (! screen->doFullMax()) if (! screen->doFullMax())
snaplist.push_back(screen->availableArea()); snaplist.push_back(screen->availableArea());
@ -3051,9 +3051,14 @@ void BlackboxWindow::doMove(int x_root, int y_root) {
// always snap to the screen edges // always snap to the screen edges
snaplist.push_back(screen->getRect()); 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) { 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()), int dleft = std::abs(wleft - srect.left()),
dright = std::abs(wright - srect.right()), dright = std::abs(wright - srect.right()),