Mercurial > ~mikael > mcabber > hg
diff mcabber/mcabber/roster.c @ 2013:8dc418af3e72
Allow to select to which buddy resource messages go. Closes issue #55
author | Hermitifier |
---|---|
date | Thu, 01 Mar 2012 15:10:41 +0100 |
parents | 7837d5a3f509 |
children | e04b6dfbb054 |
line wrap: on
line diff
--- a/mcabber/mcabber/roster.c Thu Mar 01 14:46:49 2012 +0100 +++ b/mcabber/mcabber/roster.c Thu Mar 01 15:10:41 2012 +0100 @@ -94,6 +94,7 @@ guint type; enum subscr subscription; GSList *resource; + res *active_resource; /* For groupchats */ gchar *nickname; @@ -265,6 +266,9 @@ p_res->status_msg = NULL; } + if (rost->active_resource == p_res) + rost->active_resource = NULL; + // Free allocations and delete resource node free_resource_data(p_res); rost->resource = g_slist_delete_link(rost->resource, p_res_elt); @@ -279,6 +283,7 @@ if (!roster_usr) return; g_free((gchar*)roster_usr->jid); + //g_free((gchar*)roster_usr->active_resource); g_free((gchar*)roster_usr->name); g_free((gchar*)roster_usr->nickname); g_free((gchar*)roster_usr->topic); @@ -1451,6 +1456,32 @@ return reslist; } +// buddy_getactiveresource(roster_data) +// Returns name of active (selected for chat) resource +const char *buddy_getactiveresource(gpointer rosterdata) +{ + roster *roster_usr = rosterdata; + res *resource; + + if (!roster_usr) { + if (!current_buddy) return NULL; + roster_usr = BUDDATA(current_buddy); + } + + resource = roster_usr->active_resource; + if (!resource) return NULL; + return resource->name; +} + +void buddy_setactiveresource(gpointer rosterdata, const char *resname) +{ + roster *roster_usr = rosterdata; + res *p_res = NULL; + if (resname) + p_res = get_resource(roster_usr, resname); + roster_usr->active_resource = p_res; +} + /* // buddy_isresource(roster_data) // Return true if there is at least one resource