Fixed closing media viewer in fullscreen mode with click on top area.

This commit is contained in:
23rd 2023-03-09 13:13:12 +03:00
parent d961b56a2d
commit 9803342c93
3 changed files with 38 additions and 0 deletions

View File

@ -474,6 +474,25 @@ OverlayWidget::OverlayWidget()
}
return base::EventFilterResult::Continue;
});
_helper->mouseEvents(
) | rpl::start_with_next([=](not_null<QMouseEvent*> e) {
const auto type = e->type();
const auto position = e->pos();
if (_helper->skipTitleHitTest(position)) {
return;
}
if (type == QEvent::MouseButtonPress) {
handleMousePress(position, e->button());
} else if (type == QEvent::MouseButtonRelease) {
handleMouseRelease(position, e->button());
} else if (type == QEvent::MouseMove) {
handleMouseMove(position);
} else if (type == QEvent::MouseButtonDblClick) {
if (!handleDoubleClick(position, e->button())) {
handleMousePress(position, e->button());
}
}
}, lifetime());
_window->setTitle(u"Media viewer"_q);
_window->setTitleStyle(st::mediaviewTitle);

View File

@ -234,4 +234,18 @@ void DefaultOverlayWidgetHelper::setControlsOpacity(float64 opacity) {
_buttons->setMasterOpacity(opacity);
}
auto DefaultOverlayWidgetHelper::mouseEvents() const
-> rpl::producer<not_null<QMouseEvent*>> {
return _controls->wrap.events(
) | rpl::filter([](not_null<QEvent*> e) {
const auto type = e->type();
return (type == QEvent::MouseButtonPress)
|| (type == QEvent::MouseButtonRelease)
|| (type == QEvent::MouseMove)
|| (type == QEvent::MouseButtonDblClick);
}) | rpl::map([](not_null<QEvent*> e) {
return not_null{ static_cast<QMouseEvent*>(e.get()) };
});
}
} // namespace Platform

View File

@ -49,6 +49,10 @@ public:
}
virtual void setControlsOpacity(float64 opacity) {
}
[[nodiscard]] virtual auto mouseEvents() const
-> rpl::producer<not_null<QMouseEvent*>> {
return rpl::never<not_null<QMouseEvent*>>();
}
};
[[nodiscard]] std::unique_ptr<OverlayWidgetHelper> CreateOverlayWidgetHelper(
@ -68,6 +72,7 @@ public:
void beforeShow(bool fullscreen) override;
void clearState() override;
void setControlsOpacity(float64 opacity) override;
rpl::producer<not_null<QMouseEvent*>> mouseEvents() const override;
private:
class Buttons;