1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 04:46:37 +02:00

core: send signal "buffer_moved" only when the buffer number changes (issue #2097)

This commit is contained in:
Sébastien Helleu
2024-11-04 18:00:23 +01:00
parent 74cc16ef07
commit 9f6caa4e03
2 changed files with 47 additions and 13 deletions
+46 -13
View File
@@ -95,8 +95,8 @@ char *gui_buffer_notify_string[GUI_BUFFER_NUM_NOTIFY] =
{ "none", "highlight", "message", "all" };
char *gui_buffer_properties_get_integer[] =
{ "opening", "number", "layout_number", "layout_number_merge_order", "type",
"notify", "num_displayed", "active", "hidden", "zoomed",
{ "opening", "number", "old_number", "layout_number", "layout_number_merge_order",
"type", "notify", "num_displayed", "active", "hidden", "zoomed",
"print_hooks_enabled", "day_change", "clear", "filter", "closing",
"lines_hidden", "prefix_max_length", "next_line_id", "time_for_each_line",
"nicklist", "nicklist_case_sensitive", "nicklist_max_length",
@@ -452,7 +452,8 @@ gui_buffer_find_pos (struct t_gui_buffer *buffer)
*/
void
gui_buffer_shift_numbers (struct t_gui_buffer *buffer)
gui_buffer_shift_numbers (struct t_gui_buffer *buffer,
int send_signal_buffer_moved)
{
struct t_gui_buffer *ptr_buffer;
@@ -464,10 +465,13 @@ gui_buffer_shift_numbers (struct t_gui_buffer *buffer)
break;
}
ptr_buffer->number++;
(void) gui_buffer_send_signal (ptr_buffer,
"buffer_moved",
WEECHAT_HOOK_SIGNAL_POINTER,
ptr_buffer);
if (send_signal_buffer_moved)
{
(void) gui_buffer_send_signal (ptr_buffer,
"buffer_moved",
WEECHAT_HOOK_SIGNAL_POINTER,
ptr_buffer);
}
}
}
@@ -561,7 +565,11 @@ gui_buffer_insert (struct t_gui_buffer *buffer)
gui_buffers = buffer;
pos_buffer->prev_buffer = buffer;
if (buffer->number == pos_buffer->number)
gui_buffer_shift_numbers (pos_buffer);
{
gui_buffer_shift_numbers (
pos_buffer,
1); /* send_signal_buffer_moved */
}
}
else
{
@@ -4249,6 +4257,16 @@ gui_buffer_move_to_number (struct t_gui_buffer *buffer, int number)
return;
}
/*
* save old buffer numbers to send signal "buffer_moved" for each buffer
* really moved, after the move operation
*/
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
ptr_buffer->old_number = ptr_buffer->number;
}
/* remove buffer(s) from list */
if (ptr_first_buffer->prev_buffer)
(ptr_first_buffer->prev_buffer)->next_buffer = ptr_last_buffer->next_buffer;
@@ -4301,7 +4319,9 @@ gui_buffer_move_to_number (struct t_gui_buffer *buffer, int number)
if (ptr_last_buffer->next_buffer
&& (ptr_last_buffer->next_buffer->number == number))
{
gui_buffer_shift_numbers (ptr_last_buffer->next_buffer);
gui_buffer_shift_numbers (
ptr_last_buffer->next_buffer,
0); /* send_signal_buffer_moved */
}
}
else
@@ -4324,9 +4344,16 @@ gui_buffer_move_to_number (struct t_gui_buffer *buffer, int number)
last_gui_buffer = ptr_last_buffer;
}
(void) gui_buffer_send_signal (buffer,
"buffer_moved",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
if (ptr_buffer->number != ptr_buffer->old_number)
{
(void) gui_buffer_send_signal (ptr_buffer,
"buffer_moved",
WEECHAT_HOOK_SIGNAL_POINTER, ptr_buffer);
}
}
}
/*
@@ -4672,7 +4699,9 @@ gui_buffer_unmerge (struct t_gui_buffer *buffer, int number)
if (buffer->next_buffer
&& (buffer->next_buffer->number == number))
{
gui_buffer_shift_numbers (buffer->next_buffer);
gui_buffer_shift_numbers (
buffer->next_buffer,
1); /* send_signal_buffer_moved */
}
gui_buffer_compute_num_displayed ();
@@ -5267,6 +5296,7 @@ gui_buffer_hdata_buffer_cb (const void *pointer, void *data,
HDATA_VAR(struct t_gui_buffer, plugin, POINTER, 0, NULL, "plugin");
HDATA_VAR(struct t_gui_buffer, plugin_name_for_upgrade, STRING, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, number, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, old_number, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, layout_number, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, layout_number_merge_order, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, name, STRING, 0, NULL, NULL);
@@ -5465,6 +5495,8 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!infolist_new_var_integer (ptr_item, "number", buffer->number))
return 0;
if (!infolist_new_var_integer (ptr_item, "old_number", buffer->old_number))
return 0;
if (!infolist_new_var_integer (ptr_item, "layout_number", buffer->layout_number))
return 0;
if (!infolist_new_var_integer (ptr_item, "layout_number_merge_order", buffer->layout_number_merge_order))
@@ -5727,6 +5759,7 @@ gui_buffer_print_log ()
ptr_buffer->plugin, gui_buffer_get_plugin_name (ptr_buffer));
log_printf (" plugin_name_for_upgrade : '%s'", ptr_buffer->plugin_name_for_upgrade);
log_printf (" number. . . . . . . . . : %d", ptr_buffer->number);
log_printf (" old_number. . . . . . . : %d", ptr_buffer->old_number);
log_printf (" layout_number . . . . . : %d", ptr_buffer->layout_number);
log_printf (" layout_number_merge_order: %d", ptr_buffer->layout_number_merge_order);
log_printf (" name. . . . . . . . . . : '%s'", ptr_buffer->name);
+1
View File
@@ -111,6 +111,7 @@ struct t_gui_buffer
char *plugin_name_for_upgrade; /* plugin name when upgrading */
int number; /* buffer number (first is 1) */
int old_number; /* internally used when moving buffer*/
int layout_number; /* number of buffer stored in layout */
int layout_number_merge_order; /* order in merge for layout */
char *name; /* buffer name */