From 01821535111416ce56291d2bacd0da7ac9d23c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Thu, 15 Aug 2024 21:35:38 +0200 Subject: [PATCH] core: send signal "buffer_moved" for all buffers affected by merge/unmerge --- CHANGELOG.md | 1 + src/gui/gui-buffer.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a3d66f30..59a21e240 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,7 @@ - xfer: fix send of data on the DCC chat buffer after `/upgrade` if the buffer was opened before the upgrade ([#2092](https://github.com/weechat/weechat/issues/2092)) - core: fix refresh of bar item "scroll" in root bar after `/buffer clear` ([#590](https://github.com/weechat/weechat/issues/590)) - core, plugins: return "0x0" instead of "(nil)" for pointers formatted in strings +- core: send signal "buffer_moved" for all buffers affected by merge/unmerge - ruby: fix builtin functions not available ([#2109](https://github.com/weechat/weechat/issues/2109)) - php: fix return value of function hdata_longlong - tcl: fix return value of function hdata_longlong ([#2119](https://github.com/weechat/weechat/issues/2119)) diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index b916bae34..d473bb748 100644 --- a/src/gui/gui-buffer.c +++ b/src/gui/gui-buffer.c @@ -36,6 +36,7 @@ #include #include "../core/weechat.h" +#include "../core/core-arraylist.h" #include "../core/core-config.h" #include "../core/core-eval.h" #include "../core/core-hashtable.h" @@ -459,6 +460,10 @@ 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); } } @@ -4407,6 +4412,8 @@ gui_buffer_merge (struct t_gui_buffer *buffer, struct t_gui_buffer *target_buffer) { struct t_gui_buffer *ptr_buffer, *ptr_first_buffer[2], *ptr_last_buffer[2]; + struct t_arraylist *buffers_moved; + int i, list_size; if (!buffer || !target_buffer) return; @@ -4451,6 +4458,10 @@ gui_buffer_merge (struct t_gui_buffer *buffer, if (!ptr_first_buffer[1] || !ptr_last_buffer[1]) return; + buffers_moved = arraylist_new (32, 0, 1, NULL, NULL, NULL, NULL); + if (!buffers_moved) + return; + /* remove buffer(s) to merge from list */ if (ptr_first_buffer[0]->prev_buffer) (ptr_first_buffer[0]->prev_buffer)->next_buffer = ptr_last_buffer[0]->next_buffer; @@ -4467,6 +4478,7 @@ gui_buffer_merge (struct t_gui_buffer *buffer, for (ptr_buffer = ptr_last_buffer[0]->next_buffer; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) { + arraylist_add (buffers_moved, ptr_buffer); ptr_buffer->number--; } } @@ -4485,6 +4497,7 @@ gui_buffer_merge (struct t_gui_buffer *buffer, ptr_buffer = ptr_buffer->next_buffer) { ptr_buffer->number = target_buffer->number; + arraylist_add (buffers_moved, ptr_buffer); if (ptr_buffer == ptr_last_buffer[0]) break; } @@ -4502,6 +4515,20 @@ gui_buffer_merge (struct t_gui_buffer *buffer, (void) gui_buffer_send_signal (buffer, "buffer_merged", WEECHAT_HOOK_SIGNAL_POINTER, buffer); + + list_size = arraylist_size (buffers_moved); + for (i = 0; i < list_size; i++) + { + ptr_buffer = (struct t_gui_buffer *)arraylist_get (buffers_moved, i); + if (ptr_buffer) + { + (void) gui_buffer_send_signal (ptr_buffer, + "buffer_moved", + WEECHAT_HOOK_SIGNAL_POINTER, ptr_buffer); + } + } + + arraylist_free (buffers_moved); } /*