changeset 2012:2039ea6bd7a5

Fix bug in /buffer close_all command
author Hermitifier
date Thu, 01 Mar 2012 14:46:49 +0100
parents c3214f645131
children 8dc418af3e72
files mcabber/mcabber/screen.c
diffstat 1 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/mcabber/screen.c	Wed Feb 29 09:19:14 2012 +0100
+++ b/mcabber/mcabber/screen.c	Thu Mar 01 14:46:49 2012 +0100
@@ -2693,20 +2693,22 @@
 // value: winbuf structure
 // data: int, set to 1 if the buffer should be closed.
 // NOTE: does not work for special buffers.
-static void buffer_purge(gpointer key, gpointer value, gpointer data)
+static gboolean buffer_purge(gpointer key, gpointer value, gpointer data)
 {
   int *p_closebuf = data;
   winbuf *win_entry = value;
+  gboolean retval = FALSE;
 
   // Delete the current hbuf
   hbuf_free(&win_entry->bd->hbuf);
 
   if (*p_closebuf) {
-    g_hash_table_remove(winbufhash, key);
+    retval = TRUE;
   } else {
     win_entry->bd->cleared = FALSE;
     win_entry->bd->top = NULL;
   }
+  return retval;
 }
 
 //  scr_buffer_purge(closebuf, jid)
@@ -2742,10 +2744,12 @@
   if (!isspe) {
     p_closebuf = g_new(guint, 1);
     *p_closebuf = closebuf;
-    buffer_purge((gpointer)cjid, win_entry, p_closebuf);
+    if(buffer_purge((gpointer)cjid, win_entry, p_closebuf))
+      g_hash_table_remove(winbufhash, cjid);
     roster_msg_setflag(cjid, FALSE, FALSE);
     g_free(p_closebuf);
     if (closebuf && !hold_chatmode) {
+      //buddy_setactiveresource(bud, resource);
       scr_set_chatmode(FALSE);
       currentWindow = NULL;
     }
@@ -2779,7 +2783,7 @@
   p_closebuf = g_new(guint, 1);
 
   *p_closebuf = closebuf;
-  g_hash_table_foreach(winbufhash, buffer_purge, p_closebuf);
+  g_hash_table_foreach_remove(winbufhash, buffer_purge, p_closebuf);
   g_free(p_closebuf);
 
   if (closebuf) {