diff -r edb261e54265 -r 7b12c4d2c6d7 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Thu Aug 16 23:46:20 2012 -0400 +++ b/pidgin/gtkconv.c Fri Aug 17 00:28:50 2012 -0400 @@ -9344,7 +9344,7 @@ { PidginWindow *dest_win; GtkNotebook *dest_notebook; - PurpleConversation *conv; + PidginConversation *active_gtkconv; PidginConversation *gtkconv; gint dest_page_num = 0; gboolean new_window = FALSE; @@ -9411,7 +9411,7 @@ dest_win = pidgin_conv_window_get_at_event((GdkEvent *)e); - conv = pidgin_conv_window_get_active_conversation(win); + active_gtkconv = pidgin_conv_window_get_active_gtkconv(win); if (dest_win == NULL) { /* If the current window doesn't have any other conversations, @@ -9465,7 +9465,7 @@ } } - gtk_widget_grab_focus(PIDGIN_CONVERSATION(conv)->entry); + gtk_widget_grab_focus(active_gtkconv->entry); return TRUE; } @@ -10094,18 +10094,20 @@ void pidgin_conv_window_destroy(PidginWindow *win) { - purple_prefs_disconnect_by_handle(win); - window_list = g_list_remove(window_list, win); + PidginConversation *gtkconv; + GList *iter; if (win->gtkconvs) { - while (win->gtkconvs) { - gboolean last = (win->gtkconvs->next == NULL); - close_conv_cb(NULL, win->gtkconvs->data); - if (last) - break; + for (iter = win->gtkconvs; iter != NULL; iter = iter->next) { + gtkconv = iter->data; + close_conv_cb(NULL, gtkconv); } return; } + + purple_prefs_disconnect_by_handle(win); + window_list = g_list_remove(window_list, win); + gtk_widget_destroy(win->notebook_menu); gtk_widget_destroy(win->window);