summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2009-12-15 03:29:48 +0100
committerAndrea Diamantini <adjam7@gmail.com>2009-12-16 00:59:32 +0100
commitaa9521b0e0f810a9ba94d7f6c7f9100c3f69d862 (patch)
tree57dd9649ba0b69f1fa385416c9af9d78587f2de9
parentfix spacing (diff)
downloadrekonq-aa9521b0e0f810a9ba94d7f6c7f9100c3f69d862.tar.xz
First form of protocol handling
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/application.cpp8
-rw-r--r--src/mainview.cpp24
-rw-r--r--src/mainwindow.cpp24
-rw-r--r--src/mainwindow.h6
-rw-r--r--src/protocolhandler.cpp101
-rw-r--r--src/protocolhandler.h45
-rw-r--r--src/rekonqpage/newtabpage.cpp4
-rw-r--r--src/rekonqpage/newtabpage.h2
-rw-r--r--src/webpage.cpp13
-rw-r--r--src/webpage.h4
11 files changed, 173 insertions, 59 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ede49328..c80aedc0 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -23,6 +23,7 @@ SET( rekonq_KDEINIT_SRCS
networkaccessmanager.cpp
webinspectordock.cpp
walletbar.cpp
+ protocolhandler.cpp
#----------------------------------------
history/autosaver.cpp
history/historymanager.cpp
diff --git a/src/application.cpp b/src/application.cpp
index cacdcb5a..28d998f3 100644
--- a/src/application.cpp
+++ b/src/application.cpp
@@ -100,7 +100,7 @@ int Application::newInstance()
mainWindow()->homePage();
break;
case 1: // open new tab page
- mainWindow()->newTabPage();
+ loadUrl( KUrl("about:home") );
break;
case 2: // restore session
if(sessionManager()->restoreSession())
@@ -279,9 +279,9 @@ void Application::loadUrl(const KUrl& url, const Rekonq::OpenType& type)
return;
}
- // loading home pages
- if (mainWindow()->newTabPage(loadingUrl))
- return;
+ /* // loading home pages
+ if (mainWindow()->newTabPage(loadingUrl))
+ return;*/
if (loadingUrl.scheme() == QLatin1String("mailto"))
{
diff --git a/src/mainview.cpp b/src/mainview.cpp
index 9f5b433e..713c171b 100644
--- a/src/mainview.cpp
+++ b/src/mainview.cpp
@@ -51,15 +51,15 @@
#include <KLocalizedString>
// Qt Includes
-#include <QtCore/QTimer>
-#include <QtCore/QString>
+#include <QTimer>
+#include <QString>
+#include <QAction>
+#include <QIcon>
+#include <QLabel>
+#include <QMovie>
+#include <QWidget>
+#include <QVBoxLayout>
-#include <QtGui/QAction>
-#include <QtGui/QIcon>
-#include <QtGui/QLabel>
-#include <QtGui/QMovie>
-#include <QtGui/QWidget>
-#include <QtGui/QVBoxLayout>
MainView::MainView(MainWindow *parent)
: KTabWidget(parent)
@@ -351,18 +351,18 @@ WebTab *MainView::newWebTab(bool focused, bool nearParent)
void MainView::newTab()
{
- WebTab *w = newWebTab();
+ WebView *w = newWebTab()->view();
switch(ReKonfig::newTabsBehaviour())
{
case 0: // new tab page
- if(m_parentWindow->newTabPage())
- break;
+ w->load( KUrl("about:home") );
+ break;
case 1: // blank page
urlBar()->setUrl(KUrl(""));
break;
case 2: // homepage
- w->view()->load( QUrl(ReKonfig::homePage()) );
+ w->load( KUrl(ReKonfig::homePage()) );
break;
default:
break;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index b141401c..a9d014ef 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -45,7 +45,6 @@
#include "webinspectordock.h"
#include "urlbar.h"
#include "tabbar.h"
-#include "newtabpage.h"
#include "adblockmanager.h"
// Ui Includes
@@ -108,7 +107,6 @@ MainWindow::MainWindow()
, m_popup( new KPassivePopup(this) )
, m_hidePopup( new QTimer(this) )
, m_ac( new KActionCollection(this) )
- , m_loadingNewTabPage(false)
{
// enable window size "auto-save"
setAutoSaveSettings();
@@ -1164,25 +1162,3 @@ void MainWindow::openActionUrl(QAction *action)
}
}
-
-
-bool MainWindow::newTabPage(const KUrl &url)
-{
- if(m_loadingNewTabPage)
- return false;
-
- if ( url == KUrl("about:closedTabs")
- || url == KUrl("about:history")
- || url == KUrl("about:bookmarks")
- || url == KUrl("about:favorites")
- || url == KUrl("about:home")
- )
- {
- m_loadingNewTabPage = true;
- NewTabPage p(currentTab()->page());
- p.generate(url);
- m_loadingNewTabPage = false;
- return true;
- }
- return false;
-}
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 5360d264..95964e22 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -71,9 +71,7 @@ public:
QAction *actionByName(const QString name);
virtual QSize sizeHint() const;
virtual KActionCollection *actionCollection () const;
-
- bool newTabPage(const KUrl &url = KUrl("about:home"));
-
+
private:
void setupActions();
void setupTools();
@@ -178,8 +176,6 @@ private:
QTimer *m_hidePopup;
KActionCollection *m_ac;
-
- bool m_loadingNewTabPage;
};
#endif // MAINWINDOW_H
diff --git a/src/protocolhandler.cpp b/src/protocolhandler.cpp
new file mode 100644
index 00000000..fb01b266
--- /dev/null
+++ b/src/protocolhandler.cpp
@@ -0,0 +1,101 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot 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) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+// Self Includes
+#include "protocolhandler.h"
+
+// Local Includes
+#include "newtabpage.h"
+
+// KDE Includes
+#include <KUrl>
+#include <KRun>
+#include <KToolInvocation>
+
+// Qt Includes
+#include <QLatin1String>
+#include <QNetworkRequest>
+#include <QWebFrame>
+
+
+ProtocolHandler::ProtocolHandler()
+{
+}
+
+
+ProtocolHandler::~ProtocolHandler()
+{
+}
+
+
+bool ProtocolHandler::handle(const QNetworkRequest &request, QWebFrame *frame)
+{
+ KUrl url( request.url() );
+
+ // mailto handling
+ if ( url.protocol() == QLatin1String("mailto") )
+ {
+ KToolInvocation::invokeMailer(url);
+ return true;
+ }
+
+ if ( url.protocol() == QLatin1String("about") )
+ {
+ if( url == KUrl("about:closedTabs")
+ || url == KUrl("about:history")
+ || url == KUrl("about:bookmarks")
+ || url == KUrl("about:favorites")
+ || url == KUrl("about:home")
+ )
+ {
+ NewTabPage p(frame);
+ p.generate(url);
+
+ return true;
+ }
+ }
+
+ // "ftp" handling
+ if(url.protocol() == QLatin1String("ftp"))
+ {
+ KUrl::List list;
+ list.append(url);
+ KRun::run("dolphin %u",url,0);
+
+ return true;
+ }
+
+ // "file" handling
+ if(url.protocol() == QLatin1String("file"))
+ {
+ KUrl::List list;
+ list.append(url);
+ KRun::run("dolphin %u",url,0);
+
+ return true;
+ }
+
+ return false;
+}
diff --git a/src/protocolhandler.h b/src/protocolhandler.h
new file mode 100644
index 00000000..b857f27b
--- /dev/null
+++ b/src/protocolhandler.h
@@ -0,0 +1,45 @@
+/* ============================================================
+*
+* This file is a part of the rekonq project
+*
+* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot 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) version 3 or any later version
+* accepted by the membership of KDE e.V. (or its successor approved
+* by the membership of KDE e.V.), which shall act as a proxy
+* defined in Section 14 of version 3 of the license.
+*
+* 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, see <http://www.gnu.org/licenses/>.
+*
+* ============================================================ */
+
+
+
+#ifndef PROTOCOL_HANDLER_H
+#define PROTOCOL_HANDLER_H
+
+
+class QNetworkRequest;
+class QWebFrame;
+
+
+class ProtocolHandler
+{
+
+public:
+ ProtocolHandler();
+ ~ProtocolHandler();
+
+ bool handle(const QNetworkRequest &request, QWebFrame *frame);
+};
+
+#endif // PROTOCOL_HANDLER_H
diff --git a/src/rekonqpage/newtabpage.cpp b/src/rekonqpage/newtabpage.cpp
index a1b20ac0..66f74b86 100644
--- a/src/rekonqpage/newtabpage.cpp
+++ b/src/rekonqpage/newtabpage.cpp
@@ -48,8 +48,8 @@
#include <QFile>
-NewTabPage::NewTabPage(WebPage *page)
- : m_root(page->mainFrame()->documentElement())
+NewTabPage::NewTabPage(QWebFrame *frame)
+ : m_root(frame->documentElement())
{
QString htmlFilePath = KStandardDirs::locate("data", "rekonq/htmls/home.html");
diff --git a/src/rekonqpage/newtabpage.h b/src/rekonqpage/newtabpage.h
index 62baf79e..003aa84e 100644
--- a/src/rekonqpage/newtabpage.h
+++ b/src/rekonqpage/newtabpage.h
@@ -47,7 +47,7 @@ class NewTabPage
{
public:
- NewTabPage(WebPage *page);
+ NewTabPage(QWebFrame *frame);
~NewTabPage();
/**
diff --git a/src/webpage.cpp b/src/webpage.cpp
index 3fc0aac4..accf0e44 100644
--- a/src/webpage.cpp
+++ b/src/webpage.cpp
@@ -100,18 +100,9 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &r
return false;
}
- if (request.url().scheme() == QLatin1String("mailto"))
- {
- KToolInvocation::invokeMailer(request.url());
+ if(m_protHandler.handle(request,frame))
return false;
- }
-
- if (request.url().scheme() == QLatin1String("about"))
- {
- Application::instance()->mainWindow()->newTabPage( request.url() );
- return true;
- }
-
+
m_requestedUrl = request.url();
return KWebPage::acceptNavigationRequest(frame, request, type);
diff --git a/src/webpage.h b/src/webpage.h
index 79d8e8e7..c76eaea3 100644
--- a/src/webpage.h
+++ b/src/webpage.h
@@ -32,6 +32,9 @@
#define WEBPAGE_H
+// Local Includes
+#include "protocolhandler.h"
+
// KDE Includes
#include <KWebPage>
@@ -71,6 +74,7 @@ private:
QString errorPage(QNetworkReply *);
QUrl m_requestedUrl;
+ ProtocolHandler m_protHandler;
};
#endif