SVN commit 1118457 by mart: snap with real center M +24 -23 internaltoolbox.cpp --- trunk/KDE/kdelibs/plasma/private/internaltoolbox.cpp #1118456:1118457 @@ -304,34 +304,35 @@ int distanceToTop = newPos.y() - d->dragStartRelative.y(); int distanceToBottom = areaHeight - h - distanceToTop; - int distancetoHorizontalMiddle = qAbs(newPos.x() - areaWidth/2); - int distancetoVerticalMiddle = qAbs(newPos.y() - areaHeight/2); + int distancetoHorizontalMiddle = qAbs((newPos.x() + boundingRect().size().width()/2) - areaWidth/2 - d->dragStartRelative.x()); + int distancetoVerticalMiddle = qAbs((newPos.y() + boundingRect().size().height()/2) - areaHeight/2 - d->dragStartRelative.y()); - // decide which border is the nearest - if (distanceToLeft < distanceToTop && distanceToLeft < distanceToRight && - distanceToLeft < distanceToBottom ) { - x = 0; - y = (newPos.y() - d->dragStartRelative.y()); - } else if (distanceToRight < distanceToTop && distanceToRight < distanceToLeft && - distanceToRight < distanceToBottom) { - x = areaWidth - w; - y = (newPos.y() - d->dragStartRelative.y()); - } else if (distanceToTop < distanceToLeft && distanceToTop < distanceToRight && - distanceToTop < distanceToBottom ) { - y = 0; - x = (newPos.x() - d->dragStartRelative.x()); - } else if (distanceToBottom < distanceToLeft && distanceToBottom < distanceToRight && - distanceToBottom < distanceToTop) { - y = areaHeight - h; - x = (newPos.x() - d->dragStartRelative.x()); - } - if (distancetoHorizontalMiddle < 10) { - x = areaWidth/2 - d->dragStartRelative.x(); + x = areaWidth/2 - boundingRect().size().width()/2; } else if (distancetoVerticalMiddle < 10) { - y = areaHeight/2 - d->dragStartRelative.y(); + y = areaHeight/2 - boundingRect().size().height()/2; + } else { + // decide which border is the nearest + if (distanceToLeft < distanceToTop && distanceToLeft < distanceToRight && + distanceToLeft < distanceToBottom ) { + x = 0; + y = (newPos.y() - d->dragStartRelative.y()); + } else if (distanceToRight < distanceToTop && distanceToRight < distanceToLeft && + distanceToRight < distanceToBottom) { + x = areaWidth - w; + y = (newPos.y() - d->dragStartRelative.y()); + } else if (distanceToTop < distanceToLeft && distanceToTop < distanceToRight && + distanceToTop < distanceToBottom ) { + y = 0; + x = (newPos.x() - d->dragStartRelative.x()); + } else if (distanceToBottom < distanceToLeft && distanceToBottom < distanceToRight && + distanceToBottom < distanceToTop) { + y = areaHeight - h; + x = (newPos.x() - d->dragStartRelative.x()); + } } + x = qBound(0, x, areaWidth - w); y = qBound(0, y, areaHeight - h);