Fix child native window focus.

This commit is contained in:
John Preston 2024-07-19 17:42:08 +02:00
parent fd982b90db
commit c70866a995
2 changed files with 14 additions and 14 deletions

View file

@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/platform/base_platform_info.h"
#include "base/invoke_queued.h"
#include "base/qt_signal_producer.h"
#include "base/qthelp_url.h"
#include "iv/iv_data.h"
#include "lang/lang_keys.h"
@ -35,6 +36,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <QtCore/QJsonObject>
#include <QtCore/QJsonValue>
#include <QtCore/QFile>
#include <QtGui/QGuiApplication>
#include <QtGui/QPainter>
#include <QtGui/QWindow>
#include <charconv>
@ -280,14 +282,13 @@ void Controller::createWindow() {
_window = std::make_unique<Ui::RpWindow>();
const auto window = _window.get();
window->windowActiveValue(
) | rpl::map([=] {
base::qt_signal_producer(
qApp,
&QGuiApplication::focusWindowChanged
) | rpl::filter([=](QWindow *focused) {
const auto handle = window->window()->windowHandle();
return (_shareFocus || _webview) && handle && handle->isActive();
}) | rpl::distinct_until_changed(
) | rpl::filter(
rpl::mappers::_1
) | rpl::start_with_next([=] {
return _webview && handle && (focused == handle);
}) | rpl::start_with_next([=] {
setInnerFocus();
}, window->lifetime());

View file

@ -741,17 +741,16 @@ postEvent: function(eventType, eventData) {
setupProgressGeometry();
_widget->windowActiveValue(
) | rpl::map([=] {
base::qt_signal_producer(
qApp,
&QGuiApplication::focusWindowChanged
) | rpl::filter([=](QWindow *focused) {
const auto handle = _widget->window()->windowHandle();
return _webview
&& !_webview->window.widget()->isHidden()
&& handle
&& handle->isActive();
}) | rpl::distinct_until_changed(
) | rpl::filter(
rpl::mappers::_1
) | rpl::start_with_next([=] {
&& (focused == handle);
}) | rpl::start_with_next([=] {
_webview->window.focus();
}, _webview->lifetime);