1
0
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:
Sébastien Helleu
2023-05-14 10:43:10 +02:00
parent 537d18ede5
commit c31af39ada
5 changed files with 46 additions and 4 deletions
+7 -1
View File
@@ -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");
+11 -3
View File
@@ -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);
}
+25
View File
@@ -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 */
+2
View File
@@ -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");