# HG changeset patch # User Mikael Berthe # Date 1144432736 -7200 # Node ID 89ad7b530b3cad585942dcbdee2a7bc8e426198d # Parent 6c9e8fb699658ea826cb9481936074fae8d4aab9 MUC: Fix completion for UTF-8 nicknames diff -r 6c9e8fb69965 -r 89ad7b530b3c mcabber/src/compl.c --- a/mcabber/src/compl.c Fri Apr 07 19:40:03 2006 +0200 +++ b/mcabber/src/compl.c Fri Apr 07 19:58:56 2006 +0200 @@ -219,7 +219,7 @@ return compl_list(ROSTER_TYPE_USER); } if (cat_flags == COMPL_RESOURCE) { - return buddy_getresources(NULL); + return buddy_getresources_locale(NULL); } if (cat_flags == COMPL_EVENTSID) { return evs_geteventscomplist(); diff -r 6c9e8fb69965 -r 89ad7b530b3c mcabber/src/roster.c --- a/mcabber/src/roster.c Fri Apr 07 19:40:03 2006 +0200 +++ b/mcabber/src/roster.c Fri Apr 07 19:58:56 2006 +0200 @@ -1028,6 +1028,26 @@ return reslist; } +// buddy_getresources_locale(roster_data) +// Same as buddy_getresources() but names are converted to user's locale +// Note: the caller should free the list (and data) after use +GSList *buddy_getresources_locale(gpointer rosterdata) +{ + GSList *reslist, *lp; + + reslist = buddy_getresources(rosterdata); + // Convert each item to UI's locale + for (lp = reslist; lp; lp = g_slist_next(lp)) { + gchar *oldname = lp->data; + lp->data = from_utf8(oldname); + if (lp->data) + g_free(oldname); + else + lp->data = oldname; + } + return reslist; +} + /* // buddy_isresource(roster_data) // Return true if there is at least one resource diff -r 6c9e8fb69965 -r 89ad7b530b3c mcabber/src/roster.h --- a/mcabber/src/roster.h Fri Apr 07 19:40:03 2006 +0200 +++ b/mcabber/src/roster.h Fri Apr 07 19:58:56 2006 +0200 @@ -125,6 +125,7 @@ gchar buddy_getresourceprio(gpointer rosterdata, const char *resname); //int buddy_isresource(gpointer rosterdata); GSList *buddy_getresources(gpointer rosterdata); +GSList *buddy_getresources_locale(gpointer rosterdata); void buddy_resource_setname(gpointer rosterdata, const char *resname, const char *newname); enum imrole buddy_getrole(gpointer rosterdata, const char *resname);