diff --git a/Telegram/SourceFiles/window/window_title_qt.cpp b/Telegram/SourceFiles/window/window_title_qt.cpp index 675159a6f..8b3e26df7 100644 --- a/Telegram/SourceFiles/window/window_title_qt.cpp +++ b/Telegram/SourceFiles/window/window_title_qt.cpp @@ -17,6 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_calls.h" // st::callShadow #include +#include #include namespace Window { @@ -76,7 +77,7 @@ TitleWidgetQt::TitleWidgetQt(QWidget *parent) } TitleWidgetQt::~TitleWidgetQt() { - window()->windowHandle()->unsetCursor(); + restoreCursor(); if (!_windowWasFrameless) { toggleFramelessWindow(false); @@ -259,6 +260,10 @@ bool TitleWidgetQt::eventFilter(QObject *obj, QEvent *e) { return startResize(edges); } } + } else if (e->type() == QEvent::Leave) { + if (obj->isWidgetType() && window() == static_cast(obj)) { + restoreCursor(); + } } else if (e->type() == QEvent::Move || e->type() == QEvent::Resize) { if (obj->isWidgetType() && window() == static_cast(obj)) { @@ -365,18 +370,35 @@ Qt::Edges TitleWidgetQt::edgesFromPos(const QPoint &pos) const { } void TitleWidgetQt::updateCursor(Qt::Edges edges) { + if (!edges) { + restoreCursor(); + return; + } else if (!QGuiApplication::overrideCursor()) { + _cursorOverriden = false; + } + + if (!_cursorOverriden) { + _cursorOverriden = true; + QGuiApplication::setOverrideCursor(QCursor()); + } + if (((edges & Qt::LeftEdge) && (edges & Qt::TopEdge)) || ((edges & Qt::RightEdge) && (edges & Qt::BottomEdge))) { - window()->windowHandle()->setCursor(QCursor(Qt::SizeFDiagCursor)); + QGuiApplication::changeOverrideCursor(QCursor(Qt::SizeFDiagCursor)); } else if (((edges & Qt::LeftEdge) && (edges & Qt::BottomEdge)) || ((edges & Qt::RightEdge) && (edges & Qt::TopEdge))) { - window()->windowHandle()->setCursor(QCursor(Qt::SizeBDiagCursor)); + QGuiApplication::changeOverrideCursor(QCursor(Qt::SizeBDiagCursor)); } else if ((edges & Qt::LeftEdge) || (edges & Qt::RightEdge)) { - window()->windowHandle()->setCursor(QCursor(Qt::SizeHorCursor)); + QGuiApplication::changeOverrideCursor(QCursor(Qt::SizeHorCursor)); } else if ((edges & Qt::TopEdge) || (edges & Qt::BottomEdge)) { - window()->windowHandle()->setCursor(QCursor(Qt::SizeVerCursor)); - } else { - window()->windowHandle()->unsetCursor(); + QGuiApplication::changeOverrideCursor(QCursor(Qt::SizeVerCursor)); + } +} + +void TitleWidgetQt::restoreCursor() { + if (_cursorOverriden) { + _cursorOverriden = false; + QGuiApplication::restoreOverrideCursor(); } } diff --git a/Telegram/SourceFiles/window/window_title_qt.h b/Telegram/SourceFiles/window/window_title_qt.h index 62a1f508e..e248ae97d 100644 --- a/Telegram/SourceFiles/window/window_title_qt.h +++ b/Telegram/SourceFiles/window/window_title_qt.h @@ -54,6 +54,7 @@ private: QMargins resizeArea() const; Qt::Edges edgesFromPos(const QPoint &pos) const; void updateCursor(Qt::Edges edges); + void restoreCursor(); bool startMove(); bool startResize(Qt::Edges edges); @@ -66,6 +67,7 @@ private: bool _maximizedState = false; bool _activeState = false; bool _windowWasFrameless = false; + bool _cursorOverriden = false; bool _extentsSet = false; bool _mousePressed = false;