From 200254da9efb7e258c33edf437abffabc9309077 Mon Sep 17 00:00:00 2001 From: André Fabian Silva Delgado Date: Tue, 9 Apr 2013 21:24:09 -0300 Subject: kdepim-libre-4.10.2-2: Fix address completion (KDEBUG#259949) --- libre/kdepim-libre/PKGBUILD | 9 +- libre/kdepim-libre/fix-completion.patch | 182 ++++++++++++++++++++++++++++++++ 2 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 libre/kdepim-libre/fix-completion.patch (limited to 'libre/kdepim-libre') diff --git a/libre/kdepim-libre/PKGBUILD b/libre/kdepim-libre/PKGBUILD index 75d81567f..07fa48b1a 100644 --- a/libre/kdepim-libre/PKGBUILD +++ b/libre/kdepim-libre/PKGBUILD @@ -23,7 +23,7 @@ pkgname=('kdepim-akonadiconsole-libre' 'kdepim-ktnef-libre' 'kdepim-libkdepim-libre') pkgver=4.10.2 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64' 'mips64el') url='http://pim.kde.org' license=('GPL' 'LGPL' 'FDL') @@ -31,12 +31,15 @@ groups=('kde' 'kdepim-libre') makedepends=('cmake' 'automoc4' 'boost' 'kdepim-runtime' 'libxss' 'kde-agent' 'nepomuk-widgets') source=("http://download.kde.org/stable/${pkgver}/src/${_pkgbase}-${pkgver}.tar.xz" - "kleopatra-build-fix.patch::http://bugsfiles.kde.org/attachment.cgi?id=78592") + "kleopatra-build-fix.patch::http://bugsfiles.kde.org/attachment.cgi?id=78592" + 'fix-completion.patch') sha1sums=('61b74cb3bf541040e09252d4dcfaea8a876a2859' - '61a7e31e7daee3358c442d3ac5f74171b45ae2c9') + '61a7e31e7daee3358c442d3ac5f74171b45ae2c9' + '92a44c7b1697de519b09265a3b68e7d73d4c024e') build() { patch -Np1 -d ${_pkgbase}-${pkgver} < ${srcdir}/kleopatra-build-fix.patch + patch -Np1 -d ${_pkgbase}-${pkgver} < ${srcdir}/fix-completion.patch mkdir build cd build diff --git a/libre/kdepim-libre/fix-completion.patch b/libre/kdepim-libre/fix-completion.patch new file mode 100644 index 000000000..c2edefe00 --- /dev/null +++ b/libre/kdepim-libre/fix-completion.patch @@ -0,0 +1,182 @@ +commit 6a06c57f52a00018d607085efa7570deb91dc707 +Author: David Faure +Date: Mon Apr 8 17:41:39 2013 +0200 + + 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 + +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 + #include + #include +@@ -77,6 +79,10 @@ + + using namespace KPIM; + ++namespace KPIM { ++ typedef QMap< QString, QPair > 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 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 > 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 ", without the nickname being visible. + */ + class KMailCompletion : public KCompletion + { -- cgit v1.2.3