diff --git a/part/presentationwidget.cpp b/part/presentationwidget.cpp index 81adb4b38..a6fb3d1c7 100644 --- a/part/presentationwidget.cpp +++ b/part/presentationwidget.cpp @@ -906,11 +906,43 @@ void PresentationWidget::resizeEvent(QResizeEvent *re) // END Content area } +void PresentationWidget::enterEvent(QEvent *e) +{ + if (!m_topBar->isHidden()) { + QEnterEvent *ee = static_cast(e); + // This can happen when we exited the widget via a "tooltip" and the tooltip disappears + if (ee->y() > (m_topBar->height() + 1)) { + showTopBar(false); + } + } + QWidget::enterEvent(e); +} + void PresentationWidget::leaveEvent(QEvent *e) { Q_UNUSED(e) if (!m_topBar->isHidden()) { + if (QToolTip::isVisible()) { + // make sure we're not hovering over the tooltip + // because the world is sad, this works differently on Wayland and X11 + // on X11 the widget under the cursor is the tooltip window + // on wayland it's the button generating the tooltip (why? no idea) + const QWidget *widgetUnderCursor = qApp->widgetAt(QCursor::pos()); + if (widgetUnderCursor) { + const QWidget *widgetUnderCursorWindow = widgetUnderCursor->window(); + if (widgetUnderCursorWindow == this) { + qDebug() << "Wayland"; + return; + } else { + const QWidget *widgetUnderCursorParentWindow = widgetUnderCursorWindow->parentWidget() ? widgetUnderCursorWindow->parentWidget()->window() : nullptr; + if (widgetUnderCursorParentWindow == this) { + qDebug() << "X11"; + return; + } + } + } + } showTopBar(false); } } diff --git a/part/presentationwidget.h b/part/presentationwidget.h index 4c3036f16..48c6e3b3e 100644 --- a/part/presentationwidget.h +++ b/part/presentationwidget.h @@ -75,6 +75,7 @@ protected: void mouseMoveEvent(QMouseEvent *e) override; void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *e) override; + void enterEvent(QEvent *e) override; void leaveEvent(QEvent *e) override; bool gestureEvent(QGestureEvent *e);