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
|
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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
Reference in New Issue
Block a user