dont snap windows to rects they arent in for the screen regions (xinerama) or strut/screenarea
This commit is contained in:
parent
debe8a2f74
commit
ccecab7915
3 changed files with 17 additions and 9 deletions
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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()),
|
||||||
|
|
Loading…
Reference in a new issue