------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. http://bugs.kde.org/show_bug.cgi?id=131176 schaarsc gmx de changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution| |FIXED ------- Additional Comments From schaarsc gmx de 2007-03-28 21:50 ------- SVN commit 647586 by schaarsc: list preferred email first BUG: 131176 M +22 -8 addresseelineedit.cpp --- branches/KDE/3.5/kdepim/libkdepim/addresseelineedit.cpp #647585:647586 @ -575,36 +575,38 @ //m_contactMap.insert( addr.realName(), addr ); const QStringList emails = addr.emails(); QStringList::ConstIterator it; + const int prefEmailWeight = 1; //increment weight by prefEmailWeight + int isPrefEmail = prefEmailWeight; //first in list is preferredEmail for ( it = emails.begin(); it != emails.end(); ++it ) { //TODO: highlight preferredEmail const QString email( (*it) ); const QString givenName = addr.givenName(); const QString familyName= addr.familyName(); const QString nickName = addr.nickName(); - const QString fullEmail = addr.fullEmail( email ); const QString domain = email.mid( email.find( ' ' ) + 1 ); + QString fullEmail = addr.fullEmail( email ); //TODO: let user decide what fields to use in lookup, e.g. company, city, ... //for CompletionAuto if ( givenName.isEmpty() && familyName.isEmpty() ) { - addCompletionItem( fullEmail, weight, source ); // use whatever is there + addCompletionItem( fullEmail, weight + isPrefEmail, source ); // use whatever is there } else { const QString byFirstName= "\"" + givenName + " " + familyName + "\" <" + email + ">"; const QString byLastName = "\"" + familyName + ", " + givenName + "\" <" + email + ">"; - addCompletionItem( byFirstName, weight, source ); - addCompletionItem( byLastName, weight, source ); + addCompletionItem( byFirstName, weight + isPrefEmail, source ); + addCompletionItem( byLastName, weight + isPrefEmail, source ); } - addCompletionItem( email, weight, source ); + addCompletionItem( email, weight + isPrefEmail, source ); if ( !nickName.isEmpty() ){ const QString byNick = "\"" + nickName + "\" <" + email + ">"; - addCompletionItem( byNick, weight, source ); + addCompletionItem( byNick, weight + isPrefEmail, source ); } if ( !domain.isEmpty() ){ const QString byDomain = "\"" + domain + " " + familyName + " " + givenName + "\" <" + email + ">"; - addCompletionItem( byDomain, weight, source ); + addCompletionItem( byDomain, weight + isPrefEmail, source ); } //for CompletionShell, CompletionPopup @ -631,8 +633,18 @ keyWords.append( email ); - addCompletionItem( fullEmail, weight, source, &keyWords ); + /* 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 getAdjustedCompletionItems. + */ + if ( isPrefEmail == prefEmailWeight ) + fullEmail.replace( " <", " <" ); + addCompletionItem( fullEmail, weight + isPrefEmail, source, &keyWords ); + isPrefEmail = 0; + #if 0 int len = (*it).length(); if ( len == 0 ) continue; @ -1009,6 +1021,8 @ lastSourceIndex = idx; } (*it) = (*it).prepend( s_completionItemIndentString ); + // remove preferred email sort added in addContact() + (*it).replace( " <", " <" ); } sections[idx].append( *it ); _______________________________________________ KMail developers mailing list KMail-devel@kde.org https://mail.kde.org/mailman/listinfo/kmail-devel