int irc_buffer_close_cb (void *data, struct t_gui_buffer *buffer) { struct t_irc_channel *next_channel; IRC_BUFFER_GET_SERVER_CHANNEL(buffer); /* make C compiler happy */ (void) data; if (buffer == irc_raw_buffer) { irc_raw_buffer = NULL; } else { if (ptr_channel) { /* send PART for channel if its buffer is closed */ if ((ptr_channel->type == IRC_CHANNEL_TYPE_CHANNEL) && (ptr_channel->nicks)) { irc_command_part_channel (ptr_server, ptr_channel->name, NULL); } irc_channel_free (ptr_server, ptr_channel); } else { if (ptr_server) { if (!ptr_server->disconnected) { /* send QUIT to server, then disconnect */ irc_command_quit_server (ptr_server, NULL); irc_server_disconnect (ptr_server, 0, 0); } ptr_channel = ptr_server->channels; while (ptr_channel) { next_channel = ptr_channel->next_channel; if (ptr_channel->buffer != buffer) weechat_buffer_close (ptr_channel->buffer); ptr_channel = next_channel; } ptr_server->buffer = NULL; } } } return WEECHAT_RC_OK; }
int irc_signal_quit_cb (void *data, const char *signal, const char *type_data, void *signal_data) { struct t_irc_server *ptr_server; /* make C compiler happy */ (void) data; (void) signal; if (strcmp (type_data, DOGECHAT_HOOK_SIGNAL_STRING) == 0) { for (ptr_server = irc_servers; ptr_server; ptr_server = ptr_server->next_server) { irc_command_quit_server ( ptr_server, (signal_data) ? (char *)signal_data : NULL); } } return DOGECHAT_RC_OK; }