diff options
author | Peter Varga <pvarga@inf.u-szeged.hu> | 2021-11-03 14:46:27 +0100 |
---|---|---|
committer | Peter Varga <pvarga@inf.u-szeged.hu> | 2021-11-05 12:49:30 +0100 |
commit | 1a3a932926e4135cb055c02d89117b0a652a374d (patch) | |
tree | e82b5e98bcb55dfc47a8b26ca915efacb39d5911 | |
parent | d554dde77b60e33bd328b7cb7b5f0b5afa2cffe1 (diff) |
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 <allan.jensen@qt.io>
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
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<QHelpEvent *>(ev)->globalPos(), toolTip(), this, QRect(), toolTipDuration()); - else - QToolTip::hideText(); - - ev->accept(); - return true; - } - return QWidget::event(ev); } |