diff options
author | Andreas K. Hüttel <dilfridge@gentoo.org> | 2013-04-13 00:33:55 +0000 |
---|---|---|
committer | Andreas K. Hüttel <dilfridge@gentoo.org> | 2013-04-13 00:33:55 +0000 |
commit | 250e8bafc0610e76f1ca3301d4e0b9508ccdb02c (patch) | |
tree | 29f5df6cedd3afceb0ee0dacb0e41f8a2b8bcdbb /kde-base/kdepim-common-libs/files | |
parent | Revbump fix RDEPEND on icc profiles (bug 464094), compiler/runtime issues (bu... (diff) | |
download | gentoo-2-250e8bafc0610e76f1ca3301d4e0b9508ccdb02c.tar.gz gentoo-2-250e8bafc0610e76f1ca3301d4e0b9508ccdb02c.tar.bz2 gentoo-2-250e8bafc0610e76f1ca3301d4e0b9508ccdb02c.zip |
Untested fix for bug 465210, for now without keywords
(Portage version: 2.2.0_alpha171/cvs/Linux x86_64, signed Manifest commit with key EBE6A336BE19039C!)
Diffstat (limited to 'kde-base/kdepim-common-libs/files')
-rw-r--r-- | kde-base/kdepim-common-libs/files/kdepim-common-libs-4.10.2-autocompletion.patch | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/kde-base/kdepim-common-libs/files/kdepim-common-libs-4.10.2-autocompletion.patch b/kde-base/kdepim-common-libs/files/kdepim-common-libs-4.10.2-autocompletion.patch new file mode 100644 index 000000000000..ead48b7a7a51 --- /dev/null +++ b/kde-base/kdepim-common-libs/files/kdepim-common-libs-4.10.2-autocompletion.patch @@ -0,0 +1,189 @@ +From 6a06c57f52a00018d607085efa7570deb91dc707 Mon Sep 17 00:00:00 2001 +From: David Faure <faure@kde.org> +Date: Mon, 8 Apr 2013 17:41:39 +0200 +Subject: [PATCH] Fix kmail autocompletion from akonadi. + +My commit 02f5f0214e made autocompletion from nepomuk work better, but broke +completion from akonadi. I kept the "keywords" based code, but now it's only +used for the special case of nickname-based search (because the nickname shouldn't +appear in the completion item). For everything else it really doesn't make sense +to have a search engine (akonadi/nepomuk) on top of a search engine +(the one inside KCompletion). + +This time I verified that: +* nepomuk search still works +* contacts from akonadi work again +* contact groups from akonadi work (after previous commit) +* nickname-search in akonadi still doesn't work, but it didn't before. More work +needed for that one. This is the only reason to keep KMailCompletion around btw, +everything else would work without it. + +BUG: 259949 +FIXED-IN: 4.10.3 +--- + libkdepim/addresseelineedit.cpp | 66 +++++++++++------------------------------ + libkdepim/addresseelineedit.h | 5 ---- + libkdepim/kmailcompletion.h | 4 ++- + 3 files changed, 21 insertions(+), 54 deletions(-) + +diff --git a/libkdepim/addresseelineedit.cpp b/libkdepim/addresseelineedit.cpp +index b7b11be..ec4caf9 100644 +--- a/libkdepim/addresseelineedit.cpp ++++ b/libkdepim/addresseelineedit.cpp +@@ -30,6 +30,8 @@ + #include "completionordereditor.h" + #endif + ++#include "kmailcompletion.h" ++ + #include <Akonadi/Contact/ContactSearchJob> + #include <Akonadi/Contact/ContactGroupSearchJob> + #include <Akonadi/CollectionFetchJob> +@@ -77,6 +79,10 @@ + + using namespace KPIM; + ++namespace KPIM { ++ typedef QMap< QString, QPair<int,int> > CompletionItemsMap; ++} ++ + class AddresseeLineEditStatic + { + public: +@@ -496,11 +502,9 @@ void AddresseeLineEdit::Private::addCompletionItem( const QString &string, int w + s_static->completionItemMap.insert( string, qMakePair( weight, completionItemSource ) ); + } + +- if ( keyWords == 0 ) { +- s_static->completion->addItem( string, weight ); +- } else { +- s_static->completion->addItemWithKeys( string, weight, keyWords ); +- } ++ s_static->completion->addItem(string, weight); ++ if (keyWords && !keyWords->isEmpty()) ++ s_static->completion->addItemWithKeys(string, weight, keyWords); // see kmailcompletion.cpp + } + + const QStringList KPIM::AddresseeLineEdit::Private::adjustedCompletionItems( bool fullSearch ) +@@ -1348,17 +1352,13 @@ void AddresseeLineEdit::addItem( const Akonadi::Item &item, int weight, int sour + void AddresseeLineEdit::addContactGroup( const KABC::ContactGroup &group, int weight, int source ) + { + d->addCompletionItem( group.name(), weight, source ); +- QStringList keyWords; +- keyWords.append( group.name() ); +- d->addCompletionItem( group.name(), weight, source, &keyWords ); + } + + void AddresseeLineEdit::addContact( const KABC::Addressee &addr, int weight, int source ) + { + const QStringList emails = addr.emails(); + QStringList::ConstIterator it; +- const int prefEmailWeight = 1; //increment weight by prefEmailWeight +- int isPrefEmail = prefEmailWeight; //first in list is preferredEmail ++ int isPrefEmail = 1; //first in list is preferredEmail + QStringList::ConstIterator end( emails.constEnd() ); + for ( it = emails.constBegin(); it != end; ++it ) { + //TODO: highlight preferredEmail +@@ -1368,40 +1368,6 @@ void AddresseeLineEdit::addContact( const KABC::Addressee &addr, int weight, int + const QString nickName = addr.nickName(); + QString fullEmail = addr.fullEmail( email ); + +- // Prepare keywords (for CompletionShell, CompletionPopup) +- QStringList keyWords; +- const QString realName = addr.realName(); +- +- if ( !givenName.isEmpty() && !familyName.isEmpty() ) { +- keyWords.append( givenName + QLatin1Char( ' ' ) + familyName ); +- keyWords.append( familyName + QLatin1Char( ' ' ) + givenName ); +- keyWords.append( familyName + QLatin1String( ", " ) + givenName ); +- } else if ( !givenName.isEmpty() ) { +- keyWords.append( givenName ); +- } else if ( !familyName.isEmpty() ) { +- keyWords.append( familyName ); +- } +- +- if ( !nickName.isEmpty() ) { +- keyWords.append( nickName ); +- } +- +- if ( !realName.isEmpty() ) { +- keyWords.append( realName ); +- } +- +- keyWords.append( email ); +- +- /* KMailCompletion does not have knowledge about identities, it stores emails and +- * keywords for each email. KMailCompletion::allMatches does a lookup on the +- * keywords and returns an ordered list of emails. In order to get the preferred +- * email before others for each identity we use this little trick. +- * We remove the <blank> in adjustedCompletionItems. +- */ +- if ( isPrefEmail == prefEmailWeight ) { +- fullEmail.replace( QLatin1String( " <" ), QLatin1String( " <" ) ); +- } +- + // Prepare "givenName" + ' ' + "familyName" + QString fullName = givenName; + if (!familyName.isEmpty()) { +@@ -1413,12 +1379,16 @@ void AddresseeLineEdit::addContact( const KABC::Addressee &addr, int weight, int + // Finally, we can add the completion items + if (!fullName.isEmpty()) { + const QString address = KPIMUtils::normalizedAddress(fullName, email, QString()); +- d->addCompletionItem(address, weight + isPrefEmail, source, &keyWords); ++ if (fullEmail != address) { ++ // This happens when fullEmail contains a middle name, while our own fullName+email only has "first last". ++ // Let's offer both, the fullEmail with 3 parts, looks a tad formal. ++ d->addCompletionItem(address, weight + isPrefEmail, source); ++ } + } + +- if ( !nickName.isEmpty() ) { +- const QString address = KPIMUtils::normalizedAddress(nickName, email, QString()); +- d->addCompletionItem(address, weight + isPrefEmail, source, &keyWords); ++ QStringList keyWords; ++ if (!nickName.isEmpty()) { ++ keyWords.append(nickName); + } + + d->addCompletionItem( fullEmail, weight + isPrefEmail, source, &keyWords ); +diff --git a/libkdepim/addresseelineedit.h b/libkdepim/addresseelineedit.h +index 4e6784b..b2af4a9 100644 +--- a/libkdepim/addresseelineedit.h ++++ b/libkdepim/addresseelineedit.h +@@ -27,7 +27,6 @@ + #ifndef KDEPIM_ADDRESSEELINEEDIT_H + #define KDEPIM_ADDRESSEELINEEDIT_H + +-#include "kmailcompletion.h" + #include "kdepim_export.h" + + #include "ldap/ldapclient.h" +@@ -50,10 +49,6 @@ namespace KABC { + class ContactGroup; + } + +-namespace KPIM { +- typedef QMap< QString, QPair<int,int> > CompletionItemsMap; +-} +- + namespace Nepomuk2 { + namespace Query { + class Result; +diff --git a/libkdepim/kmailcompletion.h b/libkdepim/kmailcompletion.h +index e8574cc..93771d3 100644 +--- a/libkdepim/kmailcompletion.h ++++ b/libkdepim/kmailcompletion.h +@@ -32,7 +32,9 @@ namespace KPIM { + + /** + * KMailCompletion allows lookup of email addresses by keyword. +- * Typically a keywods would be firstname, lastname, nickname or domain. ++ * This is used for lookup by nickname, since we don't want the nickname to appear in the final email. ++ * E.g. you have a nickname "idiot" for your boss, you want to type "idiot" but you want the completion ++ * to offer "Full Name <email@domain>", without the nickname being visible. + */ + class KMailCompletion : public KCompletion + { +-- +1.8.1.5 + |