1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-06 17:53:13 +02:00

buffer: add property input_get_any_user_data in buffer (issue #2066)

This allows buffers to get any user input, including commands, that are sent to
the buffer callback instead of being executed on the buffer.
This commit is contained in:
Sébastien Helleu
2024-04-02 19:12:44 +02:00
parent 3cce916035
commit 4adb64284b
24 changed files with 197 additions and 45 deletions
+32 -4
View File
@@ -101,7 +101,7 @@ char *gui_buffer_properties_get_integer[] =
"nicklist_display_groups", "nicklist_count", "nicklist_visible_count",
"nicklist_groups_count", "nicklist_groups_visible_count",
"nicklist_nicks_count", "nicklist_nicks_visible_count",
"input", "input_get_unknown_commands",
"input", "input_get_any_user_data", "input_get_unknown_commands",
"input_get_empty", "input_multiline", "input_size", "input_length",
"input_pos", "input_1st_display", "num_history", "text_search",
"text_search_direction", "text_search_exact", "text_search_regex",
@@ -128,8 +128,8 @@ char *gui_buffer_properties_set[] =
"highlight_words_del", "highlight_disable_regex", "highlight_regex",
"highlight_tags_restrict", "highlight_tags", "hotlist_max_level_nicks",
"hotlist_max_level_nicks_add", "hotlist_max_level_nicks_del",
"input", "input_pos", "input_get_unknown_commands", "input_get_empty",
"input_multiline",
"input", "input_pos", "input_get_any_user_data", "input_get_unknown_commands",
"input_get_empty", "input_multiline",
NULL
};
@@ -898,6 +898,7 @@ gui_buffer_new_props_with_id (long long id,
new_buffer->input_callback = input_callback;
new_buffer->input_callback_pointer = input_callback_pointer;
new_buffer->input_callback_data = input_callback_data;
new_buffer->input_get_any_user_data = 0;
new_buffer->input_get_unknown_commands = 0;
new_buffer->input_get_empty = 0;
new_buffer->input_multiline = 0;
@@ -1470,6 +1471,8 @@ gui_buffer_get_integer (struct t_gui_buffer *buffer, const char *property)
return buffer->nicklist_nicks_visible_count;
else if (strcmp (property, "input") == 0)
return buffer->input;
else if (strcmp (property, "input_get_any_user_data") == 0)
return buffer->input_get_any_user_data;
else if (strcmp (property, "input_get_unknown_commands") == 0)
return buffer->input_get_unknown_commands;
else if (strcmp (property, "input_get_empty") == 0)
@@ -2246,6 +2249,20 @@ gui_buffer_remove_hotlist_max_level_nicks (struct t_gui_buffer *buffer,
}
}
/*
* Sets flag "input_get_any_user_data" for a buffer.
*/
void
gui_buffer_set_input_get_any_user_data (struct t_gui_buffer *buffer,
int input_get_any_user_data)
{
if (!buffer)
return;
buffer->input_get_any_user_data = (input_get_any_user_data) ? 1 : 0;
}
/*
* Sets flag "input_get_unknown_commands" for a buffer.
*/
@@ -2258,8 +2275,8 @@ gui_buffer_set_input_get_unknown_commands (struct t_gui_buffer *buffer,
return;
buffer->input_get_unknown_commands = (input_get_unknown_commands) ? 1 : 0;
}
}
/*
* Sets flag "input_get_empty" for a buffer.
*/
@@ -2676,6 +2693,13 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
if (error && !error[0])
gui_input_set_pos (buffer, number);
}
else if (strcmp (property, "input_get_any_user_data") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
gui_buffer_set_input_get_any_user_data (buffer, number);
}
else if (strcmp (property, "input_get_unknown_commands") == 0)
{
error = NULL;
@@ -5171,6 +5195,7 @@ gui_buffer_hdata_buffer_cb (const void *pointer, void *data,
HDATA_VAR(struct t_gui_buffer, input_callback, POINTER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_callback_pointer, POINTER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_callback_data, POINTER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_get_any_user_data, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_get_unknown_commands, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_get_empty, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_multiline, INTEGER, 0, NULL, NULL);
@@ -5386,6 +5411,8 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!infolist_new_var_integer (ptr_item, "input", buffer->input))
return 0;
if (!infolist_new_var_integer (ptr_item, "input_get_any_user_data", buffer->input_get_any_user_data))
return 0;
if (!infolist_new_var_integer (ptr_item, "input_get_unknown_commands", buffer->input_get_unknown_commands))
return 0;
if (!infolist_new_var_integer (ptr_item, "input_get_empty", buffer->input_get_empty))
@@ -5623,6 +5650,7 @@ gui_buffer_print_log ()
log_printf (" input_callback. . . . . : %p", ptr_buffer->input_callback);
log_printf (" input_callback_pointer. : %p", ptr_buffer->input_callback_pointer);
log_printf (" input_callback_data . . : %p", ptr_buffer->input_callback_data);
log_printf (" input_get_any_user_data : %d", ptr_buffer->input_get_any_user_data);
log_printf (" input_get_unknown_cmd . : %d", ptr_buffer->input_get_unknown_commands);
log_printf (" input_get_empty . . . . : %d", ptr_buffer->input_get_empty);
log_printf (" input_multiline . . . . : %d", ptr_buffer->input_multiline);