Add hit test for window context menu

This commit is contained in:
Ilya Fedin 2024-07-25 21:25:55 +04:00 committed by John Preston
parent 77d6e19214
commit 517b456670
4 changed files with 18 additions and 13 deletions

View file

@ -215,7 +215,7 @@ void Panel::initWindow() {
} }
const auto shown = _layerBg->topShownLayer(); const auto shown = _layerBg->topShownLayer();
return (!shown || !shown->geometry().contains(widgetPoint)) return (!shown || !shown->geometry().contains(widgetPoint))
? (Flag::Move | Flag::FullScreen) ? (Flag::Move | Flag::Menu | Flag::FullScreen)
: Flag::None; : Flag::None;
}); });

View file

@ -410,7 +410,7 @@ void Panel::initWindow() {
} }
const auto shown = _layerBg->topShownLayer(); const auto shown = _layerBg->topShownLayer();
return (!shown || !shown->geometry().contains(widgetPoint)) return (!shown || !shown->geometry().contains(widgetPoint))
? (Flag::Move | Flag::Maximize) ? (Flag::Move | Flag::Menu | Flag::Maximize)
: Flag::None; : Flag::None;
}); });

View file

@ -729,25 +729,27 @@ void OverlayWidget::orderWidgets() {
void OverlayWidget::setupWindow() { void OverlayWidget::setupWindow() {
_window->setBodyTitleArea([=](QPoint widgetPoint) { _window->setBodyTitleArea([=](QPoint widgetPoint) {
using Flag = Ui::WindowTitleHitTestFlag; using Flag = Ui::WindowTitleHitTestFlag;
if (!_windowed Ui::WindowTitleHitTestFlags result;
|| !_widget->rect().contains(widgetPoint) if (!_widget->rect().contains(widgetPoint)
|| _helper->skipTitleHitTest(widgetPoint)) { || _helper->skipTitleHitTest(widgetPoint)) {
return Flag::None | Flag(0); return result;
} }
const auto inControls = (_over != Over::None) && (_over != Over::Video); if (widgetPoint.y() <= st::mediaviewTitleButton.height) {
result |= Flag::Menu;
}
const auto inControls = ((_over != Over::None) && (_over != Over::Video));
if (inControls if (inControls
|| (_streamed || (_streamed
&& _streamed->controls && _streamed->controls
&& _streamed->controls->dragging())) { && _streamed->controls->dragging())) {
return Flag::None | Flag(0);
} else if ((_w > _widget->width() || _h > _maxUsedHeight) } else if ((_w > _widget->width() || _h > _maxUsedHeight)
&& (widgetPoint.y() > st::mediaviewHeaderTop) && (widgetPoint.y() > st::mediaviewHeaderTop)
&& QRect(_x, _y, _w, _h).contains(widgetPoint)) { && QRect(_x, _y, _w, _h).contains(widgetPoint)) {
return Flag::None | Flag(0);
} else if (_stories && _stories->ignoreWindowMove(widgetPoint)) { } else if (_stories && _stories->ignoreWindowMove(widgetPoint)) {
return Flag::None | Flag(0); } else if (_windowed) {
result |= Flag::Move;
} }
return Flag::Move | Flag(0); return result;
}); });
_window->setAttribute(Qt::WA_NoSystemBackground, true); _window->setAttribute(Qt::WA_NoSystemBackground, true);
@ -5926,8 +5928,11 @@ void OverlayWidget::handleMouseRelease(
} }
bool OverlayWidget::handleContextMenu(std::optional<QPoint> position) { bool OverlayWidget::handleContextMenu(std::optional<QPoint> position) {
if (position && !QRect(_x, _y, _w, _h).contains(*position)) { if (position) {
return false; if (!QRect(_x, _y, _w, _h).contains(*position)
|| position->y() <= st::mediaviewTitleButton.height) {
return false;
}
} }
_menu = base::make_unique_q<Ui::PopupMenu>( _menu = base::make_unique_q<Ui::PopupMenu>(
_window, _window,

@ -1 +1 @@
Subproject commit 45f3a330679b775f0f56bbea7b40f83ebd8f5639 Subproject commit 03f250aab2e791bfb6a047bffa05273748518816