diff options
31 files changed, 353 insertions, 290 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 8552a55b..55ea5127 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ PROJECT( rekonq ) # Informations to update before to release this package. # rekonq info -SET(REKONQ_VERSION "0.3.30" ) +SET(REKONQ_VERSION "0.3.34" ) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c80aedc0..b0a3fbd8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -21,15 +21,15 @@ SET( rekonq_KDEINIT_SRCS webtab.cpp clicktoflash.cpp networkaccessmanager.cpp - webinspectordock.cpp + webinspectorpanel.cpp walletbar.cpp protocolhandler.cpp + filterurljob.cpp #---------------------------------------- history/autosaver.cpp history/historymanager.cpp history/historymodels.cpp history/historypanel.cpp - history/sidepanel.cpp #---------------------------------------- rekonqpage/newtabpage.cpp #---------------------------------------- @@ -94,6 +94,7 @@ TARGET_LINK_LIBRARIES ( kdeinit_rekonq ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${KDE4_KPARTS_LIBS} + ${KDE4_THREADWEAVER_LIBRARIES} ) diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h index c07a9492..f01aaca0 100644 --- a/src/adblock/adblockmanager.h +++ b/src/adblock/adblockmanager.h @@ -110,11 +110,11 @@ // Qt Includes #include <QObject> #include <QNetworkReply> +#include <QStringList> // Forward Includes class QNetworkRequest; class WebPage; -class QStringList; // Definitions typedef QList<AdBlockRule> AdBlockRuleList; diff --git a/src/adblock/adblockrule.cpp b/src/adblock/adblockrule.cpp index c6fe47c9..9f86ffee 100644 --- a/src/adblock/adblockrule.cpp +++ b/src/adblock/adblockrule.cpp @@ -52,17 +52,22 @@ * ============================================================ */ +// Self Includes #include "adblockrule.h" +// Qt Includes +#include <QStringList> #include <QDebug> #include <QRegExp> #include <QUrl> +// Defines #define QL1S(x) QLatin1String(x) #define QL1C(x) QLatin1Char(x) AdBlockRule::AdBlockRule(const QString &filter) + : m_optionMatchRule(false) { bool isRegExpRule = false; @@ -75,11 +80,13 @@ AdBlockRule::AdBlockRule(const QString &filter) isRegExpRule = true; } - int options = parsedLine.indexOf( QL1C('$'), 0); - if (options >= 0) + int optionsNumber = parsedLine.indexOf( QL1C('$'), 0); + QStringList options; + + if (optionsNumber >= 0) { - m_options = parsedLine.mid(options + 1).split(QL1C(',')); - parsedLine = parsedLine.left(options); + options = parsedLine.mid(optionsNumber + 1).split(QL1C(',')); + parsedLine = parsedLine.left(optionsNumber); } if(!isRegExpRule) @@ -87,10 +94,10 @@ AdBlockRule::AdBlockRule(const QString &filter) m_regExp = QRegExp(parsedLine, Qt::CaseInsensitive, QRegExp::RegExp2); - if (m_options.contains( QL1S("match-case") )) + if ( options.contains( QL1S("match-case") )) { m_regExp.setCaseSensitivity(Qt::CaseSensitive); - m_options.removeOne( QL1S("match-case") ); + m_optionMatchRule = true; } } diff --git a/src/adblock/adblockrule.h b/src/adblock/adblockrule.h index 7c4c4161..35715051 100644 --- a/src/adblock/adblockrule.h +++ b/src/adblock/adblockrule.h @@ -55,11 +55,11 @@ #define ADBLOCKRULE_H // Qt Includes -#include <QStringList> +#include <QRegExp> +#include <QString> // Forward Includes class QUrl; -class QRegExp; class AdBlockRule @@ -73,7 +73,9 @@ private: QString convertPatternToRegExp(const QString &wildcardPattern); QRegExp m_regExp; - QStringList m_options; + + // Rule Options + bool m_optionMatchRule; }; diff --git a/src/application.cpp b/src/application.cpp index e06f6f15..05004f30 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -42,6 +42,8 @@ #include "urlbar.h" #include "sessionmanager.h" #include "adblockmanager.h" +#include "webview.h" +#include "filterurljob.h" // KDE Includes #include <KCmdLineArgs> @@ -53,6 +55,7 @@ #include <KMessageBox> #include <KWindowInfo> #include <KUrl> +#include <ThreadWeaver/Weaver> // Qt Includes #include <QRegExp> @@ -68,16 +71,21 @@ QPointer<AdBlockManager> Application::s_adblockManager; Application::Application() - : KUniqueApplication() + : KUniqueApplication() { + connect(Weaver::instance(), SIGNAL( jobDone(ThreadWeaver::Job*) ), + this, SLOT( loadResolvedUrl(ThreadWeaver::Job*) ) ); } Application::~Application() { qDeleteAll(m_mainWindows); + delete s_bookmarkProvider; delete s_historyManager; + delete s_sessionManager; + delete s_adblockManager; } @@ -290,8 +298,7 @@ void Application::loadUrl(const KUrl& url, const Rekonq::OpenType& type) switch(type) { case Rekonq::SettingOpenTab: - tab = w->mainView()->newWebTab(!ReKonfig::openTabsBack(), - ReKonfig::openTabsNearCurrent()); + tab = w->mainView()->newWebTab(!ReKonfig::openTabsBack(), ReKonfig::openTabsNearCurrent()); break; case Rekonq::NewCurrentTab: tab = w->mainView()->newWebTab(true); @@ -304,28 +311,13 @@ void Application::loadUrl(const KUrl& url, const Rekonq::OpenType& type) tab = w->mainView()->currentWebTab(); break; }; - - // this should let rekonq filtering URI info and supporting - // the beautiful KDE web browsing shortcuts - KUriFilterData data(loadingUrl.pathOrUrl()); - data.setCheckForExecutables(false); // if true, queries like "rekonq" or "dolphin" are considered as executables - loadingUrl = KUriFilter::self()->filterUri(data) ? data.uri().pathOrUrl() : QUrl::fromUserInput(loadingUrl.pathOrUrl()); - - // we are sure of the url now, let's add it to history - // anyway we store here just http sites because local and ftp ones are - // added trough the protocol handler and the other are ignored - if( url.protocol() == QLatin1String("http") || url.protocol() == QLatin1String("https") ) - historyManager()->addHistoryEntry( loadingUrl.prettyUrl() ); - if (!ReKonfig::openTabsBack()) - { - w->mainView()->urlBar()->setUrl(loadingUrl.prettyUrl()); - } + WebView *view = tab->view(); - if (tab) + if (view) { - tab->setFocus(); - tab->view()->load(loadingUrl); + FilterUrlJob *job = new FilterUrlJob(view, loadingUrl.pathOrUrl(), this); + Weaver::instance()->enqueue(job); } } @@ -340,7 +332,7 @@ void Application::loadUrl(const QString& urlString, const Rekonq::OpenType& typ MainWindow *Application::newMainWindow() { MainWindow *w = new MainWindow(); - w->mainView()->newWebTab(); // remember using newWebView and NOT newTab here!! + w->mainView()->newWebTab(); // remember using newWebTab and NOT newTab here!! m_mainWindows.prepend(w); w->show(); @@ -361,7 +353,6 @@ MainWindowList Application::mainWindowList() } - AdBlockManager *Application::adblockManager() { if(!s_adblockManager) @@ -370,4 +361,26 @@ AdBlockManager *Application::adblockManager() } return s_adblockManager; } + + +void Application::loadResolvedUrl(ThreadWeaver::Job *job) +{ + FilterUrlJob *threadedJob = static_cast<FilterUrlJob *>(job); + KUrl url = threadedJob->url(); + WebView *view = threadedJob->view(); + + if (view) + { + view->setFocus(); + view->load(url); + + // we are sure of the url now, let's add it to history + // anyway we store here just http sites because local and ftp ones are + // added trough the protocol handler and the other are ignored + if( url.protocol() == QLatin1String("http") || url.protocol() == QLatin1String("https") ) + historyManager()->addHistoryEntry( url.prettyUrl() ); + } + // Bye and thanks :) + delete threadedJob; +} diff --git a/src/application.h b/src/application.h index 12ff2e3b..4b951ded 100644 --- a/src/application.h +++ b/src/application.h @@ -35,6 +35,7 @@ #include <KIcon> #include <kio/job.h> #include <kio/jobclasses.h> +#include <ThreadWeaver/Job> // Qt Includes #include <QPointer> @@ -48,6 +49,7 @@ class HistoryManager; class MainWindow; class SessionManager; class AdBlockManager; +class WebView; typedef QList< QPointer<MainWindow> > MainWindowList; @@ -110,6 +112,7 @@ public: public slots: /** * Save application's configuration + * * @see ReKonfig::self()->writeConfig(); */ void saveConfiguration() const; @@ -133,6 +136,8 @@ private slots: */ void postLaunch(); + void loadResolvedUrl(ThreadWeaver::Job *); + private: static QPointer<HistoryManager> s_historyManager; static QPointer<BookmarkProvider> s_bookmarkProvider; diff --git a/src/bookmarks/bookmarkspanel.cpp b/src/bookmarks/bookmarkspanel.cpp index 97097fbb..9164dbb6 100644 --- a/src/bookmarks/bookmarkspanel.cpp +++ b/src/bookmarks/bookmarkspanel.cpp @@ -57,7 +57,6 @@ BookmarksPanel::BookmarksPanel(const QString &title, QWidget *parent, Qt::Window BookmarksPanel::~BookmarksPanel() { ReKonfig::setShowBookmarksPanel(!isHidden()); - delete ui; } @@ -73,7 +72,7 @@ void BookmarksPanel::setup() setObjectName("bookmarksPanel"); setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - ui = new QWidget(this); + QWidget *ui = new QWidget(this); // setup search bar QHBoxLayout *searchLayout = new QHBoxLayout; @@ -110,5 +109,5 @@ void BookmarksPanel::setup() treeView->setModel( proxy ); connect(search, SIGNAL(textChanged(QString)), proxy, SLOT(setFilterFixedString(QString))); - connect( treeView, SIGNAL( activated(QModelIndex) ), this, SLOT( bookmarkActivated(QModelIndex) ) ); + connect(treeView, SIGNAL( activated(QModelIndex) ), this, SLOT( bookmarkActivated(QModelIndex) ) ); } diff --git a/src/bookmarks/bookmarkspanel.h b/src/bookmarks/bookmarkspanel.h index b7c0b5ed..6c0e153f 100644 --- a/src/bookmarks/bookmarkspanel.h +++ b/src/bookmarks/bookmarkspanel.h @@ -38,7 +38,6 @@ class QModelIndex; class BookmarksPanel : public QDockWidget { Q_OBJECT - Q_DISABLE_COPY(BookmarksPanel) public: explicit BookmarksPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); @@ -52,8 +51,6 @@ private slots: private: void setup(); - - QWidget *ui; }; #endif // BOOKMARKSPANEL_H diff --git a/src/history/sidepanel.cpp b/src/filterurljob.cpp index 7c42301c..00bdee36 100644 --- a/src/history/sidepanel.cpp +++ b/src/filterurljob.cpp @@ -2,8 +2,7 @@ * * This file is a part of the rekonq project * -* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> * * * This program is free software; you can redistribute it and/or @@ -26,35 +25,43 @@ // Self Includes -#include "sidepanel.h" -#include "sidepanel.moc" +#include "filterurljob.h" -// Auto Includes -#include "rekonq.h" +// KDE Includes +#include <KUriFilter> +#include <KUriFilterData> -// Local Includes -#include "historypanel.h" +// Qt Includes +#include <QUrl> -SidePanel::SidePanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) - : QDockWidget(title, parent, flags) - , m_historyPanel(new HistoryPanel(this)) +FilterUrlJob::FilterUrlJob(WebView *view, const QString &urlString, QObject *parent) + : Job(parent) + , _view(view) + , _urlString(urlString) { - setObjectName("sidePanel"); - setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - - setShown(ReKonfig::showSideBar()); +} - connect(m_historyPanel, SIGNAL(openUrl(const KUrl&)), this, SIGNAL(openUrl(const KUrl&))); - setWidget(m_historyPanel); +WebView *FilterUrlJob::view() +{ + return _view; } -SidePanel::~SidePanel() +KUrl FilterUrlJob::url() { - // Save side panel's state - ReKonfig::setShowSideBar(!isHidden()); + return _url; +} + - delete m_historyPanel; +void FilterUrlJob::run() +{ + // this should let rekonq filtering URI info and supporting + // the beautiful KDE web browsing shortcuts + KUriFilterData data(_urlString); + data.setCheckForExecutables(false); // if true, queries like "rekonq" or "dolphin" are considered as executables + _url = KUriFilter::self()->filterUri(data) + ? data.uri().pathOrUrl() + : QUrl::fromUserInput( _urlString ); } diff --git a/src/history/sidepanel.h b/src/filterurljob.h index 6aca3587..3a9511ea 100644 --- a/src/history/sidepanel.h +++ b/src/filterurljob.h @@ -2,8 +2,7 @@ * * This file is a part of the rekonq project * -* Copyright (C) 2009 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com> +* Copyright (C) 2010 by Andrea Diamantini <adjam7 at gmail dot com> * * * This program is free software; you can redistribute it and/or @@ -25,34 +24,38 @@ * ============================================================ */ -#ifndef SIDEPANEL_H -#define SIDEPANEL_H +#ifndef FILTER_URL_JOB_H +#define FILTER_URL_JOB_H // Local Includes -#include "application.h" +#include "webview.h" + +// KDE Includes +#include <KUrl> +#include <ThreadWeaver/Job> // Qt Includes -#include <QDockWidget> +#include <QString> + -// Forward Declarations -class KUrl; -class HistoryPanel; +using namespace ThreadWeaver; -class SidePanel : public QDockWidget +class FilterUrlJob : public Job { - Q_OBJECT - public: - explicit SidePanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); - ~SidePanel(); - -signals: - void openUrl(const KUrl &); + FilterUrlJob(WebView *view, const QString &urlString, QObject *parent = 0); + WebView *view(); + KUrl url(); + +protected: + void run(); + private: - HistoryPanel *m_historyPanel; - + WebView *_view; + QString _urlString; + KUrl _url; }; -#endif // SIDEPANEL_H +#endif // FILTER_URL_JOB_H diff --git a/src/history/historypanel.cpp b/src/history/historypanel.cpp index 42497f9e..08dc3800 100644 --- a/src/history/historypanel.cpp +++ b/src/history/historypanel.cpp @@ -29,25 +29,52 @@ #include "historypanel.h" #include "historypanel.moc" +// Auto Includes +#include "rekonq.h" + +// Local Includes +#include "application.h" +#include "historymodels.h" + // Qt Includes #include <QtGui/QLabel> #include <QtGui/QHBoxLayout> #include <QtGui/QHeaderView> +#include <QtGui/QTreeView> + // KDE Includes #include <KLineEdit> #include <KLocalizedString> -HistoryPanel::HistoryPanel(QWidget *parent) - : QWidget(parent) - , m_historyTreeView(new QTreeView) - , m_treeProxyModel(new TreeProxyModel(this)) +HistoryPanel::HistoryPanel(const QString &title, QWidget *parent, Qt::WindowFlags flags) + : QDockWidget(title, parent, flags) +{ + setup(); + setShown(ReKonfig::showHistoryPanel()); +} + + +HistoryPanel::~HistoryPanel() +{ + // Save side panel's state + ReKonfig::setShowHistoryPanel(!isHidden()); +} + + +void HistoryPanel::setup() { - m_historyTreeView->setUniformRowHeights(true); - m_historyTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); - m_historyTreeView->setTextElideMode(Qt::ElideMiddle); - m_historyTreeView->setAlternatingRowColors(true); + setObjectName("historyPanel"); + setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + + QWidget *ui = new QWidget(this); + + QTreeView *historyTreeView = new QTreeView(this); + historyTreeView->setUniformRowHeights(true); + historyTreeView->setSelectionBehavior(QAbstractItemView::SelectRows); + historyTreeView->setTextElideMode(Qt::ElideMiddle); + historyTreeView->setAlternatingRowColors(true); // add search bar QHBoxLayout *hBoxLayout = new QHBoxLayout; @@ -60,42 +87,35 @@ HistoryPanel::HistoryPanel(QWidget *parent) QWidget *searchBar = new QWidget; searchBar->setLayout(hBoxLayout); - // setup view + // setup layout QVBoxLayout *vBoxLayout = new QVBoxLayout; vBoxLayout->setContentsMargins(0, 0, 0, 0); vBoxLayout->addWidget(searchBar); - vBoxLayout->addWidget(m_historyTreeView); - setLayout(vBoxLayout); + vBoxLayout->addWidget(historyTreeView); + + // add it to the UI + ui->setLayout(vBoxLayout); + setWidget(ui); //- HistoryManager *historyManager = Application::historyManager(); QAbstractItemModel *model = historyManager->historyTreeModel(); - m_treeProxyModel->setSourceModel(model); - m_historyTreeView->setModel(m_treeProxyModel); - m_historyTreeView->setExpanded(m_treeProxyModel->index(0, 0), true); - m_historyTreeView->header()->hideSection(1); + TreeProxyModel *treeProxyModel = new TreeProxyModel(this); + treeProxyModel->setSourceModel(model); + historyTreeView->setModel(treeProxyModel); + historyTreeView->setExpanded(treeProxyModel->index(0, 0), true); + historyTreeView->header()->hideSection(1); QFontMetrics fm(font()); int header = fm.width(QLatin1Char('m')) * 40; - m_historyTreeView->header()->resizeSection(0, header); - - connect(search, SIGNAL(textChanged(QString)), m_treeProxyModel, SLOT(setFilterFixedString(QString))); - connect(m_historyTreeView, SIGNAL(activated(const QModelIndex&)), this, SLOT(open())); -} - + historyTreeView->header()->resizeSection(0, header); -HistoryPanel::~HistoryPanel() -{ - delete m_treeProxyModel; - delete m_historyTreeView; + connect(search, SIGNAL(textChanged(QString)), treeProxyModel, SLOT(setFilterFixedString(QString))); + connect(historyTreeView, SIGNAL(activated(const QModelIndex &)), this, SLOT(itemActivated(const QModelIndex &))); } -void HistoryPanel::open() +void HistoryPanel::itemActivated(const QModelIndex &item) { - QModelIndex index = m_historyTreeView->currentIndex(); - if (!index.parent().isValid()) - return; - emit openUrl(index.data(HistoryModel::UrlRole).toUrl()); + emit openUrl( item.data(HistoryModel::UrlRole).toUrl() ); } - diff --git a/src/history/historypanel.h b/src/history/historypanel.h index 083b2741..e07e2190 100644 --- a/src/history/historypanel.h +++ b/src/history/historypanel.h @@ -29,36 +29,31 @@ #define HISTORYPANEL_H -// Local Includes -#include "application.h" -#include "historymodels.h" - // Qt Includes -#include <QtGui/QWidget> -#include <QtGui/QTreeView> +#include <QDockWidget> // Forward Declarations class KUrl; +class QWidget; +class QModelIndex; -class HistoryPanel : public QWidget +class HistoryPanel : public QDockWidget { Q_OBJECT public: - explicit HistoryPanel(QWidget *parent = 0); - virtual ~HistoryPanel(); + explicit HistoryPanel(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0); + ~HistoryPanel(); signals: void openUrl(const KUrl &); private slots: - void open(); + void itemActivated(const QModelIndex &); private: - QTreeView *m_historyTreeView; - TreeProxyModel *m_treeProxyModel; - + void setup(); }; #endif // HISTORYPANEL_H diff --git a/src/mainview.cpp b/src/mainview.cpp index 7dbe8b23..b26e7466 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -146,14 +146,11 @@ void MainView::updateTabButtonPosition() if (tabWidthHint < sizeHint().width()/4) newPosX = tabWidgetWidth - m_addTabButton->width(); - // detecting Y position - int newPosY = m_tabBar->height() - m_addTabButton->height(); - if(newPosY < 0) - newPosY = 5; // this hardcoded value is used in just ONE situation: - // the first time an user changes the "Always Show Tab Bar" settings - // try some better fixes, if you can :D - - m_addTabButton->move(newPosX, newPosY); + // Y position is fixed + // Here I noticed with some emphiric valutations ( :D ) + // that 2 look better than 0, just that.. + + m_addTabButton->move(newPosX, 2); } } @@ -511,7 +508,7 @@ void MainView::closeTab(int index) removeTab(index); updateTabBar(); // UI operation: do it ASAP!! - delete tab; // webView is scheduled for deletion. + tab->deleteLater(); // webView is scheduled for deletion. emit tabsChanged(); diff --git a/src/mainview.h b/src/mainview.h index f8a8c283..908389b1 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -148,7 +148,7 @@ private slots: void postLaunch(); - + protected: virtual void resizeEvent(QResizeEvent *event); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 9352ec36..df600c05 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -40,9 +40,9 @@ #include "webtab.h" #include "mainview.h" #include "findbar.h" -#include "sidepanel.h" +#include "historypanel.h" #include "bookmarkspanel.h" -#include "webinspectordock.h" +#include "webinspectorpanel.h" #include "urlbar.h" #include "tabbar.h" #include "adblockmanager.h" @@ -98,9 +98,9 @@ MainWindow::MainWindow() : KMainWindow() , m_view( new MainView(this) ) , m_findBar( new FindBar(this) ) - , m_sidePanel(0) + , m_historyPanel(0) , m_bookmarksPanel(0) - , m_webInspectorDock(0) + , m_webInspectorPanel(0) , m_historyBackMenu(0) , m_mainBar( new KToolBar( QString("MainToolBar"), this, Qt::TopToolBarArea, true, false, false) ) , m_bmBar( new KToolBar( QString("BookmarkToolBar"), this, Qt::TopToolBarArea, true, false, false) ) @@ -134,10 +134,8 @@ MainWindow::MainWindow() // then, setup our actions setupActions(); - // setting Side Panel - setupSidePanel(); - setupBookmarksPanel(); - setupWebInspector(); + // setting Panels + setupPanels(); // setting up rekonq tools setupTools(); @@ -166,17 +164,6 @@ MainWindow::~MainWindow() } -SidePanel *MainWindow::sidePanel() -{ - return m_sidePanel; -} - -BookmarksPanel *MainWindow::bookmarksPanel() -{ - return m_bookmarksPanel; -} - - void MainWindow::setupToolbars() { // ============ Main ToolBar ================================ @@ -200,7 +187,7 @@ void MainWindow::setupToolbars() m_bmBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); m_bmBar->setAcceptDrops(true); m_bmBar->setContextMenuPolicy(Qt::CustomContextMenu); - + m_bmBar->setIconDimensions(16); Application::bookmarkProvider()->setupBookmarkBar(m_bmBar); } @@ -459,51 +446,50 @@ void MainWindow::setupTools() } -void MainWindow::setupSidePanel() +void MainWindow::setupPanels() { - // Setup history side panel - m_sidePanel = new SidePanel(i18n("History Panel"), this); - connect(m_sidePanel, SIGNAL(openUrl(const KUrl&)), Application::instance(), SLOT(loadUrl(const KUrl&))); - connect(m_sidePanel, SIGNAL(destroyed()), Application::instance(), SLOT(saveConfiguration())); + KAction* a; + + // STEP 1 + // Setup history panel + m_historyPanel = new HistoryPanel(i18n("History Panel"), this); + connect(m_historyPanel, SIGNAL(openUrl(const KUrl&)), Application::instance(), SLOT(loadUrl(const KUrl&))); + connect(m_historyPanel, SIGNAL(destroyed()), Application::instance(), SLOT(saveConfiguration())); - addDockWidget(Qt::LeftDockWidgetArea, m_sidePanel); + addDockWidget(Qt::LeftDockWidgetArea, m_historyPanel); - // setup side panel actions - KAction* a = (KAction *) m_sidePanel->toggleViewAction(); - a->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_H)); + // setup history panel action + a = (KAction *) m_historyPanel->toggleViewAction(); + a->setShortcut( QKeySequence(Qt::CTRL + Qt::Key_H) ); a->setIcon(KIcon("view-history")); actionCollection()->addAction(QLatin1String("show_history_panel"), a); -} - -void MainWindow::setupBookmarksPanel() -{ + // STEP 2 + // Setup bookmarks panel m_bookmarksPanel = new BookmarksPanel(i18n("Bookmarks Panel"), this); connect(m_bookmarksPanel, SIGNAL(openUrl(const KUrl&)), Application::instance(), SLOT(loadUrl(const KUrl&))); connect(m_bookmarksPanel, SIGNAL(destroyed()), Application::instance(), SLOT(saveConfiguration())); addDockWidget(Qt::LeftDockWidgetArea, m_bookmarksPanel); - // setup side panel actions - KAction* a = (KAction *) m_bookmarksPanel->toggleViewAction(); - a->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_B)); + // setup bookmarks panel action + a = (KAction *) m_bookmarksPanel->toggleViewAction(); + a->setShortcut( QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_B) ); a->setIcon(KIcon("bookmarks-organize")); actionCollection()->addAction(QLatin1String("show_bookmarks_panel"), a); -} - -void MainWindow::setupWebInspector() -{ - m_webInspectorDock = new WebInspectorDock(i18n("Web Inspector"), this); - connect(mainView(), SIGNAL(currentChanged(int)), m_webInspectorDock, SLOT(changeCurrentPage())); + // STEP 3 + // Setup webinspector panel + m_webInspectorPanel = new WebInspectorPanel(i18n("Web Inspector"), this); + connect(mainView(), SIGNAL(currentChanged(int)), m_webInspectorPanel, SLOT(changeCurrentPage())); - KAction *a = new KAction(KIcon("tools-report-bug"), i18n("Web &Inspector"), this); + a = new KAction(KIcon("tools-report-bug"), i18n("Web &Inspector"), this); a->setCheckable(true); actionCollection()->addAction(QLatin1String("web_inspector"), a); - connect(a, SIGNAL(triggered(bool)), m_webInspectorDock, SLOT(toggle(bool))); + connect(a, SIGNAL(triggered(bool)), m_webInspectorPanel, SLOT(toggle(bool))); - addDockWidget(Qt::BottomDockWidgetArea, m_webInspectorDock); - m_webInspectorDock->hide(); + addDockWidget(Qt::BottomDockWidgetArea, m_webInspectorPanel); + m_webInspectorPanel->hide(); } @@ -710,13 +696,12 @@ void MainWindow::privateBrowsing(bool enable) "<p>When private browsing is turned on," " web pages are not added to the history," " new cookies are not stored, current cookies cannot be accessed," - " site icons will not be stored, the session will not be saved, " - " and searches are not added to the pop-up menu in the Google search box." - " Until you close the window, you can still click the Back and Forward buttons" + " site icons will not be stored, the session will not be saved." + " Until you close the window, you can still click the Back and Forward buttons" " to return to the web pages you have opened.</p>", title); - int button = KMessageBox::questionYesNo(this, text, title); - if (button == KMessageBox::Yes) + int button = KMessageBox::warningContinueCancel(this, text, title); + if (button == KMessageBox::Continue) { settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); m_view->urlBar()->setBackgroundColor(Qt::lightGray); // palette().color(QPalette::Active, QPalette::Background)); @@ -808,7 +793,7 @@ void MainWindow::setWidgetsVisible(bool makeVisible) { // state flags static bool bookmarksToolBarFlag; - static bool sidePanelFlag; + static bool historyPanelFlag; static bool bookmarksPanelFlag; if (!makeVisible) @@ -817,14 +802,14 @@ void MainWindow::setWidgetsVisible(bool makeVisible) if (!isFullScreen()) { bookmarksToolBarFlag = m_bmBar->isHidden(); - sidePanelFlag = sidePanel()->isHidden(); - bookmarksPanelFlag = bookmarksPanel()->isHidden(); + historyPanelFlag = m_historyPanel->isHidden(); + bookmarksPanelFlag = m_bookmarksPanel->isHidden(); } m_bmBar->hide(); m_view->setTabBarHidden(true); - sidePanel()->hide(); - bookmarksPanel()->hide(); + m_historyPanel->hide(); + m_bookmarksPanel->hide(); // hide main toolbar m_mainBar->hide(); @@ -838,10 +823,10 @@ void MainWindow::setWidgetsVisible(bool makeVisible) // restore state of windowed mode if (!bookmarksToolBarFlag) m_bmBar->show(); - if (!sidePanelFlag) - sidePanel()->show(); + if (!historyPanelFlag) + m_historyPanel->show(); if (!bookmarksPanelFlag) - bookmarksPanel()->show(); + m_bookmarksPanel->show(); } } diff --git a/src/mainwindow.h b/src/mainwindow.h index 49dc2a59..7083591d 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -46,9 +46,9 @@ class KAction; class KPassivePopup; class FindBar; -class SidePanel; +class HistoryPanel; class BookmarksPanel; -class WebInspectorDock; +class WebInspectorPanel; class WebTab; class MainView; @@ -77,15 +77,8 @@ private: void setupActions(); void setupTools(); void setupToolbars(); - - void setupSidePanel(); - SidePanel *sidePanel(); - - void setupBookmarksPanel(); - BookmarksPanel *bookmarksPanel(); + void setupPanels(); - void setupWebInspector(); - public slots: void updateBrowser(); void homePage(); @@ -159,9 +152,10 @@ private slots: private: MainView *m_view; FindBar *m_findBar; - SidePanel *m_sidePanel; + + HistoryPanel *m_historyPanel; BookmarksPanel *m_bookmarksPanel; - WebInspectorDock *m_webInspectorDock; + WebInspectorPanel *m_webInspectorPanel; KAction *m_stopReloadAction; KMenu *m_historyBackMenu; @@ -178,4 +172,3 @@ private: }; #endif // MAINWINDOW_H - diff --git a/src/networkaccessmanager.cpp b/src/networkaccessmanager.cpp index 7d6bf434..eadbfab3 100644 --- a/src/networkaccessmanager.cpp +++ b/src/networkaccessmanager.cpp @@ -41,14 +41,6 @@ NetworkAccessManager::NetworkAccessManager(QObject *parent) QNetworkReply *NetworkAccessManager::createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData) { - if (op == PostOperation && outgoingData) - { - QByteArray outgoingDataByteArray = outgoingData->peek(1024 * 1024); - kDebug() << "*************************************************************************"; - kDebug() << outgoingDataByteArray; - kDebug() << "*************************************************************************"; - } - // Adblock if (op == QNetworkAccessManager::GetOperation) { diff --git a/src/previewimage.cpp b/src/previewimage.cpp index 80757ca2..9c8bb194 100644 --- a/src/previewimage.cpp +++ b/src/previewimage.cpp @@ -29,7 +29,6 @@ #include "previewimage.moc" // Local Includes -#include "application.h" #include "historymanager.h" #include "rekonq.h" #include "mainwindow.h" @@ -103,6 +102,9 @@ PreviewImage::PreviewImage(const QUrl &url, const QString &title, int index, boo layout()->setAlignment(Qt::AlignCenter); layout()->addWidget(m_previewLabel); + connect(this, SIGNAL(loadUrl(const KUrl &, const Rekonq::OpenType &)), + Application::instance(), SLOT(loadUrl(const KUrl &, const Rekonq::OpenType &))); + loadUrlPreview(url); } @@ -260,12 +262,12 @@ void PreviewImage::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { - Application::instance()->loadUrl(m_url); + emit loadUrl(m_url, Rekonq::CurrentTab); return; } else if(event->button() == Qt::MidButton) { - Application::instance()->loadUrl(m_url, Rekonq::SettingOpenTab); + emit loadUrl(m_url, Rekonq::SettingOpenTab); return; } diff --git a/src/previewimage.h b/src/previewimage.h index e9504210..4dd8df3b 100644 --- a/src/previewimage.h +++ b/src/previewimage.h @@ -29,6 +29,7 @@ // Local Includes #include "websnap.h" +#include "application.h" // KDE Includes #include <KActionMenu> @@ -58,6 +59,9 @@ public slots: void setUrlFromAction(); void refreshPreview(); +signals: + void loadUrl(const KUrl &, const Rekonq::OpenType &); + protected: void contextMenuEvent(QContextMenuEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); diff --git a/src/rekonq.kcfg b/src/rekonq.kcfg index f74fb144..a24508fc 100644 --- a/src/rekonq.kcfg +++ b/src/rekonq.kcfg @@ -35,7 +35,7 @@ <entry name="homePage" type="String"> <default>http://www.kde.org/</default> </entry> - <entry name="showSideBar" type="Bool"> + <entry name="showHistoryPanel" type="Bool"> <default>false</default> </entry> <entry name="showBookmarksPanel" type="Bool"> diff --git a/src/settings/settings_general.ui b/src/settings/settings_general.ui index 17ac0d0f..a4503d4a 100644 --- a/src/settings/settings_general.ui +++ b/src/settings/settings_general.ui @@ -244,22 +244,22 @@ </property> <item> <property name="text"> - <string>favorites</string> + <string>Favorites</string> </property> </item> <item> <property name="text"> - <string>closed tabs</string> + <string>Closed Tabs</string> </property> </item> <item> <property name="text"> - <string>history</string> + <string>Bookmarks</string> </property> </item> <item> <property name="text"> - <string>bookmarks</string> + <string>History</string> </property> </item> </widget> @@ -276,12 +276,15 @@ <item> <widget class="QCheckBox" name="kcfg_kgetDownload"> <property name="text"> - <string>Download with KGet</string> + <string>Use KGet for downloading files</string> </property> </widget> </item> <item> <widget class="QCheckBox" name="kcfg_kgetList"> + <property name="whatsThis"> + <string>If enabled, rekonq will display an additional context menu entry, which, when selected, lists all available links of the current website in KGet.</string> + </property> <property name="text"> <string>List links with KGet</string> </property> diff --git a/src/tabbar.cpp b/src/tabbar.cpp index 12745772..460a2464 100644 --- a/src/tabbar.cpp +++ b/src/tabbar.cpp @@ -153,8 +153,8 @@ void TabBar::showTabPreview(int tab) WebTab *view = mv->webTab(tab); WebTab *currentView = mv->webTab(currentIndex()); - // should fix bug #212219 - if(!currentView) + // check if view && currentView exist before using them :) + if(!currentView || !view) return; int w = tabSizeHint(tab).width(); @@ -199,7 +199,7 @@ void TabBar::mouseMoveEvent(QMouseEvent *event) } //if found and not the current tab then show tab preview - if (tab != -1 && tab != currentIndex() && m_currentTabPreview != tab) + if (tab != -1 && tab != currentIndex() && m_currentTabPreview != tab && event->buttons() == Qt::NoButton) { showTabPreview(tab); m_currentTabPreview = tab; diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp index be19dae4..adeba6ae 100644 --- a/src/urlbar/urlbar.cpp +++ b/src/urlbar/urlbar.cpp @@ -140,13 +140,15 @@ void UrlBar::setUrl(const QUrl& url) if(url.scheme() == "about") { m_currentUrl = KUrl(); + updateUrl(); // updateUrl before setFocus setFocus(); } else { m_currentUrl = KUrl(url); + updateUrl(); } - updateUrl(); + } @@ -302,36 +304,43 @@ bool UrlBar::isLoading() return true; } + void UrlBar::keyPressEvent(QKeyEvent *event) { QString currentText = m_lineEdit->text().trimmed(); - if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) - && !currentText.startsWith(QLatin1String("http://"), Qt::CaseInsensitive)) + if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) { - QString append; - if (event->modifiers() == Qt::ControlModifier) + if( !currentText.startsWith(QLatin1String("http://"), Qt::CaseInsensitive) ) { - append = QLatin1String(".com"); + QString append; + if (event->modifiers() == Qt::ControlModifier) + { + append = QLatin1String(".com"); + } + else if (event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)) + { + append = QLatin1String(".org"); + } + else if (event->modifiers() == Qt::ShiftModifier) + { + append = QLatin1String(".net"); + } + + QUrl url(QLatin1String("http://www.") + currentText); + QString host = url.host(); + if (!host.endsWith(append, Qt::CaseInsensitive)) + { + host += append; + url.setHost(host); + m_lineEdit->setText(url.toString()); + } } - else if (event->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)) - { - append = QLatin1String(".org"); - } - else if (event->modifiers() == Qt::ShiftModifier) - { - append = QLatin1String(".net"); - } - - QUrl url(QLatin1String("http://www.") + currentText); - QString host = url.host(); - if (!host.endsWith(append, Qt::CaseInsensitive)) + else { - host += append; - url.setHost(host); - m_lineEdit->setText(url.toString()); + // fill lineEdit with its stripped contents to remove trailing spaces + m_lineEdit->setText(currentText); } } KHistoryComboBox::keyPressEvent(event); } - diff --git a/src/webinspectordock.cpp b/src/webinspectorpanel.cpp index 2c17a607..a038d280 100644 --- a/src/webinspectordock.cpp +++ b/src/webinspectorpanel.cpp @@ -23,9 +23,10 @@ * * ============================================================ */ + // Self Includes -#include "webinspectordock.h" -#include "webinspectordock.moc" +#include "webinspectorpanel.h" +#include "webinspectorpanel.moc" // Local Includes #include "webtab.h" @@ -40,27 +41,28 @@ #include <QWebInspector> -WebInspectorDock::WebInspectorDock(QString title, QWidget *parent) +WebInspectorPanel::WebInspectorPanel(QString title, QWidget *parent) : QDockWidget(title, parent) { setObjectName("webInspectorDock"); - QWebInspector *inspector = new QWebInspector(this); - setWidget(inspector); + setWidget( new QWebInspector(this) ); } -void WebInspectorDock::closeEvent(QCloseEvent *event) + +void WebInspectorPanel::closeEvent(QCloseEvent *event) { Q_UNUSED(event); toggle(false); } -MainWindow* WebInspectorDock::mainWindow() + +MainWindow* WebInspectorPanel::mainWindow() { return qobject_cast< MainWindow* >(parentWidget()); } -void WebInspectorDock::toggle(bool enable) +void WebInspectorPanel::toggle(bool enable) { mainWindow()->actionByName("web_inspector")->setChecked(enable); if (enable) @@ -77,7 +79,7 @@ void WebInspectorDock::toggle(bool enable) } -void WebInspectorDock::changeCurrentPage() +void WebInspectorPanel::changeCurrentPage() { bool enable = mainWindow()->currentTab()->view()->settings()->testAttribute(QWebSettings::DeveloperExtrasEnabled); toggle(enable); diff --git a/src/webinspectordock.h b/src/webinspectorpanel.h index c6697361..8f65b48a 100644 --- a/src/webinspectordock.h +++ b/src/webinspectorpanel.h @@ -24,8 +24,8 @@ * ============================================================ */ -#ifndef WEBINSPECTORDOCK_H -#define WEBINSPECTORDOCK_H +#ifndef WEBINSPECTOR_PANEL_H +#define WEBINSPECTOR_PANEL_H // Local Includes @@ -38,11 +38,11 @@ Docked web inspector behaviour : hide/show by tab, not globally */ -class WebInspectorDock : public QDockWidget +class WebInspectorPanel : public QDockWidget { Q_OBJECT public: - WebInspectorDock(QString title, QWidget *parent); + WebInspectorPanel(QString title, QWidget *parent); public slots: void toggle(bool enable); @@ -55,4 +55,4 @@ protected: }; -#endif
\ No newline at end of file +#endif diff --git a/src/webpage.cpp b/src/webpage.cpp index 6bf172a6..b2bedffc 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -73,11 +73,19 @@ WebPage::WebPage(QObject *parent) : KWebPage(parent, KWalletIntegration) { - // rekonq own classes integration - setNetworkAccessManager(new NetworkAccessManager(this)); + setForwardUnsupportedContent(true); + + // rekonq Network Manager + NetworkAccessManager *manager = new NetworkAccessManager(this); + + // disable QtWebKit cache to just use KIO one.. + manager->setCache(0); + + setNetworkAccessManager(manager); + + // Web Plugin Factory setPluginFactory(new WebPluginFactory(this)); - setForwardUnsupportedContent(true); connect(networkAccessManager(), SIGNAL(finished(QNetworkReply*)), this, SLOT(manageNetworkErrors(QNetworkReply*))); @@ -91,6 +99,7 @@ WebPage::WebPage(QObject *parent) WebPage::~WebPage() { + disconnect(); } diff --git a/src/webtab.cpp b/src/webtab.cpp index 908fc7a3..b1f2cdfc 100644 --- a/src/webtab.cpp +++ b/src/webtab.cpp @@ -91,8 +91,6 @@ WebTab::WebTab(QWidget* parent) connect(m_view, SIGNAL(loadProgress(int)), this, SLOT(updateProgress(int))); connect(m_view, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); - - connect(m_view, SIGNAL(linkMiddleOrCtrlClicked(const KUrl &)), this, SLOT(loadInNewTab(const KUrl &)) ); } @@ -110,7 +108,7 @@ WebView *WebTab::view() WebPage *WebTab::page() { - return m_view->page(); + return m_view->page(); // FIXME } @@ -150,12 +148,6 @@ void WebTab::loadFinished(bool) } -void WebTab::loadInNewTab(const KUrl &url) -{ - Application::instance()->loadUrl(url, Rekonq::SettingOpenTab); -} - - void WebTab::createWalletBar(const QString &key, const QUrl &url) { KWebWallet *wallet = page()->wallet(); diff --git a/src/webtab.h b/src/webtab.h index 2eb8d733..ecf8e5b3 100644 --- a/src/webtab.h +++ b/src/webtab.h @@ -57,10 +57,8 @@ private slots: void updateProgress(int progress); void loadFinished(bool); - void loadInNewTab(const KUrl &url); - void createWalletBar(const QString &, const QUrl &); - + private: WebView *const m_view; int m_progress; diff --git a/src/webview.cpp b/src/webview.cpp index 292eb364..232a2633 100644 --- a/src/webview.cpp +++ b/src/webview.cpp @@ -33,7 +33,6 @@ #include "rekonq.h" // Local Includes -#include "application.h" #include "mainwindow.h" #include "mainview.h" #include "webpage.h" @@ -60,6 +59,7 @@ #include <QtDBus/QDBusReply> #include <QDir> + WebView::WebView(QWidget* parent) : KWebView(parent, false) , m_page( new WebPage(this) ) @@ -68,8 +68,18 @@ WebView::WebView(QWidget* parent) setPage(m_page); // download system - connect(this, SIGNAL(linkShiftClicked(const KUrl &)), m_page, SLOT(downloadUrl(const KUrl &))); - connect(m_page, SIGNAL(downloadRequested(const QNetworkRequest &)), m_page, SLOT(downloadRequest(const QNetworkRequest &))); + connect(this, SIGNAL(linkShiftClicked(const KUrl &)), + m_page, SLOT(downloadUrl(const KUrl &))); + connect(m_page, SIGNAL(downloadRequested(const QNetworkRequest &)), + m_page, SLOT(downloadRequest(const QNetworkRequest &))); + + // middle click || ctrl + click signal + connect(this, SIGNAL(linkMiddleOrCtrlClicked(const KUrl &)), + this, SLOT(loadUrlInNewTab(const KUrl &)) ); + + // loadUrl signal + connect(this, SIGNAL(loadUrl(const KUrl &, const Rekonq::OpenType &)), + Application::instance(), SLOT(loadUrl(const KUrl &, const Rekonq::OpenType &))); } @@ -268,7 +278,7 @@ void WebView::contextMenuEvent(QContextMenuEvent *event) if (ReKonfig::kgetList()) { - a = new KAction(KIcon("kget"), i18n("List all links"), this); + a = new KAction(KIcon("kget"), i18n("List All Links"), this); connect(a, SIGNAL(triggered(bool)), page(), SLOT(downloadAllContentsWithKGet())); menu.addAction(a); } @@ -340,7 +350,8 @@ void WebView::search() KAction *a = qobject_cast<KAction*>(sender()); QString search = a->data().toString() + selectedText(); KUrl urlSearch = KUrl::fromEncoded(search.toUtf8()); - Application::instance()->loadUrl(urlSearch, Rekonq::NewCurrentTab); + + emit loadUrl(urlSearch, Rekonq::NewCurrentTab); } @@ -357,11 +368,11 @@ void WebView::viewImage(Qt::MouseButtons buttons, Qt::KeyboardModifiers modifier if (modifiers & Qt::ControlModifier || buttons == Qt::MidButton) { - Application::instance()->loadUrl(url, Rekonq::SettingOpenTab); + emit loadUrl(url, Rekonq::SettingOpenTab); } else { - Application::instance()->loadUrl(url, Rekonq::CurrentTab); + emit loadUrl(url, Rekonq::CurrentTab); } } @@ -370,7 +381,8 @@ void WebView::openLinkInNewWindow() { KAction *a = qobject_cast<KAction*>(sender()); KUrl url(a->data().toUrl()); - Application::instance()->loadUrl(url, Rekonq::NewWindow); + + emit loadUrl(url, Rekonq::NewWindow); } @@ -378,7 +390,8 @@ void WebView::openLinkInNewTab() { KAction *a = qobject_cast<KAction*>(sender()); KUrl url(a->data().toUrl()); - Application::instance()->loadUrl(url, Rekonq::SettingOpenTab); + + emit loadUrl(url, Rekonq::SettingOpenTab); } @@ -406,3 +419,9 @@ void WebView::inspect() if(a && !a->isChecked()) a->trigger(); } + + +void WebView::loadUrlInNewTab(const KUrl &url) +{ + emit loadUrl(url, Rekonq::SettingOpenTab); +} diff --git a/src/webview.h b/src/webview.h index d34d108b..263b2ec4 100644 --- a/src/webview.h +++ b/src/webview.h @@ -28,12 +28,16 @@ #ifndef WEBVIEW_H #define WEBVIEW_H +// Local Includes +#include "application.h" + // KDE Includes #include <KWebView> // Forward Declarations class WebPage; + class WebView : public KWebView { Q_OBJECT @@ -56,11 +60,16 @@ private slots: void printFrame(); + void loadUrlInNewTab(const KUrl &); void openLinkInNewWindow(); void openLinkInNewTab(); + void viewImage(Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); void inspect(); +signals: + void loadUrl(const KUrl &, const Rekonq::OpenType &); + private: WebPage *const m_page; QPoint m_mousePos; |