From 98a599d0795fc87057e99c0b9055847dc8911fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Tue, 21 Mar 2023 20:14:35 +0100 Subject: [PATCH] core: move buffer functions and remove them from header file --- src/gui/gui-buffer.c | 544 ++++++++++++++--------------- src/gui/gui-buffer.h | 10 - tests/unit/gui/test-gui-buffer.cpp | 200 +++++------ 3 files changed, 372 insertions(+), 382 deletions(-) diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index b5b655a74..88a0248ff 100644 --- a/src/gui/gui-buffer.c +++ b/src/gui/gui-buffer.c @@ -3016,6 +3016,278 @@ gui_buffer_clear_all () } } +/* + * Gets next active buffer (when many buffers are merged). + * + * If "allow_hidden_buffer" == 1, an hidden buffer can be returned. + * Otherwise an hidden buffer is never returned (if all other merged buffers are + * hidden, then NULL is returned). + */ + +struct t_gui_buffer * +gui_buffer_get_next_active_buffer (struct t_gui_buffer *buffer, + int allow_hidden_buffer) +{ + struct t_gui_buffer *ptr_buffer; + + if (!buffer) + return NULL; + + /* search after buffer */ + for (ptr_buffer = buffer->next_buffer; ptr_buffer; + ptr_buffer = ptr_buffer->next_buffer) + { + if (ptr_buffer->number != buffer->number) + break; + if (allow_hidden_buffer || !ptr_buffer->hidden) + return ptr_buffer; + } + + /* search before buffer */ + for (ptr_buffer = gui_buffers; ptr_buffer; + ptr_buffer = ptr_buffer->next_buffer) + { + if (ptr_buffer == buffer) + break; + if ((ptr_buffer->number == buffer->number) + && (allow_hidden_buffer || !ptr_buffer->hidden)) + { + return ptr_buffer; + } + } + + return NULL; +} + +/* + * Gets previous active buffer (when many buffers are merged). + * + * If "allow_hidden_buffer" == 1, an hidden buffer can be returned. + * Otherwise an hidden buffer is never returned (if all other merged buffers are + * hidden, then NULL is returned). + */ + +struct t_gui_buffer * +gui_buffer_get_previous_active_buffer (struct t_gui_buffer *buffer, + int allow_hidden_buffer) +{ + struct t_gui_buffer *ptr_buffer; + + if (!buffer) + return NULL; + + /* search before buffer */ + for (ptr_buffer = buffer->prev_buffer; ptr_buffer; + ptr_buffer = ptr_buffer->prev_buffer) + { + if (ptr_buffer->number != buffer->number) + break; + if (allow_hidden_buffer || !ptr_buffer->hidden) + return ptr_buffer; + } + + /* search after buffer */ + for (ptr_buffer = last_gui_buffer; ptr_buffer; + ptr_buffer = ptr_buffer->prev_buffer) + { + if (ptr_buffer == buffer) + break; + if ((ptr_buffer->number == buffer->number) + && (allow_hidden_buffer || !ptr_buffer->hidden)) + { + return ptr_buffer; + } + } + + return NULL; +} + +/* + * Gets index for previously visited buffer. + * + * Returns -1 if there's no previously buffer in history, starting from current + * index. + */ + +int +gui_buffer_visited_get_index_previous () +{ + if ((gui_buffers_visited_count < 2) || (gui_buffers_visited_index == 0)) + return -1; + + if (gui_buffers_visited_index < 0) + return gui_buffers_visited_count - 2; + else + return gui_buffers_visited_index - 1; +} + +/* + * Gets index for next visited buffer. + * + * Returns -1 if there's no next buffer in history, starting from current index. + */ + +int +gui_buffer_visited_get_index_next () +{ + if ((gui_buffers_visited_count < 2) + || (gui_buffers_visited_index < 0) + || (gui_buffers_visited_index >= gui_buffers_visited_count - 1)) + return -1; + + return gui_buffers_visited_index + 1; +} + +/* + * Searches for a visited buffer in list of visited buffers. + */ + +struct t_gui_buffer_visited * +gui_buffer_visited_search (struct t_gui_buffer *buffer) +{ + struct t_gui_buffer_visited *ptr_buffer_visited; + + if (!buffer) + return NULL; + + for (ptr_buffer_visited = gui_buffers_visited; ptr_buffer_visited; + ptr_buffer_visited = ptr_buffer_visited->next_buffer) + { + if (ptr_buffer_visited->buffer == buffer) + return ptr_buffer_visited; + } + + /* visited buffer not found */ + return NULL; +} + +/* + * Searches for a visited buffer in list of visited buffers (by number). + */ + +struct t_gui_buffer_visited * +gui_buffer_visited_search_by_number (int number) +{ + struct t_gui_buffer_visited *ptr_buffer_visited; + int i; + + if ((number < 0) || (number >= gui_buffers_visited_count)) + return NULL; + + i = 0; + for (ptr_buffer_visited = gui_buffers_visited; ptr_buffer_visited; + ptr_buffer_visited = ptr_buffer_visited->next_buffer) + { + if (i == number) + return ptr_buffer_visited; + i++; + } + + /* visited buffer not found (should never be reached) */ + return NULL; +} + +/* + * Removes a visited buffer from list of visited buffers. + */ + +void +gui_buffer_visited_remove (struct t_gui_buffer_visited *buffer_visited) +{ + if (!buffer_visited) + return; + + /* remove visited buffer from list */ + if (buffer_visited->prev_buffer) + (buffer_visited->prev_buffer)->next_buffer = buffer_visited->next_buffer; + if (buffer_visited->next_buffer) + (buffer_visited->next_buffer)->prev_buffer = buffer_visited->prev_buffer; + if (gui_buffers_visited == buffer_visited) + gui_buffers_visited = buffer_visited->next_buffer; + if (last_gui_buffer_visited == buffer_visited) + last_gui_buffer_visited = buffer_visited->prev_buffer; + + free (buffer_visited); + + if (gui_buffers_visited_count > 0) + gui_buffers_visited_count--; + + if (gui_buffers_visited_index >= gui_buffers_visited_count) + gui_buffers_visited_index = -1; +} + +/* + * Removes a visited buffer from list of visited buffers. + */ + +void +gui_buffer_visited_remove_by_buffer (struct t_gui_buffer *buffer) +{ + struct t_gui_buffer_visited *buffer_visited; + + if (!buffer) + return; + + buffer_visited = gui_buffer_visited_search (buffer); + if (buffer_visited) + gui_buffer_visited_remove (buffer_visited); +} + +/* + * Removes all visited buffers from list. + */ + +void +gui_buffer_visited_remove_all () +{ + while (gui_buffers_visited) + { + gui_buffer_visited_remove (gui_buffers_visited); + } +} + +/* + * Adds a visited buffer to list of visited buffers. + */ + +struct t_gui_buffer_visited * +gui_buffer_visited_add (struct t_gui_buffer *buffer) +{ + struct t_gui_buffer_visited *new_buffer_visited; + + if (!buffer) + return NULL; + + new_buffer_visited = gui_buffer_visited_search (buffer); + if (new_buffer_visited) + gui_buffer_visited_remove (new_buffer_visited); + + /* remove old buffer(s) visited if list is too long */ + while (gui_buffers_visited_count > CONFIG_INTEGER(config_history_max_visited_buffers)) + { + gui_buffer_visited_remove (gui_buffers_visited); + } + + new_buffer_visited = malloc (sizeof (*new_buffer_visited)); + if (new_buffer_visited) + { + new_buffer_visited->buffer = buffer; + + new_buffer_visited->prev_buffer = last_gui_buffer_visited; + new_buffer_visited->next_buffer = NULL; + if (last_gui_buffer_visited) + last_gui_buffer_visited->next_buffer = new_buffer_visited; + else + gui_buffers_visited = new_buffer_visited; + last_gui_buffer_visited = new_buffer_visited; + + gui_buffers_visited_count++; + gui_buffers_visited_index = -1; + } + + return new_buffer_visited; +} + /* * Closes a buffer. */ @@ -3311,92 +3583,6 @@ gui_buffer_set_active_buffer (struct t_gui_buffer *buffer) } } -/* - * Gets next active buffer (when many buffers are merged). - * - * If "allow_hidden_buffer" == 1, an hidden buffer can be returned. - * Otherwise an hidden buffer is never returned (if all other merged buffers are - * hidden, then NULL is returned). - */ - -struct t_gui_buffer * -gui_buffer_get_next_active_buffer (struct t_gui_buffer *buffer, - int allow_hidden_buffer) -{ - struct t_gui_buffer *ptr_buffer; - - if (!buffer) - return NULL; - - /* search after buffer */ - for (ptr_buffer = buffer->next_buffer; ptr_buffer; - ptr_buffer = ptr_buffer->next_buffer) - { - if (ptr_buffer->number != buffer->number) - break; - if (allow_hidden_buffer || !ptr_buffer->hidden) - return ptr_buffer; - } - - /* search before buffer */ - for (ptr_buffer = gui_buffers; ptr_buffer; - ptr_buffer = ptr_buffer->next_buffer) - { - if (ptr_buffer == buffer) - break; - if ((ptr_buffer->number == buffer->number) - && (allow_hidden_buffer || !ptr_buffer->hidden)) - { - return ptr_buffer; - } - } - - return NULL; -} - -/* - * Gets previous active buffer (when many buffers are merged). - * - * If "allow_hidden_buffer" == 1, an hidden buffer can be returned. - * Otherwise an hidden buffer is never returned (if all other merged buffers are - * hidden, then NULL is returned). - */ - -struct t_gui_buffer * -gui_buffer_get_previous_active_buffer (struct t_gui_buffer *buffer, - int allow_hidden_buffer) -{ - struct t_gui_buffer *ptr_buffer; - - if (!buffer) - return NULL; - - /* search before buffer */ - for (ptr_buffer = buffer->prev_buffer; ptr_buffer; - ptr_buffer = ptr_buffer->prev_buffer) - { - if (ptr_buffer->number != buffer->number) - break; - if (allow_hidden_buffer || !ptr_buffer->hidden) - return ptr_buffer; - } - - /* search after buffer */ - for (ptr_buffer = last_gui_buffer; ptr_buffer; - ptr_buffer = ptr_buffer->prev_buffer) - { - if (ptr_buffer == buffer) - break; - if ((ptr_buffer->number == buffer->number) - && (allow_hidden_buffer || !ptr_buffer->hidden)) - { - return ptr_buffer; - } - } - - return NULL; -} - /* * Switches active buffer to next buffer (when many buffers are merged). */ @@ -4487,192 +4673,6 @@ gui_buffer_input_move_to_buffer (struct t_gui_buffer *from_buffer, gui_completion_stop (from_buffer->completion); } -/* - * Searches for a visited buffer in list of visited buffers. - */ - -struct t_gui_buffer_visited * -gui_buffer_visited_search (struct t_gui_buffer *buffer) -{ - struct t_gui_buffer_visited *ptr_buffer_visited; - - if (!buffer) - return NULL; - - for (ptr_buffer_visited = gui_buffers_visited; ptr_buffer_visited; - ptr_buffer_visited = ptr_buffer_visited->next_buffer) - { - if (ptr_buffer_visited->buffer == buffer) - return ptr_buffer_visited; - } - - /* visited buffer not found */ - return NULL; -} - -/* - * Searches for a visited buffer in list of visited buffers (by number). - */ - -struct t_gui_buffer_visited * -gui_buffer_visited_search_by_number (int number) -{ - struct t_gui_buffer_visited *ptr_buffer_visited; - int i; - - if ((number < 0) || (number >= gui_buffers_visited_count)) - return NULL; - - i = 0; - for (ptr_buffer_visited = gui_buffers_visited; ptr_buffer_visited; - ptr_buffer_visited = ptr_buffer_visited->next_buffer) - { - if (i == number) - return ptr_buffer_visited; - i++; - } - - /* visited buffer not found (should never be reached) */ - return NULL; -} - -/* - * Removes a visited buffer from list of visited buffers. - */ - -void -gui_buffer_visited_remove (struct t_gui_buffer_visited *buffer_visited) -{ - if (!buffer_visited) - return; - - /* remove visited buffer from list */ - if (buffer_visited->prev_buffer) - (buffer_visited->prev_buffer)->next_buffer = buffer_visited->next_buffer; - if (buffer_visited->next_buffer) - (buffer_visited->next_buffer)->prev_buffer = buffer_visited->prev_buffer; - if (gui_buffers_visited == buffer_visited) - gui_buffers_visited = buffer_visited->next_buffer; - if (last_gui_buffer_visited == buffer_visited) - last_gui_buffer_visited = buffer_visited->prev_buffer; - - free (buffer_visited); - - if (gui_buffers_visited_count > 0) - gui_buffers_visited_count--; - - if (gui_buffers_visited_index >= gui_buffers_visited_count) - gui_buffers_visited_index = -1; -} - -/* - * Removes a visited buffer from list of visited buffers. - */ - -void -gui_buffer_visited_remove_by_buffer (struct t_gui_buffer *buffer) -{ - struct t_gui_buffer_visited *buffer_visited; - - if (!buffer) - return; - - buffer_visited = gui_buffer_visited_search (buffer); - if (buffer_visited) - gui_buffer_visited_remove (buffer_visited); -} - -/* - * Removes all visited buffers from list. - */ - -void -gui_buffer_visited_remove_all () -{ - while (gui_buffers_visited) - { - gui_buffer_visited_remove (gui_buffers_visited); - } -} - -/* - * Adds a visited buffer to list of visited buffers. - */ - -struct t_gui_buffer_visited * -gui_buffer_visited_add (struct t_gui_buffer *buffer) -{ - struct t_gui_buffer_visited *new_buffer_visited; - - if (!buffer) - return NULL; - - new_buffer_visited = gui_buffer_visited_search (buffer); - if (new_buffer_visited) - gui_buffer_visited_remove (new_buffer_visited); - - /* remove old buffer(s) visited if list is too long */ - while (gui_buffers_visited_count > CONFIG_INTEGER(config_history_max_visited_buffers)) - { - gui_buffer_visited_remove (gui_buffers_visited); - } - - new_buffer_visited = malloc (sizeof (*new_buffer_visited)); - if (new_buffer_visited) - { - new_buffer_visited->buffer = buffer; - - new_buffer_visited->prev_buffer = last_gui_buffer_visited; - new_buffer_visited->next_buffer = NULL; - if (last_gui_buffer_visited) - last_gui_buffer_visited->next_buffer = new_buffer_visited; - else - gui_buffers_visited = new_buffer_visited; - last_gui_buffer_visited = new_buffer_visited; - - gui_buffers_visited_count++; - gui_buffers_visited_index = -1; - } - - return new_buffer_visited; -} - -/* - * Gets index for previously visited buffer. - * - * Returns -1 if there's no previously buffer in history, starting from current - * index. - */ - -int -gui_buffer_visited_get_index_previous () -{ - if ((gui_buffers_visited_count < 2) || (gui_buffers_visited_index == 0)) - return -1; - - if (gui_buffers_visited_index < 0) - return gui_buffers_visited_count - 2; - else - return gui_buffers_visited_index - 1; -} - -/* - * Gets index for next visited buffer. - * - * Returns -1 if there's no next buffer in history, starting from current index. - */ - -int -gui_buffer_visited_get_index_next () -{ - if ((gui_buffers_visited_count < 2) - || (gui_buffers_visited_index < 0) - || (gui_buffers_visited_index >= gui_buffers_visited_count - 1)) - return -1; - - return gui_buffers_visited_index + 1; -} - /* * Jumps to buffer with activity. */ diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h index 9f3c13b33..47a0b355d 100644 --- a/src/gui/gui-buffer.h +++ b/src/gui/gui-buffer.h @@ -268,7 +268,6 @@ extern void gui_buffer_local_var_add (struct t_gui_buffer *buffer, extern void gui_buffer_local_var_remove (struct t_gui_buffer *buffer, const char *name); 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_props (struct t_weechat_plugin *plugin, const char *name, @@ -353,10 +352,6 @@ extern void gui_buffer_close (struct t_gui_buffer *buffer); extern void gui_buffer_switch_by_number (struct t_gui_window *window, int number); extern void gui_buffer_set_active_buffer (struct t_gui_buffer *buffer); -extern struct t_gui_buffer *gui_buffer_get_next_active_buffer (struct t_gui_buffer *buffer, - int allow_hidden_buffer); -extern struct t_gui_buffer *gui_buffer_get_previous_active_buffer (struct t_gui_buffer *buffer, - int allow_hidden_buffer); extern void gui_buffer_switch_active_buffer (struct t_gui_buffer *buffer); extern void gui_buffer_switch_active_buffer_previous (struct t_gui_buffer *buffer); extern void gui_buffer_zoom (struct t_gui_buffer *buffer); @@ -380,12 +375,7 @@ extern void gui_buffer_undo_free (struct t_gui_buffer *buffer, extern void gui_buffer_undo_free_all (struct t_gui_buffer *buffer); extern void gui_buffer_input_move_to_buffer (struct t_gui_buffer *from_buffer, struct t_gui_buffer *to_buffer); -extern struct t_gui_buffer_visited *gui_buffer_visited_search_by_number (int number); -extern void gui_buffer_visited_remove (struct t_gui_buffer_visited *buffer_visited); -extern void gui_buffer_visited_remove_by_buffer (struct t_gui_buffer *buffer); extern struct t_gui_buffer_visited *gui_buffer_visited_add (struct t_gui_buffer *buffer); -extern int gui_buffer_visited_get_index_previous (); -extern int gui_buffer_visited_get_index_next (); extern void gui_buffer_jump_smart (struct t_gui_window *window); extern void gui_buffer_jump_last_visible_number (struct t_gui_window *window); extern void gui_buffer_jump_last_buffer_displayed (struct t_gui_window *window); diff --git a/tests/unit/gui/test-gui-buffer.cpp b/tests/unit/gui/test-gui-buffer.cpp index b6954d01d..847452860 100644 --- a/tests/unit/gui/test-gui-buffer.cpp +++ b/tests/unit/gui/test-gui-buffer.cpp @@ -1077,6 +1077,106 @@ TEST(GuiBuffer, ClearAll) /* TODO: write tests */ } +/* + * Tests functions: + * gui_buffer_get_next_active_buffer + */ + +TEST(GuiBuffer, GetNextActiveBuffer) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * gui_buffer_get_previous_active_buffer + */ + +TEST(GuiBuffer, GetPreviousActiveBuffer) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * gui_buffer_visited_get_index_previous + */ + +TEST(GuiBuffer, VisitedGetIndexPrevious) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * gui_buffer_visited_get_index_next + */ + +TEST(GuiBuffer, VisitedGetIndexNext) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * gui_buffer_visited_search + */ + +TEST(GuiBuffer, VisitedSearch) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * gui_buffer_visited_search_by_number + */ + +TEST(GuiBuffer, VisitedSearchByNumber) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * gui_buffer_visited_remove + */ + +TEST(GuiBuffer, VisitedRemove) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * gui_buffer_visited_remove_by_buffer + */ + +TEST(GuiBuffer, VisitedRemoveByBuffer) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * gui_buffer_visited_remove_all + */ + +TEST(GuiBuffer, VisitedRemoveAll) +{ + /* TODO: write tests */ +} + +/* + * Tests functions: + * gui_buffer_visited_add + */ + +TEST(GuiBuffer, VisitedAdd) +{ + /* TODO: write tests */ +} + /* * Tests functions: * gui_buffer_close @@ -1107,26 +1207,6 @@ TEST(GuiBuffer, SetActiveBuffer) /* TODO: write tests */ } -/* - * Tests functions: - * gui_buffer_get_next_active_buffer - */ - -TEST(GuiBuffer, GetNextActiveBuffer) -{ - /* TODO: write tests */ -} - -/* - * Tests functions: - * gui_buffer_get_previous_active_buffer - */ - -TEST(GuiBuffer, GetPreviousActiveBuffer) -{ - /* TODO: write tests */ -} - /* * Tests functions: * gui_buffer_switch_active_buffer @@ -1327,86 +1407,6 @@ TEST(GuiBuffer, InputMoveToBuffer) /* TODO: write tests */ } -/* - * Tests functions: - * gui_buffer_visited_search - */ - -TEST(GuiBuffer, VisitedSearch) -{ - /* TODO: write tests */ -} - -/* - * Tests functions: - * gui_buffer_visited_search_by_number - */ - -TEST(GuiBuffer, VisitedSearchByNumber) -{ - /* TODO: write tests */ -} - -/* - * Tests functions: - * gui_buffer_visited_remove - */ - -TEST(GuiBuffer, VisitedRemove) -{ - /* TODO: write tests */ -} - -/* - * Tests functions: - * gui_buffer_visited_remove_by_buffer - */ - -TEST(GuiBuffer, VisitedRemoveByBuffer) -{ - /* TODO: write tests */ -} - -/* - * Tests functions: - * gui_buffer_visited_remove_all - */ - -TEST(GuiBuffer, VisitedRemoveAll) -{ - /* TODO: write tests */ -} - -/* - * Tests functions: - * gui_buffer_visited_add - */ - -TEST(GuiBuffer, VisitedAdd) -{ - /* TODO: write tests */ -} - -/* - * Tests functions: - * gui_buffer_visited_get_index_previous - */ - -TEST(GuiBuffer, VisitedGetIndexPrevious) -{ - /* TODO: write tests */ -} - -/* - * Tests functions: - * gui_buffer_visited_get_index_next - */ - -TEST(GuiBuffer, VisitedGetIndexNext) -{ - /* TODO: write tests */ -} - /* * Tests functions: * gui_buffer_jump_smart