diff --git a/ChangeLog.asciidoc b/ChangeLog.asciidoc index 1b21b6548..6f5da309c 100644 --- a/ChangeLog.asciidoc +++ b/ChangeLog.asciidoc @@ -19,6 +19,8 @@ https://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes] * core: fix crash when a root bar has conditions different from active/inactive/nicklist (closes #317) +* irc: don't close channel buffer on second /part when option + irc.look.part_closes_buffer is off (closes #313) * irc: fix /join on a channel buffer opened with autojoin but which failed to join * irc: send QUIT to server and no PART for channels when the server buffer diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c index 42c49a018..af982a3ae 100644 --- a/src/plugins/irc/irc-command.c +++ b/src/plugins/irc/irc-command.c @@ -3650,6 +3650,7 @@ irc_command_part (void *data, struct t_gui_buffer *buffer, int argc, { if (irc_channel_is_channel (ptr_server, argv[1])) { + ptr_channel = irc_channel_search (ptr_server, argv[1]); channel_name = argv[1]; pos_args = argv_eol[2]; } @@ -3679,15 +3680,20 @@ irc_command_part (void *data, struct t_gui_buffer *buffer, int argc, weechat_prefix ("error"), IRC_PLUGIN_NAME, "part"); return WEECHAT_RC_OK; } - if (!ptr_channel->nicks) - { - weechat_buffer_close (ptr_channel->buffer); - return WEECHAT_RC_OK; - } channel_name = ptr_channel->name; pos_args = NULL; } + if (ptr_channel && !ptr_channel->nicks) + { + if ((ptr_channel->type == IRC_CHANNEL_TYPE_PRIVATE) + || weechat_config_boolean (irc_config_look_part_closes_buffer)) + { + weechat_buffer_close (ptr_channel->buffer); + } + return WEECHAT_RC_OK; + } + irc_command_part_channel (ptr_server, channel_name, pos_args); return WEECHAT_RC_OK;