Fix second click in media viewer double-click.

This commit is contained in:
John Preston 2021-05-31 14:54:56 +04:00
parent 136e930362
commit ce091b0b63
2 changed files with 17 additions and 12 deletions

View file

@ -371,6 +371,12 @@ OverlayWidget::OverlayWidget()
} }
}, lifetime()); }, lifetime());
const auto mousePosition = [](not_null<QEvent*> e) {
return static_cast<QMouseEvent*>(e.get())->pos();
};
const auto mouseButton = [](not_null<QEvent*> e) {
return static_cast<QMouseEvent*>(e.get())->button();
};
base::install_event_filter(_widget, [=](not_null<QEvent*> e) { base::install_event_filter(_widget, [=](not_null<QEvent*> e) {
const auto type = e->type(); const auto type = e->type();
if (type == QEvent::Move) { if (type == QEvent::Move) {
@ -385,15 +391,11 @@ OverlayWidget::OverlayWidget()
.arg(size.height())); .arg(size.height()));
updateControlsGeometry(); updateControlsGeometry();
} else if (type == QEvent::MouseButtonPress) { } else if (type == QEvent::MouseButtonPress) {
handleMousePress( handleMousePress(mousePosition(e), mouseButton(e));
static_cast<QMouseEvent*>(e.get())->pos(),
static_cast<QMouseEvent*>(e.get())->button());
} else if (type == QEvent::MouseButtonRelease) { } else if (type == QEvent::MouseButtonRelease) {
handleMouseRelease( handleMouseRelease(mousePosition(e), mouseButton(e));
static_cast<QMouseEvent*>(e.get())->pos(),
static_cast<QMouseEvent*>(e.get())->button());
} else if (type == QEvent::MouseMove) { } else if (type == QEvent::MouseMove) {
handleMouseMove(static_cast<QMouseEvent*>(e.get())->pos()); handleMouseMove(mousePosition(e));
} else if (type == QEvent::KeyPress) { } else if (type == QEvent::KeyPress) {
handleKeyPress(static_cast<QKeyEvent*>(e.get())); handleKeyPress(static_cast<QKeyEvent*>(e.get()));
} else if (type == QEvent::ContextMenu) { } else if (type == QEvent::ContextMenu) {
@ -406,9 +408,10 @@ OverlayWidget::OverlayWidget()
return base::EventFilterResult::Cancel; return base::EventFilterResult::Cancel;
} }
} else if (type == QEvent::MouseButtonDblClick) { } else if (type == QEvent::MouseButtonDblClick) {
const auto position = static_cast<QMouseEvent*>(e.get())->pos(); if (handleDoubleClick(mousePosition(e), mouseButton(e))) {
if (handleDoubleClick(position)) {
return base::EventFilterResult::Cancel; return base::EventFilterResult::Cancel;
} else {
handleMousePress(mousePosition(e), mouseButton(e));
} }
} else if (type == QEvent::UpdateRequest) { } else if (type == QEvent::UpdateRequest) {
_wasRepainted = true; _wasRepainted = true;
@ -4073,10 +4076,12 @@ void OverlayWidget::handleMousePress(
activateControls(); activateControls();
} }
bool OverlayWidget::handleDoubleClick(QPoint position) { bool OverlayWidget::handleDoubleClick(
QPoint position,
Qt::MouseButton button) {
updateOver(position); updateOver(position);
if (_over != OverVideo || !_streamed) { if (_over != OverVideo || !_streamed || button != Qt::LeftButton) {
return false; return false;
} }
playbackToggleFullScreen(); playbackToggleFullScreen();

View file

@ -153,7 +153,7 @@ private:
void handleMouseRelease(QPoint position, Qt::MouseButton button); void handleMouseRelease(QPoint position, Qt::MouseButton button);
void handleMouseMove(QPoint position); void handleMouseMove(QPoint position);
bool handleContextMenu(std::optional<QPoint> position); bool handleContextMenu(std::optional<QPoint> position);
bool handleDoubleClick(QPoint position); bool handleDoubleClick(QPoint position, Qt::MouseButton button);
bool handleTouchEvent(not_null<QTouchEvent*> e); bool handleTouchEvent(not_null<QTouchEvent*> e);
void handleWheelEvent(not_null<QWheelEvent*> e); void handleWheelEvent(not_null<QWheelEvent*> e);
void handleKeyPress(not_null<QKeyEvent*> e); void handleKeyPress(not_null<QKeyEvent*> e);