changeset 2045:7f06eb956734

Correctly set the alternate buffer after roster up|down N with N > 1
author Mikael Berthe <mikael@lilotux.net>
date Tue, 27 Nov 2012 19:09:39 +0100
parents c00b919cf4ac
children a60b933d04cc
files mcabber/mcabber/screen.c
diffstat 1 files changed, 19 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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();