From 1a3a932926e4135cb055c02d89117b0a652a374d Mon Sep 17 00:00:00 2001 From: Peter Varga Date: Wed, 3 Nov 2021 14:46:27 +0100 Subject: Do not cancel custom tooltips by QWebEngineView custom tooltip handler Tooltips should disappear when chromium requests it and it is done by an explicit call of QToolTip::hideText() (see QTBUG-64933). This, however would also hide a custom "global" tooltip because the custom tooltip event notifies QWebEngineView to remove its own tooltip to avoid more than one in a window. The QWebEngineView's tooltip handler was override and it resulted custom tooltips to hide themselves. As a fix, remove the custom tooltip handler from QWebEngineView and hide tooltips only if requested by Chromium. Fixes: QTBUG-97897 Pick-to: 6.2 Change-Id: I976e49218ec975b10e2f155096f6aec124270fdc Reviewed-by: Allan Sandfeld Jensen --- src/webenginewidgets/api/qwebengineview.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/webenginewidgets/api') diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index 6414ac050..522beb892 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -494,7 +494,18 @@ QWebEnginePage *QWebEngineViewPrivate::createPageForWindow(QWebEnginePage::WebWi void QWebEngineViewPrivate::setToolTip(const QString &toolTipText) { Q_Q(QWebEngineView); - q->setToolTip(toolTipText); + if (toolTipText.isEmpty()) { + // Avoid duplicate events. + if (!q->toolTip().isEmpty()) + q->setToolTip(QString()); + // Force to hide tooltip because QWidget's default handler + // doesn't hide on empty text. + if (!QToolTip::text().isEmpty()) + QToolTip::hideText(); + } else if (toolTipText != q->toolTip()) { + q->setToolTip(toolTipText); + } + } bool QWebEngineViewPrivate::isEnabled() const @@ -817,17 +828,6 @@ bool QWebEngineView::event(QEvent *ev) return true; } - // Override QWidget's default ToolTip handler since it doesn't hide tooltip on empty text. - if (ev->type() == QEvent::ToolTip) { - if (!toolTip().isEmpty()) - QToolTip::showText(static_cast(ev)->globalPos(), toolTip(), this, QRect(), toolTipDuration()); - else - QToolTip::hideText(); - - ev->accept(); - return true; - } - return QWidget::event(ev); } -- cgit v1.2.3