Do not add dialog to DialogShadows before it became visible at least once

Calling DialogShadows::self()->addWindow(...) will create the low level window.
If this is called before the property windowFlags is evaluated the window flag
X11BypassWindowManagerHint has no effect as that one must be present when the
window is created through the low level xcb call.

This was breaking declarative KWin scripts as KWin's windows need to have the
X11BypassWindowManagerHint.

REVIEW: 113700
This commit is contained in:
Martin Gräßlin 2013-11-07 10:33:56 +01:00
parent 44a27ca40a
commit 9e32090b50

View File

@ -68,7 +68,6 @@ DialogProxy::DialogProxy(QQuickItem *parent)
m_frameSvgItem = new Plasma::FrameSvgItem(contentItem()); m_frameSvgItem = new Plasma::FrameSvgItem(contentItem());
m_frameSvgItem->setImagePath("dialogs/background"); m_frameSvgItem->setImagePath("dialogs/background");
//m_frameSvgItem->setImagePath("widgets/background"); // larger borders, for testing those //m_frameSvgItem->setImagePath("widgets/background"); // larger borders, for testing those
DialogShadows::self()->addWindow(this, m_frameSvgItem->enabledBorders());
} }
DialogProxy::~DialogProxy() DialogProxy::~DialogProxy()
@ -447,7 +446,9 @@ void DialogProxy::syncBorders()
borders = borders & ~Plasma::FrameSvg::BottomBorder; borders = borders & ~Plasma::FrameSvg::BottomBorder;
} }
m_frameSvgItem->setEnabledBorders((Plasma::FrameSvg::EnabledBorder)borders); m_frameSvgItem->setEnabledBorders((Plasma::FrameSvg::EnabledBorder)borders);
if (isVisible()) {
DialogShadows::self()->addWindow(this, m_frameSvgItem->enabledBorders()); DialogShadows::self()->addWindow(this, m_frameSvgItem->enabledBorders());
}
//syncToMainItemSize(); //syncToMainItemSize();
} }