1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-04 00:33:13 +02:00

Fix crash when deleting last server if there is one buffer for all servers

This commit is contained in:
Sebastien Helleu
2009-05-03 17:19:42 +02:00
parent d6ed1485a4
commit 28f3762618
3 changed files with 51 additions and 33 deletions
+1 -33
View File
@@ -3112,39 +3112,7 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc,
if (weechat_strcasecmp (argv[1], "switch") == 0)
{
if (weechat_config_boolean (irc_config_look_one_server_buffer))
{
if (irc_current_server)
{
ptr_server2 = irc_current_server->next_server;
if (!ptr_server2)
ptr_server2 = irc_servers;
while (ptr_server2 != irc_current_server)
{
if (ptr_server2->buffer)
{
irc_current_server = ptr_server2;
break;
}
ptr_server2 = ptr_server2->next_server;
if (!ptr_server2)
ptr_server2 = irc_servers;
}
}
else
{
for (ptr_server2 = irc_servers; ptr_server2;
ptr_server2 = ptr_server2->next_server)
{
if (ptr_server2->buffer)
{
irc_current_server = ptr_server2;
break;
}
}
}
if (irc_current_server)
irc_server_set_current_server (irc_current_server);
}
irc_server_switch_next ();
return WEECHAT_RC_OK;
}
+49
View File
@@ -634,6 +634,48 @@ irc_server_outqueue_free_all (struct t_irc_server *server)
}
}
/*
* irc_server_switch_next: swicth to next server
*/
void
irc_server_switch_next ()
{
struct t_irc_server *ptr_server;
if (irc_current_server)
{
ptr_server = irc_current_server->next_server;
if (!ptr_server)
ptr_server = irc_servers;
while (ptr_server != irc_current_server)
{
if (ptr_server->buffer)
{
irc_current_server = ptr_server;
break;
}
ptr_server = ptr_server->next_server;
if (!ptr_server)
ptr_server = irc_servers;
}
}
else
{
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (ptr_server->buffer)
{
irc_current_server = ptr_server;
break;
}
}
}
if (irc_current_server)
irc_server_set_current_server (irc_current_server);
}
/*
* irc_server_free_data: free server data
*/
@@ -692,6 +734,13 @@ irc_server_free (struct t_irc_server *server)
if (!server)
return;
if (irc_current_server == server)
{
irc_server_switch_next ();
if (irc_current_server == server)
irc_current_server = NULL;
}
/* close all channels/privates */
irc_channel_free_all (server);
+1
View File
@@ -172,6 +172,7 @@ extern void irc_server_buffer_set_highlight_words (struct t_gui_buffer *buffer);
extern void irc_server_set_nick (struct t_irc_server *server, const char *nick);
extern struct t_irc_server *irc_server_alloc (const char *name);
extern int irc_server_alloc_with_url (const char *irc_url);
extern void irc_server_switch_next ();
extern void irc_server_free_all ();
extern struct t_irc_server *irc_server_copy (struct t_irc_server *server,
const char *new_name);