kwin/geometrytip.cpp
Martin Gräßlin 2076e458d3 Use Xcb::GeometryHints instead of XGetWMNormalHints
Xcb::GeometryHints is a convenient wrapper around the size hints
as described in ICCCM combined with the sanity checks so far applied
by KWin after reading the property.

Instead of accessing the members of the property structure, we are
now using the convenience methods.

During ::manage no further actions are triggered when reading the
size hints. Only when they are read later on the previous checks
are applied. During ::manage they can be ignored as it had a dedicated
isManaged check.

The method ::resizeWithCheck got a new argument of type xcb_gravity_t
which defaults to 0. This is needed from ::configureRequest which so
far temporarily changed the xSizeHints structure. By passing as an
argument this is no longer needed.

REVIEW: 122185
2015-01-27 12:48:03 +01:00

67 lines
2 KiB
C++

/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (c) 2003, Karol Szwed <kszwed@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#include "geometrytip.h"
namespace KWin
{
GeometryTip::GeometryTip(const Xcb::GeometryHints* xSizeHints):
QLabel(0)
{
setObjectName(QLatin1String("kwingeometry"));
setMargin(1);
setIndent(0);
setLineWidth(1);
setFrameStyle(QFrame::Raised | QFrame::StyledPanel);
setAlignment(Qt::AlignCenter | Qt::AlignTop);
setWindowFlags(Qt::X11BypassWindowManagerHint);
sizeHints = xSizeHints;
}
GeometryTip::~GeometryTip()
{
}
void GeometryTip::setGeometry(const QRect& geom)
{
int w = geom.width();
int h = geom.height();
if (sizeHints) {
if (sizeHints->hasResizeIncrements()) {
w = (w - sizeHints->baseSize().width()) / sizeHints->resizeIncrements().width();
h = (h - sizeHints->baseSize().height()) / sizeHints->resizeIncrements().height();
}
}
h = qMax(h, 0); // in case of isShade() and PBaseSize
QString pos;
pos.sprintf("%+d,%+d<br>(<b>%d&nbsp;x&nbsp;%d</b>)",
geom.x(), geom.y(), w, h);
setText(pos);
adjustSize();
move(geom.x() + ((geom.width() - width()) / 2),
geom.y() + ((geom.height() - height()) / 2));
}
} // namespace
#include "geometrytip.moc"