diff options
Diffstat (limited to 'kwebapp/webview.cpp')
-rw-r--r-- | kwebapp/webview.cpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/kwebapp/webview.cpp b/kwebapp/webview.cpp new file mode 100644 index 00000000..7a5ba4c1 --- /dev/null +++ b/kwebapp/webview.cpp @@ -0,0 +1,121 @@ +/*************************************************************************** + * Copyright (C) 2011 by Andrea Diamantini <adjam7@gmail.com> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * + ***************************************************************************/ + + +// Self Includes +#include "webview.h" +#include "webview.moc" + +// KDE Includes +#include <KIO/Job> +#include <KIO/RenameDialog> +#include <KIO/JobUiDelegate> + +#include <KGlobalSettings> +#include <KStandardDirs> +#include <KFileDialog> +#include <KJobUiDelegate> +#include <KLocalizedString> +#include <KMenu> +#include <KAction> +#include <KUrl> +#include <KRun> + +// Qt Includes +#include <QUrl> +#include <QDebug> +#include <QWebHitTestResult> +#include <QWebHistory> +#include <QNetworkRequest> +#include <QPointer> + + +WebView::WebView(QWidget *parent) + : KWebView(parent) +{ + page()->setForwardUnsupportedContent(true); + connect(page(), SIGNAL(unsupportedContent(QNetworkReply *)), page(), SLOT(downloadResponse(QNetworkReply *))); + connect(page(), SIGNAL(downloadRequested(const QNetworkRequest &)), page(), SLOT(downloadRequest(const QNetworkRequest &))); + connect(this, SIGNAL(linkShiftClicked(const KUrl &)), page(), SLOT(downloadUrl(const KUrl &))); + + QWebSettings::setIconDatabasePath( KStandardDirs::locateLocal("cache","kwebapp.favicons") ); + + setContextMenuPolicy(Qt::CustomContextMenu); + + connect(this, SIGNAL(titleChanged(const QString &)), this, SLOT(setTitle(const QString &))); + connect(this, SIGNAL(iconChanged()), this, SLOT(setIcon())); + connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(menuRequested(const QPoint &))); +} + + +void WebView::setTitle(const QString &t) +{ + setWindowTitle(t); +} + + +void WebView::setIcon() +{ + setWindowIcon(icon()); +} + + +void WebView::menuRequested(const QPoint &pos) +{ + QWebHitTestResult result = page()->mainFrame()->hitTestContent(pos); + + KMenu menu(this); + QAction *a; + + // is a link? + if (!result.linkUrl().isEmpty()) + { + a = new KAction(KIcon("window-new"), i18n("Open in default browser"), this); + a->setData(result.linkUrl()); + connect(a, SIGNAL(triggered(bool)), this, SLOT(openLinkInDefaultBrowser())); + menu.addAction(a); + + menu.addAction(pageAction(KWebPage::DownloadLinkToDisk)); + menu.addAction(pageAction(KWebPage::CopyLinkToClipboard)); + menu.addSeparator(); + } + + if(history()->canGoBack()) + { + menu.addAction(pageAction(KWebPage::Back)); + } + + if(history()->canGoBack()) + { + menu.addAction(pageAction(KWebPage::Forward)); + } + + menu.addAction(pageAction(KWebPage::Reload)); + + menu.exec(mapToGlobal(pos)); +} + + +void WebView::openLinkInDefaultBrowser() +{ + KAction *a = qobject_cast<KAction*>(sender()); + KUrl u(a->data().toUrl()); + + (void)new KRun(u, this, 0); +} |