From 49e96d857a252c61ad3272d39b3ec842d598336f Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Tue, 13 Oct 2020 00:37:55 +0400 Subject: [PATCH] Add drag distance for move-by-titlebar to process double click right --- .../SourceFiles/window/window_title_qt.cpp | 38 +++++++++++++++---- Telegram/SourceFiles/window/window_title_qt.h | 5 ++- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Telegram/SourceFiles/window/window_title_qt.cpp b/Telegram/SourceFiles/window/window_title_qt.cpp index 01aaca62b5..71cb2118a2 100644 --- a/Telegram/SourceFiles/window/window_title_qt.cpp +++ b/Telegram/SourceFiles/window/window_title_qt.cpp @@ -20,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include +#include namespace Window { namespace { @@ -231,17 +232,26 @@ void TitleWidgetQt::resizeEvent(QResizeEvent *e) { void TitleWidgetQt::mousePressEvent(QMouseEvent *e) { if (e->button() == Qt::LeftButton) { - startMove(); + if ((crl::now() - _pressedForMoveTime) + < QApplication::doubleClickInterval()) { + if (_maximizedState) { + window()->setWindowState(Qt::WindowNoState); + } else { + window()->setWindowState(Qt::WindowMaximized); + } + } else { + _pressedForMove = true; + _pressedForMoveTime = crl::now(); + _pressedForMovePoint = e->windowPos().toPoint(); + } } else if (e->button() == Qt::RightButton) { Platform::ShowWindowMenu(window()->windowHandle()); } } -void TitleWidgetQt::mouseDoubleClickEvent(QMouseEvent *e) { - if (_maximizedState) { - window()->setWindowState(Qt::WindowNoState); - } else { - window()->setWindowState(Qt::WindowMaximized); +void TitleWidgetQt::mouseReleaseEvent(QMouseEvent *e) { + if (e->button() == Qt::LeftButton) { + _pressedForMove = false; } } @@ -250,14 +260,26 @@ bool TitleWidgetQt::eventFilter(QObject *obj, QEvent *e) { || e->type() == QEvent::MouseButtonPress) { if (window()->isAncestorOf(static_cast(obj))) { const auto mouseEvent = static_cast(e); - const auto edges = edgesFromPos( - mouseEvent->windowPos().toPoint()); + const auto currentPoint = mouseEvent->windowPos().toPoint(); + const auto edges = edgesFromPos(currentPoint); + const auto dragDistance = QApplication::startDragDistance(); if (e->type() == QEvent::MouseMove && mouseEvent->buttons() == Qt::NoButton) { + if (_pressedForMove) { + _pressedForMove = false; + } + updateCursor(edges); } + if (e->type() == QEvent::MouseMove + && _pressedForMove + && ((currentPoint - _pressedForMovePoint).manhattanLength() + >= dragDistance)) { + return startMove(); + } + if (e->type() == QEvent::MouseButtonPress && mouseEvent->button() == Qt::LeftButton && !_maximizedState) { diff --git a/Telegram/SourceFiles/window/window_title_qt.h b/Telegram/SourceFiles/window/window_title_qt.h index 40f823b0b6..126711e954 100644 --- a/Telegram/SourceFiles/window/window_title_qt.h +++ b/Telegram/SourceFiles/window/window_title_qt.h @@ -39,7 +39,7 @@ protected: void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *e) override; void mousePressEvent(QMouseEvent *e) override; - void mouseDoubleClickEvent(QMouseEvent *e) override; + void mouseReleaseEvent(QMouseEvent *e) override; bool eventFilter(QObject *obj, QEvent *e) override; @@ -73,6 +73,9 @@ private: bool _windowWasFrameless = false; bool _cursorOverriden = false; bool _extentsSet = false; + bool _pressedForMove = false; + crl::time _pressedForMoveTime = 0; + QPoint _pressedForMovePoint; };