mirror of
https://github.com/weechat/weechat.git
synced 2026-06-27 21:36:37 +02:00
Fixed crash when closing a buffer opened on many windows
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
ChangeLog - 2007-01-16
|
||||
ChangeLog - 2007-01-17
|
||||
|
||||
|
||||
Version 0.2.4 (under dev!):
|
||||
* fixed crash when closing a buffer opened on many windows
|
||||
* fixed freeze with SSL server when disconnecting after connection loss
|
||||
(bug #18735)
|
||||
|
||||
|
||||
@@ -1157,10 +1157,10 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
|
||||
{
|
||||
ptr_channel = channel_search_any (SERVER(buffer),
|
||||
CHANNEL(buffer)->name);
|
||||
if (ptr_channel)
|
||||
channel_free (SERVER(buffer),
|
||||
ptr_channel);
|
||||
ptr_server = SERVER(buffer);
|
||||
gui_buffer_free (buffer, 1);
|
||||
if (ptr_channel)
|
||||
channel_free (ptr_server, ptr_channel);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
+12
-11
@@ -466,6 +466,16 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another)
|
||||
|
||||
create_new = (buffer->server || buffer->channel);
|
||||
|
||||
if (switch_to_another)
|
||||
{
|
||||
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
|
||||
{
|
||||
if ((buffer == ptr_win->buffer) &&
|
||||
((buffer->next_buffer) || (buffer->prev_buffer)))
|
||||
gui_buffer_switch_previous (ptr_win);
|
||||
}
|
||||
}
|
||||
|
||||
hotlist_remove_buffer (buffer);
|
||||
if (hotlist_initial_buffer == buffer)
|
||||
hotlist_initial_buffer = NULL;
|
||||
@@ -486,16 +496,6 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another)
|
||||
ptr_server->saved_buffer = NULL;
|
||||
}
|
||||
|
||||
if (switch_to_another)
|
||||
{
|
||||
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
|
||||
{
|
||||
if ((buffer == ptr_win->buffer) &&
|
||||
((buffer->next_buffer) || (buffer->prev_buffer)))
|
||||
gui_buffer_switch_previous (ptr_win);
|
||||
}
|
||||
}
|
||||
|
||||
/* decrease buffer number for all next buffers */
|
||||
for (ptr_buffer = buffer->next_buffer; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
|
||||
{
|
||||
@@ -546,7 +546,8 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another)
|
||||
(void) gui_buffer_new (gui_windows, NULL, NULL,
|
||||
BUFFER_TYPE_STANDARD, 1);
|
||||
|
||||
gui_status_draw (gui_current_window->buffer, 1);
|
||||
if (gui_windows && gui_current_window && gui_current_window->buffer)
|
||||
gui_status_draw (gui_current_window->buffer, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -294,6 +294,9 @@ gui_window_free (t_gui_window *window)
|
||||
gui_windows = window->next_window;
|
||||
if (last_gui_window == window)
|
||||
last_gui_window = window->prev_window;
|
||||
|
||||
if (gui_current_window == window)
|
||||
gui_current_window = gui_windows;
|
||||
|
||||
free (window);
|
||||
}
|
||||
|
||||
+2
-1
@@ -1,10 +1,11 @@
|
||||
WeeChat - Wee Enhanced Environment for Chat
|
||||
===========================================
|
||||
|
||||
ChangeLog - 2007-01-16
|
||||
ChangeLog - 2007-01-17
|
||||
|
||||
|
||||
Version 0.2.4 (under dev!):
|
||||
* fixed crash when closing a buffer opened on many windows
|
||||
* fixed freeze with SSL server when disconnecting after connection loss
|
||||
(bug #18735)
|
||||
|
||||
|
||||
@@ -1157,10 +1157,10 @@ weechat_cmd_buffer (t_irc_server *server, t_irc_channel *channel,
|
||||
{
|
||||
ptr_channel = channel_search_any (SERVER(buffer),
|
||||
CHANNEL(buffer)->name);
|
||||
if (ptr_channel)
|
||||
channel_free (SERVER(buffer),
|
||||
ptr_channel);
|
||||
ptr_server = SERVER(buffer);
|
||||
gui_buffer_free (buffer, 1);
|
||||
if (ptr_channel)
|
||||
channel_free (ptr_server, ptr_channel);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -466,6 +466,16 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another)
|
||||
|
||||
create_new = (buffer->server || buffer->channel);
|
||||
|
||||
if (switch_to_another)
|
||||
{
|
||||
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
|
||||
{
|
||||
if ((buffer == ptr_win->buffer) &&
|
||||
((buffer->next_buffer) || (buffer->prev_buffer)))
|
||||
gui_buffer_switch_previous (ptr_win);
|
||||
}
|
||||
}
|
||||
|
||||
hotlist_remove_buffer (buffer);
|
||||
if (hotlist_initial_buffer == buffer)
|
||||
hotlist_initial_buffer = NULL;
|
||||
@@ -486,16 +496,6 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another)
|
||||
ptr_server->saved_buffer = NULL;
|
||||
}
|
||||
|
||||
if (switch_to_another)
|
||||
{
|
||||
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
|
||||
{
|
||||
if ((buffer == ptr_win->buffer) &&
|
||||
((buffer->next_buffer) || (buffer->prev_buffer)))
|
||||
gui_buffer_switch_previous (ptr_win);
|
||||
}
|
||||
}
|
||||
|
||||
/* decrease buffer number for all next buffers */
|
||||
for (ptr_buffer = buffer->next_buffer; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
|
||||
{
|
||||
@@ -546,7 +546,8 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another)
|
||||
(void) gui_buffer_new (gui_windows, NULL, NULL,
|
||||
BUFFER_TYPE_STANDARD, 1);
|
||||
|
||||
gui_status_draw (gui_current_window->buffer, 1);
|
||||
if (gui_windows && gui_current_window && gui_current_window->buffer)
|
||||
gui_status_draw (gui_current_window->buffer, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -294,6 +294,9 @@ gui_window_free (t_gui_window *window)
|
||||
gui_windows = window->next_window;
|
||||
if (last_gui_window == window)
|
||||
last_gui_window = window->prev_window;
|
||||
|
||||
if (gui_current_window == window)
|
||||
gui_current_window = gui_windows;
|
||||
|
||||
free (window);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user