# HG changeset patch # User Mikael Berthe # Date 1354039779 -3600 # Node ID 7f06eb956734d80fe37a96016fd41f9e3c46f173 # Parent c00b919cf4aceaa2f4c7c3875cb38d0e08288474 Correctly set the alternate buffer after roster up|down N with N > 1 diff -r c00b919cf4ac -r 7f06eb956734 mcabber/mcabber/screen.c --- a/mcabber/mcabber/screen.c Tue Nov 27 15:26:26 2012 +0100 +++ b/mcabber/mcabber/screen.c Tue Nov 27 19:09:39 2012 +0100 @@ -2449,14 +2449,29 @@ void scr_roster_up_down(int updown, unsigned int n) { unsigned int i; + GList *new_buddy = current_buddy; + GList *tmp_buddy; + + if (!current_buddy) + return; if (updown < 0) { - for (i = 0; i < n; i++) - set_current_buddy(g_list_previous(current_buddy)); + for (i = 0; i < n; i++) { + tmp_buddy = g_list_previous(new_buddy); + if (tmp_buddy) + new_buddy = tmp_buddy; + } } else { - for (i = 0; i < n; i++) - set_current_buddy(g_list_next(current_buddy)); + for (i = 0; i < n; i++) { + tmp_buddy = g_list_next(new_buddy); + if (tmp_buddy) + new_buddy = tmp_buddy; + } } + if (new_buddy == current_buddy) + return; + + set_current_buddy(new_buddy); if (chatmode) { last_activity_buddy = current_buddy; scr_show_buddy_window();