File indexing completed on 2024-04-28 04:58:10

0001 /*
0002     This file is part of the KDE project
0003     SPDX-FileCopyrightText: 1999 Simon Hausmann <hausmann@kde.org>
0004     SPDX-FileCopyrightText: 1999 David Faure <faure@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #include "browserextension.h"
0010 
0011 #include <QTimer>
0012 #include <QDebug>
0013 
0014 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0015 
0016 struct DelayedRequest {
0017     QUrl m_delayedURL;
0018     KParts::OpenUrlArguments m_delayedArgs;
0019     BrowserArguments m_delayedBrowserArgs;
0020 };
0021 
0022 BrowserExtension::BrowserExtension(KParts::ReadOnlyPart *parent)
0023     : KParts::NavigationExtension(parent)
0024 {
0025     connect(parent, static_cast<void (KParts::ReadOnlyPart::*)()>(&KParts::ReadOnlyPart::completed), this, &BrowserExtension::slotCompleted);
0026     connect(this, &BrowserExtension::browserOpenUrlRequest, this, &BrowserExtension::slotOpenUrlRequest);
0027 }
0028 
0029 BrowserExtension::~BrowserExtension()
0030 {
0031 }
0032 
0033 void BrowserExtension::setBrowserArguments(const BrowserArguments &args)
0034 {
0035     m_browserArgs = args;
0036 }
0037 
0038 BrowserArguments BrowserExtension::browserArguments() const
0039 {
0040     return m_browserArgs;
0041 }
0042 
0043 void BrowserExtension::setBrowserInterface(BrowserInterface *impl)
0044 {
0045     m_browserInterface = impl;
0046 }
0047 
0048 BrowserInterface *BrowserExtension::browserInterface() const
0049 {
0050     return m_browserInterface;
0051 }
0052 
0053 void BrowserExtension::slotCompleted()
0054 {
0055     // empty the argument stuff, to avoid bogus/invalid values when opening a new url
0056     setBrowserArguments(BrowserArguments());
0057 }
0058 
0059 void BrowserExtension::slotOpenUrlRequest(const QUrl &url, const KParts::OpenUrlArguments &args, const BrowserArguments &browserArgs)
0060 {
0061     DelayedRequest req;
0062     req.m_delayedURL = url;
0063     req.m_delayedArgs = args;
0064     req.m_delayedBrowserArgs = browserArgs;
0065     m_requests.append(req);
0066     QTimer::singleShot(0, this, &BrowserExtension::slotEmitOpenUrlRequestDelayed);
0067 }
0068 
0069 void BrowserExtension::slotEmitOpenUrlRequestDelayed()
0070 {
0071     if (m_requests.isEmpty()) {
0072         return;
0073     }
0074     DelayedRequest req = m_requests.front();
0075     m_requests.pop_front();
0076     Q_EMIT browserOpenUrlRequestDelayed(req.m_delayedURL, req.m_delayedArgs, req.m_delayedBrowserArgs);
0077 }
0078 
0079 #endif
0080 
0081 #include "moc_browserextension.cpp"