diff options
-rw-r--r-- | INSTALL | 16 | ||||
-rw-r--r-- | src/history/autosaver.cpp | 67 | ||||
-rw-r--r-- | src/history/autosaver.h | 31 | ||||
-rw-r--r-- | src/history/historymanager.cpp | 43 | ||||
-rw-r--r-- | src/mainview.cpp | 12 | ||||
-rw-r--r-- | src/mainview.h | 2 | ||||
-rw-r--r-- | src/mainwindow.cpp | 6 | ||||
-rw-r--r-- | src/tabbar.cpp | 8 |
8 files changed, 94 insertions, 91 deletions
@@ -1,37 +1,37 @@ -===== Building rekonq from sources ===== +===== Building rekonq from source ===== === Prerequisites === -Rekonq needs at least KDE SC 4.5.x and qt 4.7.x to build. +rekonq needs at least KDE SC 4.5.x and Qt 4.7.x to build. Qt: - Qt should be prepackaged for all mayor linux distributions. Please see + Qt should be prepackaged for all major Linux distributions. Please see http://www.trolltech.com/products/qt for more information and installation instructions. KDE SC: - KDE should be prepackaged for all mayor linux distributions. Please see + KDE SC should be prepackaged for all major Linux distributions. Please see http://techbase.kde.org/Getting_Started/Build/stable_Version for instructions on how to build and setup a KDE4 environment to work in. === Building rekonq === -To build it perform the following commands after switching into the rekonq +To build it perform the following commands after switching into the rekonq directory (for example ~/mainline or ~/0.4): mkdir build && cd build cmake .. make && make install -To install rekonq locally, do not run the "make install" command, rekonq can +If you want to install rekonq locally, do not run the "make install" command. rekonq can then be found in build/src and is executed with ./rekonq. === Getting Help === -If you need help with rekonq, you can find it in the irc-channel #rekonq on irc.freenode.net or by viewing the Handbook that comes with rekonq. -You can view the rekonq Handbook by pressing F1 after starting rekonq. +If you need help with rekonq, you can find it in the IRC channel #rekonq on irc.freenode.net or by viewing the handbook that comes with rekonq. +You can view the rekonq handbook by pressing F1 after starting rekonq. Techbase page : http://techbase.kde.org/Projects/rekonq diff --git a/src/history/autosaver.cpp b/src/history/autosaver.cpp index 83b3f6b0..3b966b52 100644 --- a/src/history/autosaver.cpp +++ b/src/history/autosaver.cpp @@ -25,73 +25,72 @@ * ============================================================ */ - - // Self Includes #include "autosaver.h" #include "autosaver.moc" // Qt Includes #include <QtCore/QMetaObject> +#include <QtCore/QTimerEvent> +#include <QtCore/QBasicTimer> +#include <QtCore/QTime> -#define AUTOSAVE_IN 1000 * 3 // seconds -#define MAXWAIT 1000 * 15 // seconds +const int AUTOSAVE_TIME = 1000 * 3; // seconds +const int MAX_TIME_LIMIT = 1000 * 15; // seconds -AutoSaver::AutoSaver(QObject *parent) : QObject(parent) +AutoSaver::AutoSaver(QObject *parent) + : QObject(parent) + , m_timer(new QBasicTimer) + , m_firstChange(new QTime) { - Q_ASSERT(parent); } AutoSaver::~AutoSaver() { - if (m_timer.isActive()) - { + if (m_timer->isActive()) kDebug() << "AutoSaver: still active when destroyed, changes not saved."; - } + + delete m_firstChange; + delete m_timer; +} + + +void AutoSaver::saveIfNeccessary() +{ + if (m_timer->isActive()) + save(); } void AutoSaver::changeOccurred() { - if (m_firstChange.isNull()) - m_firstChange.start(); + if (m_firstChange->isNull()) + m_firstChange->start(); - if (m_firstChange.elapsed() > MAXWAIT) - { - saveIfNeccessary(); - } + if (m_firstChange->elapsed() > MAX_TIME_LIMIT) + save(); else - { - m_timer.start(AUTOSAVE_IN, this); - } + m_timer->start(AUTOSAVE_TIME, this); } void AutoSaver::timerEvent(QTimerEvent *event) { - if (event->timerId() == m_timer.timerId()) - { - saveIfNeccessary(); - } + if (event->timerId() == m_timer->timerId()) + save(); else - { QObject::timerEvent(event); - } } -void AutoSaver::saveIfNeccessary() +void AutoSaver::save() { - if (!m_timer.isActive()) - return; - m_timer.stop(); - m_firstChange = QTime(); - if (!QMetaObject::invokeMethod(parent(), "save", Qt::DirectConnection)) - { - kDebug() << "AutoSaver: error invoking slot save() on parent"; - } -} + m_timer->stop(); + delete m_firstChange; + m_firstChange = new QTime; + emit saveNeeded(); +} diff --git a/src/history/autosaver.h b/src/history/autosaver.h index 6927dbe8..685783a8 100644 --- a/src/history/autosaver.h +++ b/src/history/autosaver.h @@ -34,37 +34,42 @@ // Qt Includes #include <QtCore/QObject> -#include <QtCore/QBasicTimer> -#include <QtCore/QTime> -#include <QtCore/QTimerEvent> +// Forward Declarations +class QBasicTimer; /** - * This class will call the save() slot on the parent object when the parent changes. - * It will wait several seconds after changed() to combining multiple changes and - * prevent continuous writing to disk. - * + * This class emits the saveNeeded() signal. + * It will wait several seconds after changeOccurred() to combine + * multiple changes preventing continuous writing to disk. */ - class REKONQ_TESTS_EXPORT AutoSaver : public QObject { Q_OBJECT public: - AutoSaver(QObject *parent); - ~AutoSaver(); + explicit AutoSaver(QObject *parent); + virtual ~AutoSaver(); + + /** + * Emits the saveNeeded() signal if there's been any change since we last saved. + */ void saveIfNeccessary(); +signals: + void saveNeeded(); + public slots: void changeOccurred(); protected: - void timerEvent(QTimerEvent *event); + virtual void timerEvent(QTimerEvent *event); private: - QBasicTimer m_timer; - QTime m_firstChange; + void save(); + QBasicTimer *m_timer; + QTime *m_firstChange; }; #endif // AUTOSAVER_H diff --git a/src/history/historymanager.cpp b/src/history/historymanager.cpp index 4a2c0459..92f9caee 100644 --- a/src/history/historymanager.cpp +++ b/src/history/historymanager.cpp @@ -72,6 +72,7 @@ HistoryManager::HistoryManager(QObject *parent) connect(this, SIGNAL(entryAdded(const HistoryItem &)), m_saveTimer, SLOT(changeOccurred())); connect(this, SIGNAL(entryRemoved(const HistoryItem &)), m_saveTimer, SLOT(changeOccurred())); + connect(m_saveTimer, SIGNAL(saveNeeded()), this, SLOT(save())); load(); @@ -88,11 +89,9 @@ HistoryManager::HistoryManager(QObject *parent) HistoryManager::~HistoryManager() { m_saveTimer->saveIfNeccessary(); - + delete m_historyFilterModel; delete m_historyTreeModel; - - delete m_saveTimer; } @@ -107,7 +106,7 @@ void HistoryManager::addHistoryEntry(const QString &url) QWebSettings *globalSettings = QWebSettings::globalSettings(); if (globalSettings->testAttribute(QWebSettings::PrivateBrowsingEnabled)) return; - + QUrl cleanUrl(url); // don't store about: urls (home page related) @@ -129,7 +128,7 @@ void HistoryManager::addHistoryEntry(const QString &url) void HistoryManager::setHistory(const QList<HistoryItem> &history, bool loadedAndSorted) { m_history = history; - + // verify that it is sorted by date if (!loadedAndSorted) qSort(m_history.begin(), m_history.end()); @@ -189,14 +188,14 @@ void HistoryManager::updateHistoryEntry(const KUrl &url, const QString &title) urlString.remove(QL1S("www.")); if(urlString.startsWith(QL1S("http")) && urlString.endsWith(QL1C('/'))) urlString.remove(urlString.length()-1,1); - + for (int i = 0; i < m_history.count(); ++i) { QString itemUrl = m_history.at(i).url; itemUrl.remove(QL1S("www.")); if(itemUrl.startsWith(QL1S("http")) && itemUrl.endsWith(QL1C('/'))) itemUrl.remove(itemUrl.length()-1,1); - + if (urlString == itemUrl) { m_history[i].title = title; @@ -204,7 +203,7 @@ void HistoryManager::updateHistoryEntry(const KUrl &url, const QString &title) m_saveTimer->changeOccurred(); if (m_lastSavedUrl.isEmpty()) m_lastSavedUrl = m_history.at(i).url; - + emit entryUpdated(i); break; } @@ -253,7 +252,7 @@ QList<HistoryItem> HistoryManager::find(const QString &text) if (matches) list << item; } - + return list; } @@ -274,25 +273,25 @@ void HistoryManager::loadSettings() int days; switch (historyExpire) { - case 0: - days = 1; + case 0: + days = 1; break; - case 1: - days = 7; + case 1: + days = 7; break; - case 2: - days = 14; + case 2: + days = 14; break; - case 3: - days = 30; + case 3: + days = 30; break; - case 4: - days = 365; + case 4: + days = 365; break; - case 5: - days = -1; + case 5: + days = -1; break; - default: + default: days = -1; break; } diff --git a/src/mainview.cpp b/src/mainview.cpp index f020fb53..3daee339 100644 --- a/src/mainview.cpp +++ b/src/mainview.cpp @@ -633,13 +633,13 @@ void MainView::previousTab() } -void MainView::openClosedTabs() +void MainView::openLastClosedTab() { - foreach (const HistoryItem &item, recentlyClosedTabs()) - { - Application::instance()->loadUrl( KUrl(item.url), Rekonq::NewTab); - } - m_recentlyClosedTabs.clear(); + if (m_recentlyClosedTabs.isEmpty()) + return; + + const HistoryItem item = m_recentlyClosedTabs.takeFirst(); + Application::instance()->loadUrl(KUrl(item.url), Rekonq::NewTab); } diff --git a/src/mainview.h b/src/mainview.h index 6fab7fc0..29162dd1 100644 --- a/src/mainview.h +++ b/src/mainview.h @@ -135,7 +135,7 @@ public slots: void nextTab(); void previousTab(); - void openClosedTabs(); + void openLastClosedTab(); void openClosedTab(); void switchToTab(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4c766ba0..4d3dfc91 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -449,10 +449,10 @@ void MainWindow::setupActions() actionCollection()->addAction(QL1S("show_prev_tab"), a); connect(a, SIGNAL(triggered(bool)), m_view, SLOT(previousTab())); - a = new KAction(KIcon("tab-new"), i18n("Open Closed Tabs"), this); + a = new KAction(KIcon("tab-new"), i18n("Open Last Closed Tab"), this); a->setShortcut(KShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_T)); - actionCollection()->addAction(QL1S("open_closed_tabs"), a); - connect(a, SIGNAL(triggered(bool)), m_view, SLOT(openClosedTabs())); + actionCollection()->addAction(QL1S("open_last_closed_tab"), a); + connect(a, SIGNAL(triggered(bool)), m_view, SLOT(openLastClosedTab())); // Closed Tabs Menu KActionMenu *closedTabsMenu = new KActionMenu(KIcon("tab-new"), i18n("Closed Tabs"), this); diff --git a/src/tabbar.cpp b/src/tabbar.cpp index d403a39c..1756c20e 100644 --- a/src/tabbar.cpp +++ b/src/tabbar.cpp @@ -293,7 +293,7 @@ void TabBar::contextMenu(int tab, const QPoint &pos) menu.addAction(mainWindow->actionByName( QL1S("clone_tab") )); if (count() > 1) menu.addAction(mainWindow->actionByName( QL1S("detach_tab") )); - menu.addAction(mainWindow->actionByName( QL1S("open_closed_tabs") )); + menu.addAction(mainWindow->actionByName( QL1S("open_last_closed_tab") )); menu.addAction(mainWindow->actionByName( QL1S("closed_tab_menu") )); menu.addSeparator(); menu.addAction(mainWindow->actionByName( QL1S("close_tab") )); @@ -314,7 +314,7 @@ void TabBar::emptyAreaContextMenu(const QPoint &pos) MainWindow *mainWindow = Application::instance()->mainWindow(); menu.addAction(mainWindow->actionByName( QL1S("new_tab") )); - menu.addAction(mainWindow->actionByName( QL1S("open_closed_tabs") )); + menu.addAction(mainWindow->actionByName( QL1S("open_last_closed_tab") )); menu.addAction(mainWindow->actionByName( QL1S("closed_tab_menu") )); menu.addSeparator(); menu.addAction(mainWindow->actionByName( QL1S("reload_all_tabs") )); @@ -357,8 +357,8 @@ void TabBar::setupHistoryActions() MainWindow *w = Application::instance()->mainWindow(); MainView *mv = qobject_cast<MainView *>(parent()); - QAction *openClosedTabsAction = w->actionByName( QL1S("open_closed_tabs") ); - openClosedTabsAction->setEnabled( mv->recentlyClosedTabs().size() > 0 ); + QAction *openLastClosedTabAction = w->actionByName( QL1S("open_last_closed_tab") ); + openLastClosedTabAction->setEnabled( mv->recentlyClosedTabs().size() > 0 ); // update closed tabs menu KActionMenu *am = qobject_cast<KActionMenu *>( w->actionByName( QL1S("closed_tab_menu") )); |