[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#694553: unblock (pre-approval): kwallet/4.8.4-3



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Hi,

I would like to upload kwallet 4.8.4-3.
The only change is the backport of an upstream patch to fix the slow
startup of the kwalletmanager application. Its startup gets slower
and slower wrt the number of passwords stored in the wallets.

Attached the current diff out of the packaging repo of the changes
above (kwallet -2 was accodentally uploaded with distro=UNRELEASED).

Thanks,
-- 
Pino
diff --git a/debian/changelog b/debian/changelog
index 0b891f4..e6484bf 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,13 @@
-kwallet (4:4.8.4-2) UNRELEASED; urgency=low
+kwallet (4:4.8.4-3) UNRELEASED; urgency=low
+
+  [ Pino Toscano ]
+  * Backport upstream commit e893896200ad352be8d4110f780333f888b0fb94 to fix
+    amazingly slow kwalletmanager startup; patch
+    upstream_Fix-amazingly-slow-kwalletmanager-startup.patch.
+
+ -- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>  Sat, 03 Nov 2012 21:49:47 +0100
+
+kwallet (4:4.8.4-2) unstable; urgency=low
 
   * The "I forgot the epoch" release.
   * Update debian/copyright:
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..a19cde7
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+upstream_Fix-amazingly-slow-kwalletmanager-startup.patch
diff --git a/debian/patches/upstream_Fix-amazingly-slow-kwalletmanager-startup.patch b/debian/patches/upstream_Fix-amazingly-slow-kwalletmanager-startup.patch
new file mode 100644
index 0000000..b8a389f
--- /dev/null
+++ b/debian/patches/upstream_Fix-amazingly-slow-kwalletmanager-startup.patch
@@ -0,0 +1,159 @@
+From e893896200ad352be8d4110f780333f888b0fb94 Mon Sep 17 00:00:00 2001
+From: David Faure <faure@kde.org>
+Date: Mon, 13 Aug 2012 19:48:47 +0200
+Subject: [PATCH] Fix amazingly slow kwalletmanager startup.
+
+Every call to setFlags(), on item creation, triggers itemChanged(), which the
+code wrongly treated as a renaming, so it would make a dbus call for renaming,
+and then process the dbus signal for "this folder has changed" by reloading the
+folder and comparing.
+
+BUG: 279161
+
+I didn't see review 105633 before spending time fixing this :-(
+(cherry picked from commit 0470195d23d46d05c0b4b0c87255c7a854a72270)
+---
+ allyourbase.cpp   |   19 ++++++++++++++++---
+ allyourbase.h     |   11 ++++++-----
+ kwalleteditor.cpp |   17 ++++++++++-------
+ kwalleteditor.h   |    2 +-
+ 4 files changed, 33 insertions(+), 16 deletions(-)
+
+diff --git a/allyourbase.cpp b/allyourbase.cpp
+index f57eb68..08c78f3 100644
+--- a/allyourbase.cpp
++++ b/allyourbase.cpp
+@@ -133,8 +133,9 @@ bool KWalletContainerItem::contains(const QString& key) {
+ 
+ QTreeWidgetItem *KWalletContainerItem::getItem(const QString& key) {
+ 	for (int i = 0; i < childCount(); ++i) {
+-		if (child(i)->text(0) == key) {
+-			return child(i);
++		KWalletEntryItem* entryItem = dynamic_cast<KWalletEntryItem *>(child(i));
++		if (entryItem && entryItem->name() == key) {
++			return entryItem;
+ 		}
+ 	}
+ 	return 0;
+@@ -144,13 +145,25 @@ QTreeWidgetItem *KWalletContainerItem::getItem(const QString& key) {
+  *  KWalletEntryItem - ListView items to represent kwallet entries
+  */
+ KWalletEntryItem::KWalletEntryItem(KWallet::Wallet *w, QTreeWidgetItem* parent, const QString& ename)
+-: QTreeWidgetItem(parent, QStringList() << ename, KWalletEntryItemClass), _wallet(w), _oldName(ename) {
++: QTreeWidgetItem(parent, QStringList() << ename, KWalletEntryItemClass), _wallet(w), m_name(ename) {
+ 	setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsEnabled);
+ }
+ 
+ KWalletEntryItem::~KWalletEntryItem() {
+ }
+ 
++void KWalletEntryItem::setName(const QString& n)
++{
++	m_name = n;
++	QTreeWidgetItem::setText(0, n);
++}
++
++void KWalletEntryItem::restoreName()
++{
++	QTreeWidgetItem::setText(0, m_name);
++}
++
++
+ /****************
+  * KWalletItem - IconView items to represent wallets
+  */
+diff --git a/allyourbase.h b/allyourbase.h
+index d3452cd..88284a3 100644
+--- a/allyourbase.h
++++ b/allyourbase.h
+@@ -48,16 +48,17 @@ class KWalletEntryItem : public QTreeWidgetItem {
+ 		KWalletEntryItem(KWallet::Wallet *w, QTreeWidgetItem* parent, const QString& ename);
+ 		virtual ~KWalletEntryItem();
+ 
+-		const QString& oldName() { return _oldName; }
+-		QString currentName() { return text(0); }
+-
+-		void clearOldName() { _oldName = text(0); }
++		const QString& name() const { return m_name; }
++		void setName(const QString& n);
++		// Cancel renaming
++		void restoreName();
+ 
+ 	public:
+ 		KWallet::Wallet *_wallet;
+ 
+ 	private:
+-		QString _oldName;
++		void setText(int, const QString&) {} // forbidden
++		QString m_name;
+ };
+ 
+ class KWalletContainerItem : public QTreeWidgetItem {
+diff --git a/kwalleteditor.cpp b/kwalleteditor.cpp
+index 777ce8d..74c59bd 100644
+--- a/kwalleteditor.cpp
++++ b/kwalleteditor.cpp
+@@ -112,7 +112,7 @@ KWalletEditor::KWalletEditor(const QString& wallet, bool isPath, QWidget *parent
+ 	connect(_entryList,
+ 		SIGNAL(itemChanged(QTreeWidgetItem*,int)),
+ 		this,
+-		SLOT(listItemRenamed(QTreeWidgetItem*)));
++		SLOT(listItemChanged(QTreeWidgetItem*,int)));
+ 
+ 	connect(_ww->_passwordValue, SIGNAL(textChanged()),
+ 		this, SLOT(entryEditted()));
+@@ -762,21 +762,24 @@ void KWalletEditor::renameEntry() {
+ 
+ 
+ // Only supports renaming of KWalletEntryItem derived classes.
+-void KWalletEditor::listItemRenamed(QTreeWidgetItem* item) {
+-	if (item) {
++void KWalletEditor::listItemChanged(QTreeWidgetItem* item, int column) {
++	if (item && column == 0) {
+ 		KWalletEntryItem *i = dynamic_cast<KWalletEntryItem*>(item);
+ 		if (!i) {
+ 			return;
+ 		}
+ 
+ 		const QString t = item->text(0);
++		if (t == i->name()) {
++			return;
++		}
+ 		if (!_w || t.isEmpty()) {
+-			i->setText(0, i->oldName());
++			i->restoreName();
+ 			return;
+ 		}
+ 
+-		if (_w->renameEntry(i->oldName(), t) == 0) {
+-			i->clearOldName();
++		if (_w->renameEntry(i->name(), t) == 0) {
++			i->setName(t);
+ 			KWalletContainerItem *ci = dynamic_cast<KWalletContainerItem*>(item->parent());
+ 			if (!ci) {
+ 				KMessageBox::error(this, i18n("An unexpected error occurred trying to rename the entry"));
+@@ -790,7 +793,7 @@ void KWalletEditor::listItemRenamed(QTreeWidgetItem* item) {
+ 				_ww->_entryName->setText(i18n("Binary Data: %1", item->text(0)));
+ 			}
+ 		} else {
+-			i->setText(0, i->oldName());
++			i->restoreName();
+ 		}
+ 	}
+ }
+diff --git a/kwalleteditor.h b/kwalleteditor.h
+index 6856ccb..4e6b611 100644
+--- a/kwalleteditor.h
++++ b/kwalleteditor.h
+@@ -60,7 +60,7 @@ class KWalletEditor : public KXmlGuiWindow {
+ 	private slots:
+ 		void updateFolderList(bool checkEntries = false);
+ 		void entrySelectionChanged(QTreeWidgetItem *item);
+-		void listItemRenamed(QTreeWidgetItem *);
++		void listItemChanged(QTreeWidgetItem *, int column);
+ 		void listContextMenuRequested(const QPoint& pos);
+ 		void updateEntries(const QString& folder);
+ 
+-- 
+1.7.10.4
+

Reply to: