# HG changeset patch # User Hermitifier # Date 1330609609 -3600 # Node ID 2039ea6bd7a55ee0a8aefe2eec003f84a01c6fb5 # Parent c3214f645131d8e0a31d1f533d125d7dbdf17461 Fix bug in /buffer close_all command diff -r c3214f645131 -r 2039ea6bd7a5 mcabber/mcabber/screen.c --- 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) {