diff --git a/ui/style/style_core_font.cpp b/ui/style/style_core_font.cpp index c488a0a..76f71d8 100644 --- a/ui/style/style_core_font.cpp +++ b/ui/style/style_core_font.cpp @@ -98,7 +98,7 @@ bool LoadCustomFont(const QString &filePath, const QString &familyName, int flag [[nodiscard]] QString ManualMonospaceFont() { const auto kTryFirst = std::initializer_list{ - "Cascadia Code", + "Cascadia Mono", "Consolas", "Liberation Mono", "Menlo", diff --git a/ui/widgets/popup_menu.cpp b/ui/widgets/popup_menu.cpp index 8cae306..db6a97d 100644 --- a/ui/widgets/popup_menu.cpp +++ b/ui/widgets/popup_menu.cpp @@ -23,6 +23,7 @@ #include #include #include +#include namespace Ui { namespace { @@ -203,6 +204,8 @@ void PopupMenu::init() { hideMenu(true); }, lifetime()); + installEventFilter(this); + const auto paddingWrap = static_cast*>( _menu->parentWidget()); paddingWrap->paintRequest( @@ -620,6 +623,37 @@ void PopupMenu::mousePressEvent(QMouseEvent *e) { forwardMousePress(e->globalPos()); } +bool PopupMenu::eventFilter(QObject *o, QEvent *e) { + const auto type = e->type(); + if (type == QEvent::TouchBegin + || type == QEvent::TouchUpdate + || type == QEvent::TouchEnd) { + if (o == windowHandle() && isActiveWindow()) { + const auto event = static_cast(e); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + e->setAccepted( + QApplicationPrivate::translateRawTouchEvent( + this, + event->device(), + event->touchPoints(), + event->timestamp())); +#elif QT_VERSION < QT_VERSION_CHECK(6, 3, 0) // Qt < 6.0.0 + e->setAccepted( + QApplicationPrivate::translateRawTouchEvent( + this, + event->pointingDevice(), + const_cast &>(event->points()), + event->timestamp())); +#else // Qt < 6.3.0 + e->setAccepted( + QApplicationPrivate::translateRawTouchEvent(this, event)); +#endif + return e->isAccepted(); + } + } + return false; +} + void PopupMenu::hideMenu(bool fast) { if (isHidden()) { return; @@ -901,6 +935,8 @@ bool PopupMenu::prepareGeometryFor(const QPoint &p, PopupMenu *parent) { _parent = parent; createWinId(); + windowHandle()->removeEventFilter(this); + windowHandle()->installEventFilter(this); if (_parent) { windowHandle()->setScreen(_parent->screen()); } else if (screen) { diff --git a/ui/widgets/popup_menu.h b/ui/widgets/popup_menu.h index e9d60e5..0eb0a7c 100644 --- a/ui/widgets/popup_menu.h +++ b/ui/widgets/popup_menu.h @@ -109,6 +109,8 @@ protected: void mouseMoveEvent(QMouseEvent *e) override; void mousePressEvent(QMouseEvent *e) override; + bool eventFilter(QObject *o, QEvent *e) override; + private: void paintBg(QPainter &p); void hideFast();