Skip to content

Commit 3d3b694

Browse files
authored
Avoid calling XCB functions under non-XCB Linux platform (#405)
1 parent ad06241 commit 3d3b694

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

src/DockManager.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -547,9 +547,16 @@ bool CDockManager::eventFilter(QObject *obj, QEvent *e)
547547
// setWindowFlags(Qt::WindowStaysOnTopHint) will hide the window and thus requires a show call.
548548
// This then leads to flickering and a nasty endless loop (also buggy behaviour on Ubuntu).
549549
// So we just do it ourself.
550-
internal::xcb_update_prop(true, _window->window()->winId(),
551-
"_NET_WM_STATE", "_NET_WM_STATE_ABOVE", "_NET_WM_STATE_STAYS_ON_TOP");
552-
}
550+
if(QGuiApplication::platformName() == QLatin1String("xcb"))
551+
{
552+
internal::xcb_update_prop(true, _window->window()->winId(),
553+
"_NET_WM_STATE", "_NET_WM_STATE_ABOVE", "_NET_WM_STATE_STAYS_ON_TOP");
554+
}
555+
else
556+
{
557+
_window->setWindowFlag(Qt::WindowStaysOnTopHint, true);
558+
}
559+
}
553560
}
554561
else if (e->type() == QEvent::WindowDeactivate)
555562
{
@@ -559,8 +566,16 @@ bool CDockManager::eventFilter(QObject *obj, QEvent *e)
559566
{
560567
continue;
561568
}
562-
internal::xcb_update_prop(false, _window->window()->winId(),
563-
"_NET_WM_STATE", "_NET_WM_STATE_ABOVE", "_NET_WM_STATE_STAYS_ON_TOP");
569+
570+
if(QGuiApplication::platformName() == QLatin1String("xcb"))
571+
{
572+
internal::xcb_update_prop(false, _window->window()->winId(),
573+
"_NET_WM_STATE", "_NET_WM_STATE_ABOVE", "_NET_WM_STATE_STAYS_ON_TOP");
574+
}
575+
else
576+
{
577+
_window->setWindowFlag(Qt::WindowStaysOnTopHint, false);
578+
}
564579
_window->raise();
565580
}
566581
}

0 commit comments

Comments
 (0)