diff --git a/ChangeLog b/ChangeLog index cfd37bc70..96a8cf659 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ WeeChat - Wee Enhanced Environment for Chat ChangeLog - 2006-06-10 Version 0.2.0 (under dev!): + * fixed crash when closing DCC/raw buffer if 2 are open (bug #16808) * fixed crashes with DCC chat remove/purge on DCC view (bug #16775) * fixed bug with connection to bnc (bug #16760) * command /save now writes plugins options (~/.weechat/plugins.rc) diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index 17b8fda6a..1614468a2 100644 --- a/src/gui/gui-buffer.c +++ b/src/gui/gui-buffer.c @@ -441,10 +441,6 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another) if (buffer->type == BUFFER_TYPE_RAW_DATA) gui_buffer_raw_data = NULL; - - /* purge DCC chat using this buffer */ - //if (CHANNEL(buffer)) - // dcc_chat_remove_channel (CHANNEL(buffer)); for (ptr_server = irc_servers; ptr_server; ptr_server = ptr_server->next_server) diff --git a/src/gui/gui-common.c b/src/gui/gui-common.c index 9dc09d5af..f859ce812 100644 --- a/src/gui/gui-common.c +++ b/src/gui/gui-common.c @@ -671,6 +671,7 @@ void gui_exec_action_dcc (t_gui_window *window, char *actions) { t_irc_dcc *dcc_selected, *ptr_dcc, *ptr_dcc_next; + t_gui_window *ptr_win; t_gui_buffer *ptr_buffer; while (actions[0]) @@ -722,7 +723,13 @@ gui_exec_action_dcc (t_gui_window *window, char *actions) if (gui_buffer_before_dcc) { ptr_buffer = window->buffer; - gui_window_switch_to_buffer (window, gui_buffer_before_dcc); + for (ptr_win = gui_windows; ptr_win; + ptr_win = ptr_win->next_window) + { + if (ptr_win->buffer == ptr_buffer) + gui_window_switch_to_buffer (ptr_win, + gui_buffer_before_dcc); + } gui_buffer_free (ptr_buffer, 0); } else @@ -759,6 +766,7 @@ gui_exec_action_dcc (t_gui_window *window, char *actions) void gui_exec_action_raw_data (t_gui_window *window, char *actions) { + t_gui_window *ptr_win; t_gui_buffer *ptr_buffer; while (actions[0]) @@ -773,8 +781,13 @@ gui_exec_action_raw_data (t_gui_window *window, char *actions) if (gui_buffer_before_raw_data) { ptr_buffer = window->buffer; - gui_window_switch_to_buffer (window, - gui_buffer_before_raw_data); + for (ptr_win = gui_windows; ptr_win; + ptr_win = ptr_win->next_window) + { + if (ptr_win->buffer == ptr_buffer) + gui_window_switch_to_buffer (ptr_win, + gui_buffer_before_raw_data); + } gui_buffer_free (ptr_buffer, 0); } else diff --git a/weechat/ChangeLog b/weechat/ChangeLog index cfd37bc70..96a8cf659 100644 --- a/weechat/ChangeLog +++ b/weechat/ChangeLog @@ -4,6 +4,7 @@ WeeChat - Wee Enhanced Environment for Chat ChangeLog - 2006-06-10 Version 0.2.0 (under dev!): + * fixed crash when closing DCC/raw buffer if 2 are open (bug #16808) * fixed crashes with DCC chat remove/purge on DCC view (bug #16775) * fixed bug with connection to bnc (bug #16760) * command /save now writes plugins options (~/.weechat/plugins.rc) diff --git a/weechat/src/gui/gui-buffer.c b/weechat/src/gui/gui-buffer.c index 17b8fda6a..1614468a2 100644 --- a/weechat/src/gui/gui-buffer.c +++ b/weechat/src/gui/gui-buffer.c @@ -441,10 +441,6 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another) if (buffer->type == BUFFER_TYPE_RAW_DATA) gui_buffer_raw_data = NULL; - - /* purge DCC chat using this buffer */ - //if (CHANNEL(buffer)) - // dcc_chat_remove_channel (CHANNEL(buffer)); for (ptr_server = irc_servers; ptr_server; ptr_server = ptr_server->next_server) diff --git a/weechat/src/gui/gui-common.c b/weechat/src/gui/gui-common.c index 9dc09d5af..f859ce812 100644 --- a/weechat/src/gui/gui-common.c +++ b/weechat/src/gui/gui-common.c @@ -671,6 +671,7 @@ void gui_exec_action_dcc (t_gui_window *window, char *actions) { t_irc_dcc *dcc_selected, *ptr_dcc, *ptr_dcc_next; + t_gui_window *ptr_win; t_gui_buffer *ptr_buffer; while (actions[0]) @@ -722,7 +723,13 @@ gui_exec_action_dcc (t_gui_window *window, char *actions) if (gui_buffer_before_dcc) { ptr_buffer = window->buffer; - gui_window_switch_to_buffer (window, gui_buffer_before_dcc); + for (ptr_win = gui_windows; ptr_win; + ptr_win = ptr_win->next_window) + { + if (ptr_win->buffer == ptr_buffer) + gui_window_switch_to_buffer (ptr_win, + gui_buffer_before_dcc); + } gui_buffer_free (ptr_buffer, 0); } else @@ -759,6 +766,7 @@ gui_exec_action_dcc (t_gui_window *window, char *actions) void gui_exec_action_raw_data (t_gui_window *window, char *actions) { + t_gui_window *ptr_win; t_gui_buffer *ptr_buffer; while (actions[0]) @@ -773,8 +781,13 @@ gui_exec_action_raw_data (t_gui_window *window, char *actions) if (gui_buffer_before_raw_data) { ptr_buffer = window->buffer; - gui_window_switch_to_buffer (window, - gui_buffer_before_raw_data); + for (ptr_win = gui_windows; ptr_win; + ptr_win = ptr_win->next_window) + { + if (ptr_win->buffer == ptr_buffer) + gui_window_switch_to_buffer (ptr_win, + gui_buffer_before_raw_data); + } gui_buffer_free (ptr_buffer, 0); } else