Help: Re-enable native WebKit help viewer

Was disabled since QMacCocoaViewContainer is gone in Qt 6. Works with
the suggested QWindow::fromWinId + QWidget::createWindowContainer
though.

WebKit(1) is deprecated though, and litehtml works pretty well nowadays,
so this is more academical than really useful. (litehtml stays the
default, opt-in to WebKit is possible in Preferences > Help > Viewer
backend)

Change-Id: I6c54a6ff4de790f098cd852eb753545d9a5540a4
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Eike Ziller
2022-07-13 16:05:03 +02:00
parent b4b1051e08
commit d7aeb21bfb
3 changed files with 19 additions and 15 deletions

View File

@@ -35,7 +35,7 @@ extend_qtc_plugin(Help
) )
extend_qtc_plugin(Help extend_qtc_plugin(Help
CONDITION FWWebKit AND FWAppKit AND Qt5_VERSION VERSION_LESS 6.0.0 CONDITION FWWebKit AND FWAppKit
FEATURE_INFO "Native WebKit help viewer" FEATURE_INFO "Native WebKit help viewer"
DEPENDS ${FWWebKit} ${FWAppKit} DEPENDS ${FWWebKit} ${FWAppKit}
DEFINES QTC_MAC_NATIVE_HELPVIEWER DEFINES QTC_MAC_NATIVE_HELPVIEWER

View File

@@ -27,8 +27,6 @@
#include "helpviewer.h" #include "helpviewer.h"
#include <QMacCocoaViewContainer>
Q_FORWARD_DECLARE_OBJC_CLASS(DOMNode); Q_FORWARD_DECLARE_OBJC_CLASS(DOMNode);
Q_FORWARD_DECLARE_OBJC_CLASS(DOMRange); Q_FORWARD_DECLARE_OBJC_CLASS(DOMRange);
Q_FORWARD_DECLARE_OBJC_CLASS(NSString); Q_FORWARD_DECLARE_OBJC_CLASS(NSString);
@@ -40,7 +38,7 @@ namespace Internal {
class MacWebKitHelpViewer; class MacWebKitHelpViewer;
class MacWebKitHelpWidgetPrivate; class MacWebKitHelpWidgetPrivate;
class MacWebKitHelpWidget : public QMacCocoaViewContainer class MacWebKitHelpWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT

View File

@@ -41,6 +41,7 @@
#include <QToolTip> #include <QToolTip>
#include <QUrl> #include <QUrl>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QWindow>
#include <QDebug> #include <QDebug>
@@ -348,15 +349,16 @@ static NSMenuItem *menuItem(NSURL *url, id target, SEL action, const QString &ti
NSURL *url = [element objectForKey:WebElementLinkURLKey]; NSURL *url = [element objectForKey:WebElementLinkURLKey];
if (QTC_GUARD(url)) { if (QTC_GUARD(url)) {
if (widget->viewer()->isActionVisible(Help::Internal::HelpViewer::Action::NewPage)) if (widget->viewer()->isActionVisible(Help::Internal::HelpViewer::Action::NewPage))
[ret addObject:menuItem(url, [ret
self, addObject:menuItem(url,
@selector(openAsNewPage:), self,
Tr::tr(Help::Constants::TR_OPEN_LINK_AS_NEW_PAGE))]; @selector(openAsNewPage:),
Help::Tr::tr(Help::Constants::TR_OPEN_LINK_AS_NEW_PAGE))];
if (widget->viewer()->isActionVisible(Help::Internal::HelpViewer::Action::ExternalWindow)) if (widget->viewer()->isActionVisible(Help::Internal::HelpViewer::Action::ExternalWindow))
[ret addObject:menuItem(url, [ret addObject:menuItem(url,
self, self,
@selector(openInWindow:), @selector(openInWindow:),
Tr::tr(Help::Constants::TR_OPEN_LINK_IN_WINDOW))]; Help::Tr::tr(Help::Constants::TR_OPEN_LINK_IN_WINDOW))];
} }
break; break;
} }
@@ -430,8 +432,8 @@ public:
// #pragma mark -- MacWebKitHelpWidget // #pragma mark -- MacWebKitHelpWidget
MacWebKitHelpWidget::MacWebKitHelpWidget(MacWebKitHelpViewer *parent) MacWebKitHelpWidget::MacWebKitHelpWidget(MacWebKitHelpViewer *parent)
: QMacCocoaViewContainer(nullptr, parent), : QWidget(parent)
d(new MacWebKitHelpWidgetPrivate(parent)) , d(new MacWebKitHelpWidgetPrivate(parent))
{ {
d->m_toolTipTimer.setSingleShot(true); d->m_toolTipTimer.setSingleShot(true);
connect(&d->m_toolTipTimer, &QTimer::timeout, this, &MacWebKitHelpWidget::showToolTip); connect(&d->m_toolTipTimer, &QTimer::timeout, this, &MacWebKitHelpWidget::showToolTip);
@@ -446,9 +448,13 @@ MacWebKitHelpWidget::MacWebKitHelpWidget(MacWebKitHelpViewer *parent)
d->m_uiDelegate = [[UIDelegate alloc] initWithWidget:this]; d->m_uiDelegate = [[UIDelegate alloc] initWithWidget:this];
[d->m_webView setUIDelegate:d->m_uiDelegate]; [d->m_webView setUIDelegate:d->m_uiDelegate];
setCocoaView(d->m_webView); auto window = QWindow::fromWinId(WId(d->m_webView));
auto container = QWidget::createWindowContainer(window);
auto layout = new QVBoxLayout;
layout->setContentsMargins(0, 0, 0, 0);
setLayout(layout);
layout->addWidget(container, 1);
} }
} }
MacWebKitHelpWidget::~MacWebKitHelpWidget() MacWebKitHelpWidget::~MacWebKitHelpWidget()
@@ -508,8 +514,8 @@ static void responderHack(QWidget *old, QWidget *now)
return; return;
@autoreleasepool { @autoreleasepool {
NSView *view; NSView *view;
if (QMacCocoaViewContainer *viewContainer = qobject_cast<QMacCocoaViewContainer *>(now)) if (auto viewContainer = qobject_cast<MacWebKitHelpWidget *>(now))
view = viewContainer->cocoaView(); view = viewContainer->webView();
else else
view = reinterpret_cast<NSView *>(now->effectiveWinId()); view = reinterpret_cast<NSView *>(now->effectiveWinId());
[view.window makeFirstResponder:view]; [view.window makeFirstResponder:view];