From 7c981aa978bea7551aec99bc3c68a23cd6c8df00 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Fri, 22 Oct 2010 00:04:47 +0200 Subject: This commit implements the new private browsign mode for rekonq: - it implements a new KAaction in the Application class to trace changes on - stops session management and save it, restoring last visited sites on restoring mormal mode - implements necessary changes to iconmanager, urlbar & application Please, note that the private browsing mode will definitely work just on KDE SC 4.6, cause of the needed changes in kdewebkit to eg handle cookies and so on.. . Hope you like it :) --- src/application.cpp | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/application.h | 11 +++++++++- src/iconmanager.cpp | 6 +---- src/mainwindow.cpp | 46 +++++--------------------------------- src/mainwindow.h | 3 --- src/urlbar/urlbar.cpp | 18 +++++++-------- src/urlbar/urlbar.h | 2 -- 7 files changed, 87 insertions(+), 60 deletions(-) (limited to 'src') diff --git a/src/application.cpp b/src/application.cpp index 233be527..cadfa50f 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -55,10 +55,12 @@ #include #include #include +#include // Qt Includes #include + QWeakPointer Application::s_adblockManager; QWeakPointer Application::s_bookmarkProvider; QWeakPointer Application::s_historyManager; @@ -66,13 +68,20 @@ QWeakPointer Application::s_iconManager; QWeakPointer Application::s_opensearchManager; QWeakPointer Application::s_sessionManager; + using namespace ThreadWeaver; + Application::Application() : KUniqueApplication() + , _privateBrowsingAction(0) { connect(Weaver::instance(), SIGNAL(jobDone(ThreadWeaver::Job*)), this, SLOT(loadResolvedUrl(ThreadWeaver::Job*))); + + _privateBrowsingAction = new KAction(KIcon("view-media-artist"), i18n("Private &Browsing"), this); + _privateBrowsingAction->setCheckable(true); + connect(_privateBrowsingAction, SIGNAL(triggered(bool)), this, SLOT(setPrivateBrowsingMode(bool))); } @@ -575,3 +584,55 @@ bool Application::clearDownloadsHistory() QFile downloadFile(downloadFilePath); return downloadFile.remove(); } + + +void Application::setPrivateBrowsingMode(bool b) +{ +// NOTE +// to let work nicely Private Browsing, we need the following: +// - enable WebKit Private Browsing mode :) +// - treat all cookies as session cookies +// (so that they do not get saved to a persistent storage). Available from KDE SC 4.5.72, see BUG: 250122 +// - favicons (fixed in rekonq 0.5.87) +// - save actual session (to restore it when Private Mode is closed) and stop storing it +// - disable history saving + + QWebSettings *settings = QWebSettings::globalSettings(); + bool isJustEnabled = settings->testAttribute(QWebSettings::PrivateBrowsingEnabled); + if(isJustEnabled == b) + return; // uhm... something goes wrong... + + if (b) + { + QString caption = i18n("Are you sure you want to turn on private browsing?"); + QString text = i18n("%1" + "

rekonq will save your current tabs for when you'll stop private browsing the net..

", caption); + + int button = KMessageBox::warningContinueCancel(mainWindow(), text, caption, KStandardGuiItem::cont(), KStandardGuiItem::cancel(), i18n("don't ask again") ); + if (button != KMessageBox::Continue) + return; + + settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); + _privateBrowsingAction->setChecked(true); + + Q_FOREACH(const QWeakPointer &w, m_mainWindows) + { + w.data()->close(); + } + loadUrl( KUrl("about:home"), Rekonq::NewWindow); + } + else + { + Q_FOREACH(const QWeakPointer &w, m_mainWindows) + { + w.data()->close(); + } + + settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, false); + _privateBrowsingAction->setChecked(false); + + loadUrl( KUrl("about:blank"), Rekonq::NewWindow); + if(!sessionManager()->restoreSession()) + loadUrl( KUrl("about:home"), Rekonq::NewWindow); + } +} diff --git a/src/application.h b/src/application.h index 8afb956f..b30e337c 100644 --- a/src/application.h +++ b/src/application.h @@ -50,6 +50,9 @@ class MainWindow; class OpenSearchManager; class SessionManager; +class KAction; + + namespace ThreadWeaver {class Job;} @@ -107,6 +110,8 @@ public: void addDownload(const QString &srcUrl, const QString &destUrl); DownloadList downloads(); bool clearDownloadsHistory(); + + KAction *privateBrowsingAction() { return _privateBrowsingAction; }; public slots: /** @@ -124,7 +129,6 @@ public slots: void removeMainWindow(MainWindow *window); private slots: - /** * Any actions that can be delayed until the window is visible */ @@ -134,6 +138,9 @@ private slots: void updateConfiguration(); + // the general place to set private browsing + void setPrivateBrowsingMode(bool); + private: static QWeakPointer s_historyManager; static QWeakPointer s_bookmarkProvider; @@ -143,6 +150,8 @@ private: static QWeakPointer s_iconManager; MainWindowList m_mainWindows; + + KAction *_privateBrowsingAction; }; #endif // APPLICATION_H diff --git a/src/iconmanager.cpp b/src/iconmanager.cpp index 5086c59d..f5b60ea6 100644 --- a/src/iconmanager.cpp +++ b/src/iconmanager.cpp @@ -65,10 +65,6 @@ KIcon IconManager::iconForUrl(const KUrl &url) // first things first.. avoid infinite loop at startup if (url.isEmpty() || Application::instance()->mainWindowList().isEmpty()) return KIcon("text-html"); - - // no icons in private browsing.. - if(QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - return KIcon("view-media-artist"); QByteArray encodedUrl = url.toEncoded(); // rekonq icons.. @@ -114,7 +110,7 @@ void IconManager::provideIcon(QWebPage *page, const KUrl &url, bool notify) return; } - // no icons in private browsing.. + // do not load new icons in private browsing.. if(QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) { kDebug() << "Private browsing, private icon..."; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 555e58ae..7b4cf8a3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -408,11 +408,9 @@ void MainWindow::setupActions() actionCollection()->addAction(QL1S("page_source"), a); connect(a, SIGNAL(triggered(bool)), this, SLOT(viewPageSource())); - a = new KAction(KIcon("view-media-artist"), i18n("Private &Browsing"), this); - a->setCheckable(true); + a = Application::instance()->privateBrowsingAction(); actionCollection()->addAction(QL1S("private_browsing"), a); - connect(a, SIGNAL(triggered(bool)), this, SLOT(privateBrowsing(bool))); - + a = new KAction(KIcon("edit-clear"), i18n("Clear Private Data..."), this); actionCollection()->addAction(QL1S("clear_private_data"), a); connect(a, SIGNAL(triggered(bool)), this, SLOT(clearPrivateData())); @@ -728,42 +726,6 @@ void MainWindow::printRequested(QWebFrame *frame) } -void MainWindow::privateBrowsing(bool enable) -{ - QWebSettings *settings = QWebSettings::globalSettings(); - if (enable && !settings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) - { - QString title = i18n("Are you sure you want to turn on private browsing?"); - QString text = i18n("%1" - "

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." - " Until you close the window, you can still click the Back and Forward buttons" - " to return to the web pages you have opened.

