diff --git a/ui/delayed_activation.cpp b/ui/delayed_activation.cpp index c20d18d..0b66b05 100644 --- a/ui/delayed_activation.cpp +++ b/ui/delayed_activation.cpp @@ -11,9 +11,12 @@ #include "base/invoke_queued.h" #include "base/platform/base_platform_info.h" +#ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION +#include "base/platform/linux/base_linux_xcb_utilities.h" +#endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION + #include -#include -#include +#include namespace Ui { namespace { @@ -43,15 +46,11 @@ void ActivateWindowDelayed(not_null widget) { return; } const auto focusAncestor = [&] { - const auto focusWindow = QGuiApplication::focusWindow(); - if (!focusWindow || !widget->window()) { + const auto focusWidget = QApplication::focusWidget(); + if (!focusWidget || !widget->window()) { return false; } - const auto handle = widget->window()->windowHandle(); - if (!handle) { - return false; - } - return handle->isAncestorOf(focusWindow); + return widget->window()->isAncestorOf(focusWidget); }(); crl::on_main(Window, [=] { const auto widget = base::take(Window); @@ -62,21 +61,17 @@ void ActivateWindowDelayed(not_null widget) { if (!window || window->isHidden()) { return; } - const auto guard = [&] { - if (!::Platform::IsX11() || !focusAncestor) { - return gsl::finally(Fn([] {})); - } - const auto handle = window->windowHandle(); - if (handle->flags() & Qt::X11BypassWindowManagerHint) { - return gsl::finally(Fn([] {})); - } - handle->setFlag(Qt::X11BypassWindowManagerHint); - return gsl::finally(Fn([handle] { - handle->setFlag(Qt::X11BypassWindowManagerHint, false); - })); - }(); window->raise(); window->activateWindow(); +#ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION + if (::Platform::IsX11() && focusAncestor) { + xcb_set_input_focus( + base::Platform::XCB::GetConnectionFromQt(), + XCB_INPUT_FOCUS_PARENT, + window->winId(), + XCB_CURRENT_TIME); + } +#endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION }); }