[Dialog] Apply window type after changing flags
Changing flags might override the window type, ensure we set it back properly Differential Revision: https://phabricator.kde.org/D22569
This commit is contained in:
parent
b466a2a211
commit
67811e152a
@ -139,6 +139,7 @@ public:
|
|||||||
|
|
||||||
void setupWaylandIntegration();
|
void setupWaylandIntegration();
|
||||||
|
|
||||||
|
void applyType();
|
||||||
|
|
||||||
Dialog *q;
|
Dialog *q;
|
||||||
Plasma::Types::Location location;
|
Plasma::Types::Location location;
|
||||||
@ -721,6 +722,36 @@ void DialogPrivate::setupWaylandIntegration()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DialogPrivate::applyType()
|
||||||
|
{
|
||||||
|
if (type != Dialog::Normal) {
|
||||||
|
KWindowSystem::setType(q->winId(), static_cast<NET::WindowType>(type));
|
||||||
|
} else {
|
||||||
|
q->setFlags(Qt::FramelessWindowHint | q->flags());
|
||||||
|
}
|
||||||
|
//an OSD can't be a Dialog, as qt xcb would attempt to set a transient parent for it
|
||||||
|
//see bug 370433
|
||||||
|
if (type == Dialog::OnScreenDisplay) {
|
||||||
|
q->setFlags((q->flags() & ~Qt::Dialog) | Qt::Window);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (backgroundHints == Dialog::NoBackground) {
|
||||||
|
frameSvgItem->setImagePath(QString());
|
||||||
|
} else {
|
||||||
|
if (type == Dialog::Tooltip) {
|
||||||
|
frameSvgItem->setImagePath(QStringLiteral("widgets/tooltip"));
|
||||||
|
} else {
|
||||||
|
frameSvgItem->setImagePath(QStringLiteral("dialogs/background"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == Dialog::Dock || type == Dialog::Notification || type == Dialog::OnScreenDisplay || type == Dialog::CriticalNotification) {
|
||||||
|
KWindowSystem::setOnAllDesktops(q->winId(), true);
|
||||||
|
} else {
|
||||||
|
KWindowSystem::setOnAllDesktops(q->winId(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Dialog::Dialog(QQuickItem *parent)
|
Dialog::Dialog(QQuickItem *parent)
|
||||||
: QQuickWindow(parent ? parent->window() : nullptr),
|
: QQuickWindow(parent ? parent->window() : nullptr),
|
||||||
@ -1021,6 +1052,7 @@ QObject *Dialog::margins() const
|
|||||||
void Dialog::setFramelessFlags(Qt::WindowFlags flags)
|
void Dialog::setFramelessFlags(Qt::WindowFlags flags)
|
||||||
{
|
{
|
||||||
setFlags(Qt::FramelessWindowHint | flags);
|
setFlags(Qt::FramelessWindowHint | flags);
|
||||||
|
d->applyType();
|
||||||
emit flagsChanged();
|
emit flagsChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1070,33 +1102,7 @@ void Dialog::setType(WindowType type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
d->type = type;
|
d->type = type;
|
||||||
if (d->type != Normal) {
|
d->applyType();
|
||||||
KWindowSystem::setType(winId(), (NET::WindowType)type);
|
|
||||||
} else {
|
|
||||||
setFlags(Qt::FramelessWindowHint | flags());
|
|
||||||
}
|
|
||||||
//an OSD can't be a Dialog, as qt xcb would attempt to set a transient parent for it
|
|
||||||
//see bug 370433
|
|
||||||
if (type == OnScreenDisplay) {
|
|
||||||
setFlags((flags() & ~Qt::Dialog) | Qt::Window);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d->backgroundHints == Dialog::NoBackground) {
|
|
||||||
d->frameSvgItem->setImagePath(QString());
|
|
||||||
} else {
|
|
||||||
if (d->type == Tooltip) {
|
|
||||||
d->frameSvgItem->setImagePath(QStringLiteral("widgets/tooltip"));
|
|
||||||
} else {
|
|
||||||
d->frameSvgItem->setImagePath(QStringLiteral("dialogs/background"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == Dock || type == Notification || type == OnScreenDisplay || type == CriticalNotification) {
|
|
||||||
KWindowSystem::setOnAllDesktops(winId(), true);
|
|
||||||
} else {
|
|
||||||
KWindowSystem::setOnAllDesktops(winId(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
emit typeChanged();
|
emit typeChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user