[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/apps/konqueror/src
From: "ext Eduardo Robles Elvira" <edulix () gmail ! com>
Date: 2008-03-21 21:57:01
Message-ID: 1206136621.200382.20294.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 788586 by edulix:
* Adding a limit to the number of closed items
* Now closed windows don't get removed innecesarily, thus a preloaded konqueror \
instance can restore them
* Changing the s_config to be SimpleConfig and deleting it everytime, using it as \
temporal, and moving it to appdata
* minor cosmetic adjustements in a header
CCMAIL:kfm-devel@kde.org
M +26 -2 konqcloseditem.cpp
M +74 -4 konqundomanager.cpp
M +21 -11 konqundomanager.h
--- trunk/KDE/kdebase/apps/konqueror/src/konqcloseditem.cpp #788585:788586
@@ -19,15 +19,39 @@
*/
#include "konqcloseditem.h"
+#include <QFile>
#include <kconfig.h>
#include <kdebug.h>
#include <kglobal.h>
#include <konqpixmapprovider.h>
+#include <kstandarddirs.h>
+#include <unistd.h>
-K_GLOBAL_STATIC_WITH_ARGS(KConfig, s_config, ("konqueror_closeditems", \
KConfig::NoGlobals) ) +class KConfigNew
+{
+public:
+ KConfigNew()
+ {
+ filename = "closeditems/closeditems_" + QString::number(getpid());
+ QString file = KStandardDirs::locateLocal("appdata", filename);
+ if(QFile::exists(file))
+ QFile::remove(file);
+
+ config = new KConfig(filename, KConfig::SimpleConfig, "appdata");
+ kDebug();
+ }
+ ~KConfigNew() {
+ QFile::remove(KStandardDirs::locateLocal("appdata", filename));
+ delete config;
+ }
+ KConfig *config;
+ QString filename;
+};
+K_GLOBAL_STATIC(KConfigNew, s_config)
+
KonqClosedItem::KonqClosedItem(const QString& title, const QString& group, quint64 \
serialNumber)
- : m_title(title), m_configGroup(s_config, group), m_serialNumber(serialNumber)
+ : m_title(title), m_configGroup(s_config->config, group), \
m_serialNumber(serialNumber) {
}
--- trunk/KDE/kdebase/apps/konqueror/src/konqundomanager.cpp #788585:788586
@@ -20,6 +20,7 @@
#include "konqundomanager.h"
#include <QAction>
+#include <QTimer>
#include <konq_fileundomanager.h>
#include <kconfig.h>
#include <kdebug.h>
@@ -30,6 +31,7 @@
public:
KonqUndoManagerCommunicator instance;
QList<KonqClosedWindowItem *> m_closedWindowItemList;
+ int m_maxNumClosedItems;
};
K_GLOBAL_STATIC(KonqUndoManagerCommunicatorPrivate, \
myKonqUndoManagerCommunicatorPrivate) @@ -146,7 +148,19 @@
{
if(real_sender == this)
return;
-
+
+ if(m_closedItemList.size() >= \
KonqUndoManagerCommunicator::self()->maxNumClosedItems()) + {
+ const KonqClosedItem* last = m_closedItemList.last();
+ const KonqClosedTabItem* lastTab =
+ dynamic_cast<const KonqClosedTabItem *>(last);
+ m_closedItemList.removeLast();
+
+ // Delete only if it's a tab
+ if(lastTab)
+ delete lastTab;
+ }
+
kDebug();
m_closedItemList.prepend(closedWindowItem);
emit undoTextChanged(i18n("Und&o: Closed Window"));
@@ -221,6 +235,18 @@
void KonqUndoManager::addClosedTabItem(KonqClosedTabItem* closedTabItem)
{
+ if(m_closedItemList.size() >= \
KonqUndoManagerCommunicator::self()->maxNumClosedItems()) + {
+ const KonqClosedItem* last = m_closedItemList.last();
+ const KonqClosedTabItem* lastTab =
+ dynamic_cast<const KonqClosedTabItem *>(last);
+ m_closedItemList.removeLast();
+
+ // Delete only if it's a tab
+ if(lastTab)
+ delete lastTab;
+ }
+
m_closedItemList.prepend(closedTabItem);
emit undoTextChanged(i18n("Und&o: Closed Tab"));
emit undoAvailable(true);
@@ -234,7 +260,7 @@
void KonqUndoManager::clearClosedItemsList()
{
-// normally we only DELETE tab items! So we can't do this anymore:
+// we only DELETE tab items! So we can't do this anymore:
// qDeleteAll(m_closedItemList);
QList<KonqClosedItem *>::iterator it = m_closedItemList.begin();
for (; it != m_closedItemList.end(); ++it)
@@ -242,8 +268,8 @@
KonqClosedItem *closedItem = *it;
const KonqClosedTabItem* closedTabItem =
dynamic_cast<const KonqClosedTabItem *>(closedItem);
- const KonqClosedWindowItem* closedWindowItem =
- dynamic_cast<const KonqClosedWindowItem *>(closedItem);
+// const KonqClosedWindowItem* closedWindowItem =
+// dynamic_cast<const KonqClosedWindowItem *>(closedItem);
m_closedItemList.erase(it);
if(closedTabItem)
@@ -261,6 +287,7 @@
KonqUndoManagerCommunicator::KonqUndoManagerCommunicator()
{
+ QTimer::singleShot(0, this, SLOT(readSettings()));
}
KonqUndoManagerCommunicator::~KonqUndoManagerCommunicator()
@@ -275,6 +302,18 @@
void KonqUndoManagerCommunicator::addClosedWindowItem(KonqUndoManager
*real_sender, KonqClosedWindowItem *closedWindowItem)
{
+ // If we are off the limit, remove the last closed window item
+ if(myKonqUndoManagerCommunicatorPrivate->m_closedWindowItemList.size() >=
+ maxNumClosedItems())
+ {
+ QList<KonqClosedWindowItem *> &closedWindowItemList =
+ myKonqUndoManagerCommunicatorPrivate->m_closedWindowItemList;
+ KonqClosedWindowItem* last = closedWindowItemList.last();
+ emit removeWindowInOtherInstances(0L, last);
+ closedWindowItemList.removeLast();
+ delete last;
+ }
+
myKonqUndoManagerCommunicatorPrivate->m_closedWindowItemList.prepend(closedWindowItem);
emit addWindowInOtherInstances(real_sender, closedWindowItem);
}
@@ -298,3 +337,34 @@
{
return myKonqUndoManagerCommunicatorPrivate->m_closedWindowItemList;
}
+
+int KonqUndoManagerCommunicator::maxNumClosedItems()
+{
+ return myKonqUndoManagerCommunicatorPrivate->m_maxNumClosedItems;
+}
+
+void KonqUndoManagerCommunicator::setMaxNumClosedItems(int max)
+{
+ myKonqUndoManagerCommunicatorPrivate->m_maxNumClosedItems = qMax(1, max);
+}
+
+void KonqUndoManagerCommunicator::readSettings(bool global)
+{
+ KSharedConfigPtr config;
+
+ if (global)
+ config = KGlobal::config();
+ else
+ config = KSharedConfig::openConfig("konquerorrc");
+
+ KConfigGroup configGroup( config, "UndoManagerSettings");
+ myKonqUndoManagerCommunicatorPrivate->m_maxNumClosedItems = \
configGroup.readEntry("Maximum number of Closed Items", 20 ); + \
myKonqUndoManagerCommunicatorPrivate->m_maxNumClosedItems = qMax(1, \
myKonqUndoManagerCommunicatorPrivate->m_maxNumClosedItems); +}
+
+void KonqUndoManagerCommunicator::applySettings()
+{
+ KConfigGroup configGroup(KSharedConfig::openConfig("konquerorrc"), \
"UndoManagerSettings"); +
+ configGroup.writeEntry("Value youngerThan", \
myKonqUndoManagerCommunicatorPrivate->m_maxNumClosedItems ); +}
--- trunk/KDE/kdebase/apps/konqueror/src/konqundomanager.h #788585:788586
@@ -61,7 +61,8 @@
* menu (by emitting openClosedTab/Window), and takes it from the list.
*/
void slotClosedItemsActivated(QAction* action);
- void slotAddClosedWindowItem(KonqUndoManager *real_sender, KonqClosedWindowItem \
*closedWindowItem); + void slotAddClosedWindowItem(KonqUndoManager *real_sender,
+ KonqClosedWindowItem *closedWindowItem);
Q_SIGNALS:
void undoAvailable(bool canUndo);
@@ -76,9 +77,10 @@
/// Emitted to be received in other window instances, uing the singleton
/// communicator
- void removeWindowInOtherInstances(KonqUndoManager *real_sender, const \
KonqClosedWindowItem
- *closedWindowItem);
- void addWindowInOtherInstances(KonqUndoManager *real_sender, \
KonqClosedWindowItem *closedWindowItem); + void \
removeWindowInOtherInstances(KonqUndoManager *real_sender, const + \
KonqClosedWindowItem *closedWindowItem); + void \
addWindowInOtherInstances(KonqUndoManager *real_sender, + KonqClosedWindowItem \
*closedWindowItem); private Q_SLOTS:
void slotFileUndoAvailable(bool);
void slotFileUndoTextChanged(const QString& text);
@@ -87,7 +89,8 @@
* Received from other window instances, removes/adds a reference of a
* window from m_closedItemList.
*/
- void slotRemoveClosedWindowItem(KonqUndoManager *real_sender, const \
KonqClosedWindowItem *closedWindowItem); + void \
slotRemoveClosedWindowItem(KonqUndoManager *real_sender, const + \
KonqClosedWindowItem *closedWindowItem); private:
/// Fill the m_closedItemList with closed windows
void populate();
@@ -107,13 +110,20 @@
friend class KonqUndoManagerCommunicatorPrivate;
static KonqUndoManagerCommunicator *self();
const QList<KonqClosedWindowItem *>& closedWindowItemList();
- void addClosedWindowItem(KonqUndoManager *real_sender, KonqClosedWindowItem \
*closedWindowItem);
- void removeClosedWindowItem(KonqUndoManager *real_sender, const \
KonqClosedWindowItem
- *closedWindowItem);
+ void addClosedWindowItem(KonqUndoManager *real_sender, KonqClosedWindowItem
+ *closedWindowItem);
+ void removeClosedWindowItem(KonqUndoManager *real_sender, const
+ KonqClosedWindowItem *closedWindowItem);
+ void applySettings();
+ int maxNumClosedItems();
+ void setMaxNumClosedItems(int max);
+public Q_SLOTS:
+ void readSettings(bool global = false);
Q_SIGNALS:
- void addWindowInOtherInstances(KonqUndoManager *real_sender, \
KonqClosedWindowItem *closedWindowItem);
- void removeWindowInOtherInstances(KonqUndoManager *real_sender, const \
KonqClosedWindowItem
- *closedWindowItem);
+ void addWindowInOtherInstances(KonqUndoManager *real_sender,
+ KonqClosedWindowItem *closedWindowItem);
+ void removeWindowInOtherInstances(KonqUndoManager *real_sender, const
+ KonqClosedWindowItem *closedWindowItem);
private:
KonqUndoManagerCommunicator();
virtual ~KonqUndoManagerCommunicator();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic