1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-27 13:26:38 +02:00

core: fix order of filters after renaming a filter (issue #1695)

This commit is contained in:
Sébastien Helleu
2022-09-17 16:01:02 +02:00
parent 5284921701
commit be7380f9b3
+58 -34
View File
@@ -297,6 +297,57 @@ gui_filter_find_pos (struct t_gui_filter *filter)
return NULL;
}
/*
* Adds a filter to the list of filters (sorted by name).
*/
void
gui_filter_add_to_list (struct t_gui_filter *filter)
{
struct t_gui_filter *pos_filter;
pos_filter = gui_filter_find_pos (filter);
if (pos_filter)
{
/* add filter before "pos_filter" */
filter->prev_filter = pos_filter->prev_filter;
filter->next_filter = pos_filter;
if (pos_filter->prev_filter)
(pos_filter->prev_filter)->next_filter = filter;
else
gui_filters = filter;
pos_filter->prev_filter = filter;
}
else
{
/* add filter to end of list */
filter->prev_filter = last_gui_filter;
filter->next_filter = NULL;
if (last_gui_filter)
last_gui_filter->next_filter = filter;
else
gui_filters = filter;
last_gui_filter = filter;
}
}
/*
* Removes a filter from list of filters.
*/
void
gui_filter_remove_from_list (struct t_gui_filter *filter)
{
if (filter->prev_filter)
(filter->prev_filter)->next_filter = filter->next_filter;
if (filter->next_filter)
(filter->next_filter)->prev_filter = filter->prev_filter;
if (gui_filters == filter)
gui_filters = filter->next_filter;
if (last_gui_filter == filter)
last_gui_filter = filter->prev_filter;
}
/*
* Creates a new filter.
*
@@ -307,7 +358,7 @@ struct t_gui_filter *
gui_filter_new (int enabled, const char *name, const char *buffer_name,
const char *tags, const char *regex)
{
struct t_gui_filter *new_filter, *pos_filter;
struct t_gui_filter *new_filter;
regex_t *regex1, *regex2;
char *pos_tab, *regex_prefix, buf[512], str_error[512];
const char *ptr_start_regex, *pos_regex_message;
@@ -431,30 +482,7 @@ gui_filter_new (int enabled, const char *name, const char *buffer_name,
new_filter->regex_prefix = regex1;
new_filter->regex_message = regex2;
/* add filter to filters list */
pos_filter = gui_filter_find_pos (new_filter);
if (pos_filter)
{
/* add filter before "pos_filter" */
new_filter->prev_filter = pos_filter->prev_filter;
new_filter->next_filter = pos_filter;
if (pos_filter->prev_filter)
(pos_filter->prev_filter)->next_filter = new_filter;
else
gui_filters = new_filter;
pos_filter->prev_filter = new_filter;
}
else
{
/* add filter to end of list */
new_filter->prev_filter = last_gui_filter;
new_filter->next_filter = NULL;
if (last_gui_filter)
last_gui_filter->next_filter = new_filter;
else
gui_filters = new_filter;
last_gui_filter = new_filter;
}
gui_filter_add_to_list (new_filter);
(void) hook_signal_send ("filter_added",
WEECHAT_HOOK_SIGNAL_POINTER, new_filter);
@@ -487,6 +515,10 @@ gui_filter_rename (struct t_gui_filter *filter, const char *new_name)
free (filter->name);
filter->name = strdup (new_name);
/* resort list of filters */
gui_filter_remove_from_list (filter);
gui_filter_add_to_list (filter);
return 1;
}
@@ -527,15 +559,7 @@ gui_filter_free (struct t_gui_filter *filter)
free (filter->regex_message);
}
/* remove filter from filters list */
if (filter->prev_filter)
(filter->prev_filter)->next_filter = filter->next_filter;
if (filter->next_filter)
(filter->next_filter)->prev_filter = filter->prev_filter;
if (gui_filters == filter)
gui_filters = filter->next_filter;
if (last_gui_filter == filter)
last_gui_filter = filter->prev_filter;
gui_filter_remove_from_list (filter);
free (filter);