From 3e6ea8109c83209e09c98b528da57cf3c007b5db Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Sun, 6 Oct 2024 00:45:55 +0400 Subject: [PATCH] Don't treat window controls as continuous --- Telegram/SourceFiles/calls/calls_panel.cpp | 4 +++- .../SourceFiles/media/view/media_view_overlay_widget.cpp | 8 ++++---- Telegram/SourceFiles/platform/platform_overlay_widget.cpp | 3 ++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/calls/calls_panel.cpp b/Telegram/SourceFiles/calls/calls_panel.cpp index c3f94e0ec..6f0ab0f6a 100644 --- a/Telegram/SourceFiles/calls/calls_panel.cpp +++ b/Telegram/SourceFiles/calls/calls_panel.cpp @@ -198,7 +198,9 @@ void Panel::initWindow() { return Flag::None | Flag(0); } #ifndef Q_OS_MAC - if (_controls->controls.geometry().contains(widgetPoint)) { + using Result = Ui::Platform::HitTestResult; + const auto windowPoint = widget()->mapTo(window(), widgetPoint); + if (_controls->controls.hitTest(windowPoint) != Result::None) { return Flag::None | Flag(0); } #endif // !Q_OS_MAC diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index 0cf853592..98549982f 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -659,11 +659,11 @@ OverlayWidget::OverlayWidget() }); _helper->mouseEvents( ) | rpl::start_with_next([=](not_null e) { - const auto type = e->type(); - const auto position = e->pos(); - if (_helper->skipTitleHitTest(position)) { + if (_helper->skipTitleHitTest(e->windowPos().toPoint())) { return; } + const auto type = e->type(); + const auto position = e->pos(); if (type == QEvent::MouseButtonPress) { handleMousePress(position, e->button()); } else if (type == QEvent::MouseButtonRelease) { @@ -804,7 +804,7 @@ void OverlayWidget::setupWindow() { using Flag = Ui::WindowTitleHitTestFlag; Ui::WindowTitleHitTestFlags result; if (!_widget->rect().contains(widgetPoint) - || _helper->skipTitleHitTest(widgetPoint)) { + || _helper->skipTitleHitTest(_widget->mapTo(_window, widgetPoint))) { return result; } if (widgetPoint.y() <= st::mediaviewTitleButton.height) { diff --git a/Telegram/SourceFiles/platform/platform_overlay_widget.cpp b/Telegram/SourceFiles/platform/platform_overlay_widget.cpp index 03e8d32aa..63e1de588 100644 --- a/Telegram/SourceFiles/platform/platform_overlay_widget.cpp +++ b/Telegram/SourceFiles/platform/platform_overlay_widget.cpp @@ -215,7 +215,8 @@ void DefaultOverlayWidgetHelper::orderWidgets() { } bool DefaultOverlayWidgetHelper::skipTitleHitTest(QPoint position) { - return _controls->controls.geometry().contains(position); + using namespace Ui::Platform; + return _controls->controls.hitTest(position) != HitTestResult::None; } rpl::producer<> DefaultOverlayWidgetHelper::controlsActivations() {