mirror of
https://github.com/weechat/weechat.git
synced 2026-07-01 07:16:37 +02:00
core: set input callback on user buffers after /upgrade
This commit is contained in:
+2
-31
@@ -536,28 +536,6 @@ command_buffer_display_localvar (void *data,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Input callback for custom buffers.
|
||||
*/
|
||||
|
||||
int
|
||||
command_buffer_input_cb (const void *pointer,
|
||||
void *data,
|
||||
struct t_gui_buffer *buffer,
|
||||
const char *input_data)
|
||||
{
|
||||
/* make C compiler happy */
|
||||
(void) pointer;
|
||||
(void) data;
|
||||
|
||||
if (string_strcasecmp (input_data, "q") == 0)
|
||||
{
|
||||
gui_buffer_close (buffer);
|
||||
}
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback for command "/buffer": manages buffers.
|
||||
*/
|
||||
@@ -622,12 +600,7 @@ COMMAND_CALLBACK(buffer)
|
||||
else
|
||||
arg_name = i;
|
||||
}
|
||||
for (i = 0; gui_buffer_reserved_names[i]; i++)
|
||||
{
|
||||
if (strcmp (argv[arg_name], gui_buffer_reserved_names[i]) == 0)
|
||||
break;
|
||||
}
|
||||
if (gui_buffer_reserved_names[i])
|
||||
if (gui_buffer_is_reserved_name (argv[arg_name]))
|
||||
{
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: name \"%s\" is reserved for WeeChat"),
|
||||
@@ -638,9 +611,7 @@ COMMAND_CALLBACK(buffer)
|
||||
ptr_buffer = gui_buffer_search_by_name (PLUGIN_CORE, argv[arg_name]);
|
||||
if (!ptr_buffer)
|
||||
{
|
||||
ptr_buffer = gui_buffer_new (NULL, argv[arg_name],
|
||||
&command_buffer_input_cb, NULL, NULL,
|
||||
NULL, NULL, NULL);
|
||||
ptr_buffer = gui_buffer_new_user (argv[arg_name]);
|
||||
if (ptr_buffer && type_free)
|
||||
gui_buffer_set (ptr_buffer, "type", "free");
|
||||
}
|
||||
|
||||
@@ -854,6 +854,8 @@ upgrade_weechat_load ()
|
||||
gui_color_buffer_assign ();
|
||||
gui_color_buffer_display ();
|
||||
|
||||
gui_buffer_user_set_callbacks ();
|
||||
|
||||
secure_buffer_assign ();
|
||||
secure_buffer_display ();
|
||||
|
||||
|
||||
@@ -552,6 +552,31 @@ gui_buffer_input_buffer_init (struct t_gui_buffer *buffer)
|
||||
buffer->input_buffer_1st_display = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Checks if the name is reserved for WeeChat.
|
||||
*
|
||||
* Returns:
|
||||
* 0: name is not reserved for WeeChat
|
||||
* 1: name is reserved for WeeChat
|
||||
*/
|
||||
|
||||
int
|
||||
gui_buffer_is_reserved_name (const char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!name)
|
||||
return 0;
|
||||
|
||||
for (i = 0; gui_buffer_reserved_names[i]; i++)
|
||||
{
|
||||
if (strcmp (name, gui_buffer_reserved_names[i]) == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
return (gui_buffer_reserved_names[i]) ? 1 : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates a new buffer in current window.
|
||||
*
|
||||
@@ -762,6 +787,71 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
return new_buffer;
|
||||
}
|
||||
|
||||
/*
|
||||
* Input callback for user buffers.
|
||||
*/
|
||||
|
||||
int
|
||||
gui_buffer_user_input_cb (const void *pointer, void *data,
|
||||
struct t_gui_buffer *buffer, const char *input_data)
|
||||
{
|
||||
/* make C compiler happy */
|
||||
(void) pointer;
|
||||
(void) data;
|
||||
|
||||
if (string_strcasecmp (input_data, "q") == 0)
|
||||
{
|
||||
gui_buffer_close (buffer);
|
||||
}
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates a new user buffer in current window.
|
||||
*
|
||||
* Returns pointer to new buffer, NULL if error.
|
||||
*/
|
||||
|
||||
struct t_gui_buffer *
|
||||
gui_buffer_new_user (const char *name)
|
||||
{
|
||||
struct t_gui_buffer *new_buffer;
|
||||
|
||||
new_buffer = gui_buffer_new (NULL, name,
|
||||
&gui_buffer_user_input_cb, NULL, NULL,
|
||||
NULL, NULL, NULL);
|
||||
if (new_buffer)
|
||||
gui_buffer_set (new_buffer, "localvar_set_type", "user");
|
||||
|
||||
return new_buffer;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sets callbacks on user buffers.
|
||||
*/
|
||||
|
||||
void
|
||||
gui_buffer_user_set_callbacks ()
|
||||
{
|
||||
struct t_gui_buffer *ptr_buffer;
|
||||
const char *ptr_type;
|
||||
|
||||
for (ptr_buffer = gui_buffers; ptr_buffer;
|
||||
ptr_buffer = ptr_buffer->next_buffer)
|
||||
{
|
||||
if (!ptr_buffer->plugin
|
||||
&& !gui_buffer_is_reserved_name (ptr_buffer->name))
|
||||
{
|
||||
ptr_type = gui_buffer_get_string (ptr_buffer, "localvar_type");
|
||||
if (ptr_type && (strcmp (ptr_type, "user") == 0))
|
||||
{
|
||||
ptr_buffer->input_callback = &gui_buffer_user_input_cb;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Checks if a buffer pointer is valid.
|
||||
*
|
||||
|
||||
@@ -249,6 +249,7 @@ extern const char *gui_buffer_get_short_name (struct t_gui_buffer *buffer);
|
||||
extern void gui_buffer_build_full_name (struct t_gui_buffer *buffer);
|
||||
extern void gui_buffer_notify_set_all ();
|
||||
extern void gui_buffer_input_buffer_init (struct t_gui_buffer *buffer);
|
||||
extern int gui_buffer_is_reserved_name (const char *name);
|
||||
extern struct t_gui_buffer *gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
const char *name,
|
||||
int (*input_callback)(const void *pointer,
|
||||
@@ -262,6 +263,8 @@ extern struct t_gui_buffer *gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
struct t_gui_buffer *buffer),
|
||||
const void *close_callback_pointer,
|
||||
void *close_callback_data);
|
||||
extern struct t_gui_buffer *gui_buffer_new_user (const char *name);
|
||||
extern void gui_buffer_user_set_callbacks ();
|
||||
extern int gui_buffer_valid (struct t_gui_buffer *buffer);
|
||||
extern char *gui_buffer_string_replace_local_var (struct t_gui_buffer *buffer,
|
||||
const char *string);
|
||||
|
||||
Reference in New Issue
Block a user