From d7aeb21bfb83a9145a893afca65f841f32b30a28 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 13 Jul 2022 16:05:03 +0200 Subject: [PATCH] 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 Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/help/CMakeLists.txt | 2 +- src/plugins/help/macwebkithelpviewer.h | 4 +--- src/plugins/help/macwebkithelpviewer.mm | 28 +++++++++++++++---------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/plugins/help/CMakeLists.txt b/src/plugins/help/CMakeLists.txt index 7d6452c4738..616f53a2bc2 100644 --- a/src/plugins/help/CMakeLists.txt +++ b/src/plugins/help/CMakeLists.txt @@ -35,7 +35,7 @@ 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" DEPENDS ${FWWebKit} ${FWAppKit} DEFINES QTC_MAC_NATIVE_HELPVIEWER diff --git a/src/plugins/help/macwebkithelpviewer.h b/src/plugins/help/macwebkithelpviewer.h index f6b2d9424d3..782b1427cdd 100644 --- a/src/plugins/help/macwebkithelpviewer.h +++ b/src/plugins/help/macwebkithelpviewer.h @@ -27,8 +27,6 @@ #include "helpviewer.h" -#include - Q_FORWARD_DECLARE_OBJC_CLASS(DOMNode); Q_FORWARD_DECLARE_OBJC_CLASS(DOMRange); Q_FORWARD_DECLARE_OBJC_CLASS(NSString); @@ -40,7 +38,7 @@ namespace Internal { class MacWebKitHelpViewer; class MacWebKitHelpWidgetPrivate; -class MacWebKitHelpWidget : public QMacCocoaViewContainer +class MacWebKitHelpWidget : public QWidget { Q_OBJECT diff --git a/src/plugins/help/macwebkithelpviewer.mm b/src/plugins/help/macwebkithelpviewer.mm index ed239754f49..d9b2e5bb47a 100644 --- a/src/plugins/help/macwebkithelpviewer.mm +++ b/src/plugins/help/macwebkithelpviewer.mm @@ -41,6 +41,7 @@ #include #include #include +#include #include @@ -348,15 +349,16 @@ static NSMenuItem *menuItem(NSURL *url, id target, SEL action, const QString &ti NSURL *url = [element objectForKey:WebElementLinkURLKey]; if (QTC_GUARD(url)) { if (widget->viewer()->isActionVisible(Help::Internal::HelpViewer::Action::NewPage)) - [ret addObject:menuItem(url, - self, - @selector(openAsNewPage:), - Tr::tr(Help::Constants::TR_OPEN_LINK_AS_NEW_PAGE))]; + [ret + addObject:menuItem(url, + self, + @selector(openAsNewPage:), + Help::Tr::tr(Help::Constants::TR_OPEN_LINK_AS_NEW_PAGE))]; if (widget->viewer()->isActionVisible(Help::Internal::HelpViewer::Action::ExternalWindow)) [ret addObject:menuItem(url, self, @selector(openInWindow:), - Tr::tr(Help::Constants::TR_OPEN_LINK_IN_WINDOW))]; + Help::Tr::tr(Help::Constants::TR_OPEN_LINK_IN_WINDOW))]; } break; } @@ -430,8 +432,8 @@ public: // #pragma mark -- MacWebKitHelpWidget MacWebKitHelpWidget::MacWebKitHelpWidget(MacWebKitHelpViewer *parent) - : QMacCocoaViewContainer(nullptr, parent), - d(new MacWebKitHelpWidgetPrivate(parent)) + : QWidget(parent) + , d(new MacWebKitHelpWidgetPrivate(parent)) { d->m_toolTipTimer.setSingleShot(true); 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_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() @@ -508,8 +514,8 @@ static void responderHack(QWidget *old, QWidget *now) return; @autoreleasepool { NSView *view; - if (QMacCocoaViewContainer *viewContainer = qobject_cast(now)) - view = viewContainer->cocoaView(); + if (auto viewContainer = qobject_cast(now)) + view = viewContainer->webView(); else view = reinterpret_cast(now->effectiveWinId()); [view.window makeFirstResponder:view];