mirror of
https://github.com/weechat/weechat.git
synced 2026-06-27 21:36:37 +02:00
irc: fix order of channel buffers opened (closes #303)
This commit is contained in:
@@ -22,6 +22,9 @@ https://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes]
|
||||
|
||||
=== Bugs fixed
|
||||
|
||||
* irc: fix order of channel buffers opened when option irc.look.server_buffer
|
||||
is set to "independent", irc.look.buffer_open_before_autojoin to "on" and
|
||||
irc.look.new_channel_position to "near_server" (closes #303)
|
||||
* irc: fix crash in buffer close when server name is the same as a channel name
|
||||
(closes #305)
|
||||
|
||||
|
||||
@@ -76,59 +76,69 @@ irc_channel_move_near_server (struct t_irc_server *server, int channel_type,
|
||||
int number, number_channel, number_last_channel, number_last_private;
|
||||
int number_found;
|
||||
char str_number[32];
|
||||
struct t_irc_channel *ptr_channel;
|
||||
const char *ptr_type, *ptr_server_name;
|
||||
struct t_hdata *hdata_buffer;
|
||||
struct t_gui_buffer *ptr_buffer;
|
||||
|
||||
number = weechat_buffer_get_integer (buffer, "number");
|
||||
number_last_channel = 0;
|
||||
number_last_private = 0;
|
||||
number_found = 0;
|
||||
|
||||
if (server->channels)
|
||||
hdata_buffer = weechat_hdata_get ("buffer");
|
||||
ptr_buffer = weechat_hdata_get_list (hdata_buffer, "gui_buffers");
|
||||
while (ptr_buffer)
|
||||
{
|
||||
/* search last channel/pv number for server */
|
||||
for (ptr_channel = server->channels; ptr_channel;
|
||||
ptr_channel = ptr_channel->next_channel)
|
||||
if ((ptr_buffer != buffer)
|
||||
&& (weechat_buffer_get_pointer (ptr_buffer,
|
||||
"plugin") == weechat_irc_plugin))
|
||||
{
|
||||
if (ptr_channel->buffer)
|
||||
ptr_type = weechat_buffer_get_string (ptr_buffer,
|
||||
"localvar_type");
|
||||
ptr_server_name = weechat_buffer_get_string (ptr_buffer,
|
||||
"localvar_server");
|
||||
number_channel = weechat_buffer_get_integer (ptr_buffer,
|
||||
"number");
|
||||
if (ptr_type && ptr_type[0]
|
||||
&& ptr_server_name && ptr_server_name[0]
|
||||
&& (strcmp (ptr_server_name, server->name) == 0))
|
||||
{
|
||||
number_channel = weechat_buffer_get_integer (
|
||||
ptr_channel->buffer, "number");
|
||||
switch (ptr_channel->type)
|
||||
if (strcmp (ptr_type, "channel") == 0)
|
||||
{
|
||||
case IRC_CHANNEL_TYPE_CHANNEL:
|
||||
if (number_channel > number_last_channel)
|
||||
number_last_channel = number_channel;
|
||||
break;
|
||||
case IRC_CHANNEL_TYPE_PRIVATE:
|
||||
if (number_channel > number_last_private)
|
||||
number_last_private = number_channel;
|
||||
break;
|
||||
if (number_channel > number_last_channel)
|
||||
number_last_channel = number_channel;
|
||||
}
|
||||
else if (strcmp (ptr_type, "private") == 0)
|
||||
{
|
||||
if (number_channel > number_last_private)
|
||||
number_last_private = number_channel;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* use last channel/pv number + 1 */
|
||||
switch (channel_type)
|
||||
{
|
||||
case IRC_CHANNEL_TYPE_CHANNEL:
|
||||
if (number_last_channel > 0)
|
||||
number_found = number_last_channel + 1;
|
||||
break;
|
||||
case IRC_CHANNEL_TYPE_PRIVATE:
|
||||
if (number_last_private > 0)
|
||||
number_found = number_last_private + 1;
|
||||
else if (number_last_channel > 0)
|
||||
number_found = number_last_channel + 1;
|
||||
break;
|
||||
}
|
||||
/* move to next buffer */
|
||||
ptr_buffer = weechat_hdata_move (hdata_buffer, ptr_buffer, 1);
|
||||
}
|
||||
else
|
||||
|
||||
/* use last channel/pv number + 1 */
|
||||
switch (channel_type)
|
||||
{
|
||||
if (weechat_config_integer (irc_config_look_server_buffer) ==
|
||||
IRC_CONFIG_LOOK_SERVER_BUFFER_INDEPENDENT)
|
||||
{
|
||||
number_found = weechat_buffer_get_integer (server->buffer, "number") + 1;
|
||||
}
|
||||
case IRC_CHANNEL_TYPE_CHANNEL:
|
||||
if (number_last_channel > 0)
|
||||
number_found = number_last_channel + 1;
|
||||
break;
|
||||
case IRC_CHANNEL_TYPE_PRIVATE:
|
||||
if (number_last_private > 0)
|
||||
number_found = number_last_private + 1;
|
||||
else if (number_last_channel > 0)
|
||||
number_found = number_last_channel + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((number_found == 0)
|
||||
&& (weechat_config_integer (irc_config_look_server_buffer) ==
|
||||
IRC_CONFIG_LOOK_SERVER_BUFFER_INDEPENDENT))
|
||||
{
|
||||
number_found = weechat_buffer_get_integer (server->buffer, "number") + 1;
|
||||
}
|
||||
|
||||
/* switch to number found */
|
||||
|
||||
Reference in New Issue
Block a user