", title); - - int button = KMessageBox::warningContinueCancel(this, text, title); - if (button == KMessageBox::Continue) - { - settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, true); - m_view->urlBar()->setPrivateMode(true); - } - else - { - actionCollection()->action( QL1S("private_browsing") )->setChecked(false); - } - } - else - { - settings->setAttribute(QWebSettings::PrivateBrowsingEnabled, false); - m_view->urlBar()->setPrivateMode(false); - - m_lastSearch.clear(); - m_view->reloadAllTabs(); - } -} - - void MainWindow::find(const QString & search) { if (!currentTab()) @@ -1349,6 +1311,10 @@ bool MainWindow::queryClose() if(Application::instance()->sessionSaving()) return true; + // smooth private browsing mode + if(QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) + return true; + if (m_view->count() > 1) { int answer = KMessageBox::questionYesNoCancel( diff --git a/src/mainwindow.h b/src/mainwindow.h index ad4fa4b8..0395db4d 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -147,9 +147,6 @@ private slots: void viewPageSource(); void viewFullScreen(bool enable); - // Tools Menu slots - void privateBrowsing(bool enable); - // Settings Menu slot void preferences(); diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp index 3ec0b2fa..1f4a0367 100644 --- a/src/urlbar/urlbar.cpp +++ b/src/urlbar/urlbar.cpp @@ -79,7 +79,6 @@ void IconButton::mouseReleaseEvent(QMouseEvent* event) UrlBar::UrlBar(QWidget *parent) : KLineEdit(parent) , _tab(0) - , _privateMode(false) , _icon(new IconButton(this)) , _suggestionTimer(new QTimer(this)) { @@ -159,7 +158,7 @@ void UrlBar::paintEvent(QPaintEvent *event) QColor backgroundColor; QColor foregroundColor; - if (_privateMode) + if (QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) { backgroundColor = QColor(220, 220, 220); // light gray foregroundColor = Qt::black; @@ -289,12 +288,6 @@ void UrlBar::focusInEvent(QFocusEvent *event) } -void UrlBar::setPrivateMode(bool on) -{ - _privateMode = on; -} - - void UrlBar::dropEvent(QDropEvent *event) { KLineEdit::dropEvent(event); @@ -505,8 +498,15 @@ void UrlBar::suggest() void UrlBar::refreshFavicon() { + if(QWebSettings::globalSettings()->testAttribute(QWebSettings::PrivateBrowsingEnabled)) + { + _icon->setIcon(KIcon("view-media-artist")); + return; + } + KUrl u = _tab->url(); - if(u.scheme() == QL1S("about")) { + if(u.scheme() == QL1S("about")) + { _icon->setIcon(KIcon("arrow-right")); return; } diff --git a/src/urlbar/urlbar.h b/src/urlbar/urlbar.h index dcd0ba5b..4cdd9d9c 100644 --- a/src/urlbar/urlbar.h +++ b/src/urlbar/urlbar.h @@ -89,7 +89,6 @@ public: explicit UrlBar(QWidget *parent = 0); ~UrlBar(); - void setPrivateMode(bool on); void activateSuggestions(bool); public slots: @@ -124,7 +123,6 @@ private: QWeakPointer _box; WebTab *_tab; - bool _privateMode; IconButton *_icon; IconButtonPointerList _rightIconsList; -- cgit v1.2.1