mirror of
https://github.com/weechat/weechat.git
synced 2026-06-12 14:14:48 +02:00
irc: set "input_multiline" to 1 in buffers only if capability draft/multiline is enabled (issue #1923)
This commit is contained in:
@@ -330,7 +330,6 @@ irc_channel_create_buffer (struct t_irc_server *server,
|
||||
|
||||
if (buffer_created)
|
||||
{
|
||||
weechat_buffer_set (ptr_buffer, "input_multiline", "1");
|
||||
if (!weechat_buffer_get_integer (ptr_buffer, "short_name_is_set"))
|
||||
weechat_buffer_set (ptr_buffer, "short_name", channel_name);
|
||||
}
|
||||
@@ -348,6 +347,13 @@ irc_channel_create_buffer (struct t_irc_server *server,
|
||||
}
|
||||
}
|
||||
|
||||
weechat_buffer_set (
|
||||
ptr_buffer,
|
||||
"input_multiline",
|
||||
(weechat_hashtable_has_key (server->cap_list, "batch")
|
||||
&& weechat_hashtable_has_key (server->cap_list, "draft/multiline")) ?
|
||||
"1" : "0");
|
||||
|
||||
weechat_buffer_set (ptr_buffer, "name", buffer_name);
|
||||
weechat_buffer_set (ptr_buffer, "localvar_set_type",
|
||||
(channel_type == IRC_CHANNEL_TYPE_CHANNEL) ? "channel" : "private");
|
||||
|
||||
@@ -1021,6 +1021,7 @@ IRC_PROTOCOL_CALLBACK(cap)
|
||||
if (!server->checking_cap_list)
|
||||
{
|
||||
weechat_hashtable_remove_all (server->cap_list);
|
||||
irc_server_buffer_set_input_multiline (server, 0);
|
||||
server->checking_cap_list = 1;
|
||||
}
|
||||
|
||||
@@ -1051,6 +1052,8 @@ IRC_PROTOCOL_CALLBACK(cap)
|
||||
{
|
||||
weechat_hashtable_set (server->cap_list,
|
||||
str_name, pos_value + 1);
|
||||
if (strcmp (str_name, "draft/multiline") == 0)
|
||||
irc_server_buffer_set_input_multiline (server, 1);
|
||||
free (str_name);
|
||||
}
|
||||
}
|
||||
@@ -1058,6 +1061,8 @@ IRC_PROTOCOL_CALLBACK(cap)
|
||||
{
|
||||
weechat_hashtable_set (server->cap_list,
|
||||
caps_enabled[j], NULL);
|
||||
if (strcmp (caps_enabled[j], "draft/multiline") == 0)
|
||||
irc_server_buffer_set_input_multiline (server, 1);
|
||||
}
|
||||
}
|
||||
weechat_string_free_split (caps_enabled);
|
||||
@@ -1109,9 +1114,10 @@ IRC_PROTOCOL_CALLBACK(cap)
|
||||
weechat_string_dyn_concat (str_caps_disabled,
|
||||
caps_supported[j] + 1,
|
||||
-1);
|
||||
|
||||
weechat_hashtable_remove (server->cap_list,
|
||||
caps_supported[j] + 1);
|
||||
if (strcmp (caps_supported[j] + 1, "draft/multiline") == 0)
|
||||
irc_server_buffer_set_input_multiline (server, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1120,10 +1126,10 @@ IRC_PROTOCOL_CALLBACK(cap)
|
||||
weechat_string_dyn_concat (str_caps_enabled,
|
||||
caps_supported[j],
|
||||
-1);
|
||||
|
||||
weechat_hashtable_set (server->cap_list,
|
||||
caps_supported[j], NULL);
|
||||
|
||||
if (strcmp (caps_supported[j], "draft/multiline") == 0)
|
||||
irc_server_buffer_set_input_multiline (server, 1);
|
||||
if (strcmp (caps_supported[j], "sasl") == 0)
|
||||
sasl_to_do = 1;
|
||||
}
|
||||
@@ -1280,6 +1286,8 @@ IRC_PROTOCOL_CALLBACK(cap)
|
||||
{
|
||||
weechat_hashtable_remove (server->cap_ls, caps_removed[j]);
|
||||
weechat_hashtable_remove (server->cap_list, caps_removed[j]);
|
||||
if (strcmp (caps_removed[j], "draft/multiline") == 0)
|
||||
irc_server_buffer_set_input_multiline (server, 0);
|
||||
}
|
||||
weechat_string_free_split (caps_removed);
|
||||
}
|
||||
|
||||
@@ -1588,6 +1588,29 @@ irc_server_get_default_msg (const char *default_msg,
|
||||
return msg;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sets "input_multiline" to 1 or 0, according to capability draft/multiline
|
||||
* on all channels and private buffers.
|
||||
*/
|
||||
|
||||
void
|
||||
irc_server_buffer_set_input_multiline (struct t_irc_server *server,
|
||||
int multiline)
|
||||
{
|
||||
struct t_irc_channel *ptr_channel;
|
||||
|
||||
for (ptr_channel = server->channels; ptr_channel;
|
||||
ptr_channel = ptr_channel->next_channel)
|
||||
{
|
||||
if (ptr_channel->buffer)
|
||||
{
|
||||
weechat_buffer_set (ptr_channel->buffer,
|
||||
"input_multiline",
|
||||
(multiline) ? "1" : "0");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocates a new server and adds it to the servers queue.
|
||||
*
|
||||
@@ -5725,6 +5748,8 @@ irc_server_disconnect (struct t_irc_server *server, int switch_address,
|
||||
|
||||
irc_server_set_buffer_title (server);
|
||||
|
||||
irc_server_buffer_set_input_multiline (server, 0);
|
||||
|
||||
server->disconnected = 1;
|
||||
|
||||
/* send signal "irc_server_disconnected" with server name */
|
||||
|
||||
@@ -383,6 +383,8 @@ extern char *irc_server_get_default_msg (const char *default_msg,
|
||||
struct t_irc_server *server,
|
||||
const char *channel_name,
|
||||
const char *target_nick);
|
||||
extern void irc_server_buffer_set_input_multiline (struct t_irc_server *server,
|
||||
int multiline);
|
||||
extern struct t_irc_server *irc_server_alloc (const char *name);
|
||||
extern struct t_irc_server *irc_server_alloc_with_url (const char *irc_url);
|
||||
extern void irc_server_apply_command_line_options (struct t_irc_server *server,
|
||||
|
||||
@@ -807,6 +807,7 @@ TEST(IrcProtocolWithServer, batch)
|
||||
/* assume "batch" and "draft/multiline" capabilities are enabled in server */
|
||||
hashtable_set (ptr_server->cap_list, "batch", NULL);
|
||||
hashtable_set (ptr_server->cap_list, "draft/multiline", NULL);
|
||||
irc_server_buffer_set_input_multiline (ptr_server, 1);
|
||||
|
||||
/* not enough parameters */
|
||||
RECV(":server BATCH");
|
||||
|
||||
Reference in New Issue
Block a user