forked from qt-creator/qt-creator
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:
@@ -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
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
|
||||
#include "helpviewer.h"
|
||||
|
||||
#include <QMacCocoaViewContainer>
|
||||
|
||||
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
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <QToolTip>
|
||||
#include <QUrl>
|
||||
#include <QVBoxLayout>
|
||||
#include <QWindow>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
@@ -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<QMacCocoaViewContainer *>(now))
|
||||
view = viewContainer->cocoaView();
|
||||
if (auto viewContainer = qobject_cast<MacWebKitHelpWidget *>(now))
|
||||
view = viewContainer->webView();
|
||||
else
|
||||
view = reinterpret_cast<NSView *>(now->effectiveWinId());
|
||||
[view.window makeFirstResponder:view];
|
||||
|
||||
Reference in New Issue
Block a user