[kdecoration] Decoration::client returns a QWeakPointer

In aurorae a wrapper property is added.
This commit is contained in:
Martin Gräßlin 2014-11-28 16:28:39 +01:00
parent d1bf38e92c
commit 6bdd0e96f6
4 changed files with 20 additions and 11 deletions

View file

@ -283,7 +283,7 @@ void Decoration::init()
visualParent.value<QQuickItem*>()->setProperty("drawBackground", false);
} else {
// we need a QQuickWindow till we depend on Qt 5.4
m_decorationWindow.reset(QWindow::fromWinId(client()->decorationId()));
m_decorationWindow.reset(QWindow::fromWinId(client().data()->decorationId()));
m_view = new QQuickWindow(m_decorationWindow.data());
m_view->setFlags(Qt::WindowDoesNotAcceptFocus | Qt::WindowTransparentForInput);
m_view->setColor(Qt::transparent);
@ -332,7 +332,7 @@ void Decoration::init()
m_view->setVisible(true);
auto resizeWindow = [this] {
QRect rect(QPoint(0, 0), size());
if (m_padding && !client()->isMaximized()) {
if (m_padding && !client().data()->isMaximized()) {
rect = rect.adjusted(-m_padding->left(), -m_padding->top(), m_padding->right(), m_padding->bottom());
}
m_view->setGeometry(rect);
@ -372,7 +372,7 @@ void Decoration::setupBorders(QQuickItem *item)
void Decoration::updateBorders()
{
KWin::Borders *b = m_borders;
if (client()->isMaximized() && m_maximizedBorders) {
if (client().data()->isMaximized() && m_maximizedBorders) {
b = m_maximizedBorders;
}
if (!b) {
@ -392,7 +392,7 @@ void Decoration::paint(QPainter *painter, const QRect &repaintRegion)
QRectF r(QPointF(0, 0), m_buffer.size());
if (m_padding &&
(m_padding->left() > 0 || m_padding->top() > 0 || m_padding->right() > 0 || m_padding->bottom() > 0) &&
!client()->isMaximized()) {
!client().data()->isMaximized()) {
r = r.adjusted(m_padding->left(), m_padding->top(), -m_padding->right(), -m_padding->bottom());
KDecoration2::DecorationShadow *s = new KDecoration2::DecorationShadow(this);
s->setShadow(m_buffer);
@ -414,7 +414,7 @@ void Decoration::paint(QPainter *painter, const QRect &repaintRegion)
QMouseEvent Decoration::translatedMouseEvent(QMouseEvent *orig)
{
if (!m_padding || client()->isMaximized()) {
if (!m_padding || client().data()->isMaximized()) {
orig->setAccepted(false);
return *orig;
}
@ -498,6 +498,11 @@ void Decoration::installTitleItem(QQuickItem *item)
connect(item, &QQuickItem::yChanged, this, update);
}
KDecoration2::DecoratedClient *Decoration::clientPointer() const
{
return client().data();
}
ThemeFinder::ThemeFinder(QObject *parent, const QVariantList &args)
: QObject(parent)
{

View file

@ -40,6 +40,7 @@ namespace Aurorae
class Decoration : public KDecoration2::Decoration
{
Q_OBJECT
Q_PROPERTY(KDecoration2::DecoratedClient* client READ clientPointer CONSTANT)
public:
explicit Decoration(QObject *parent = nullptr, const QVariantList &args = QVariantList());
virtual ~Decoration();
@ -48,6 +49,8 @@ public:
Q_INVOKABLE QVariant readConfig(const QString &key, const QVariant &defaultValue = QVariant());
KDecoration2::DecoratedClient *clientPointer() const;
public Q_SLOTS:
void init() override;
void installTitleItem(QQuickItem *item);

View file

@ -185,10 +185,10 @@ void DecorationOptions::slotActiveChanged()
if (!m_decoration) {
return;
}
if (m_active == m_decoration->client()->isActive()) {
if (m_active == m_decoration->client().data()->isActive()) {
return;
}
m_active = m_decoration->client()->isActive();
m_active = m_decoration->client().data()->isActive();
emit colorsChanged();
emit fontChanged();
}

View file

@ -2213,15 +2213,16 @@ void Client::changeMaximize(bool vertical, bool horizontal, bool adjust)
}
// call into decoration update borders
if (m_decoration) {
if (m_decoration && m_decoration->client()) {
const auto c = m_decoration->client().data();
if ((max_mode & KDecorationDefines::MaximizeVertical) != (old_mode & KDecorationDefines::MaximizeVertical)) {
emit m_decoration->client()->maximizedVerticallyChanged(max_mode & KDecorationDefines::MaximizeVertical);
emit c->maximizedVerticallyChanged(max_mode & KDecorationDefines::MaximizeVertical);
}
if ((max_mode & KDecorationDefines::MaximizeHorizontal) != (old_mode & KDecorationDefines::MaximizeHorizontal)) {
emit m_decoration->client()->maximizedHorizontallyChanged(max_mode & KDecorationDefines::MaximizeHorizontal);
emit c->maximizedHorizontallyChanged(max_mode & KDecorationDefines::MaximizeHorizontal);
}
if ((max_mode == KDecorationDefines::MaximizeFull) != (old_mode == KDecorationDefines::MaximizeFull)) {
emit m_decoration->client()->maximizedChanged(max_mode & KDecorationDefines::MaximizeFull);
emit c->maximizedChanged(max_mode & KDecorationDefines::MaximizeFull);
}
}