diff options
author | Simmo Saan <simmo.saan@gmail.com> | 2019-02-21 14:10:09 +0200 |
---|---|---|
committer | Simmo Saan <simmo.saan@gmail.com> | 2019-02-21 16:03:15 +0200 |
commit | 91936ff5831e05d316f8abb5dcb5cd830c46addb (patch) | |
tree | 65f3638e123163c971b2ab24e394981fc3a36930 /src/gui | |
parent | 0a6172c12875545295f992cf70e2e80e32af1e3f (diff) | |
download | weechat-91936ff5831e05d316f8abb5dcb5cd830c46addb.zip |
gui: only refilter affected buffers on filter change (closes #1309)
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/gui-filter.c | 17 | ||||
-rw-r--r-- | src/gui/gui-filter.h | 2 |
2 files changed, 14 insertions, 5 deletions
diff --git a/src/gui/gui-filter.c b/src/gui/gui-filter.c index b839744a6..325c851ff 100644 --- a/src/gui/gui-filter.c +++ b/src/gui/gui-filter.c @@ -186,17 +186,26 @@ gui_filter_buffer (struct t_gui_buffer *buffer, /* * Filters all buffers, using message filters. + * + * If filter is NULL, filters all buffers. + * If filter is not NULL, filters only buffers matched by this filter. */ void -gui_filter_all_buffers () +gui_filter_all_buffers (struct t_gui_filter *filter) { struct t_gui_buffer *ptr_buffer; for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) { - gui_filter_buffer (ptr_buffer, NULL); + if (!filter + || gui_buffer_match_list_split (ptr_buffer, + filter->num_buffers, + filter->buffers)) + { + gui_filter_buffer (ptr_buffer, NULL); + } } } @@ -210,7 +219,7 @@ gui_filter_global_enable () if (!gui_filters_enabled) { gui_filters_enabled = 1; - gui_filter_all_buffers (); + gui_filter_all_buffers (NULL); (void) hook_signal_send ("filters_enabled", WEECHAT_HOOK_SIGNAL_STRING, NULL); } @@ -226,7 +235,7 @@ gui_filter_global_disable () if (gui_filters_enabled) { gui_filters_enabled = 0; - gui_filter_all_buffers (); + gui_filter_all_buffers (NULL); (void) hook_signal_send ("filters_disabled", WEECHAT_HOOK_SIGNAL_STRING, NULL); } diff --git a/src/gui/gui-filter.h b/src/gui/gui-filter.h index ee2888211..e426262f5 100644 --- a/src/gui/gui-filter.h +++ b/src/gui/gui-filter.h @@ -56,7 +56,7 @@ extern int gui_filters_enabled; extern int gui_filter_check_line (struct t_gui_line_data *line_data); extern void gui_filter_buffer (struct t_gui_buffer *buffer, struct t_gui_line_data *line_data); -extern void gui_filter_all_buffers (); +extern void gui_filter_all_buffers (struct t_gui_filter *filter); extern void gui_filter_global_enable (); extern void gui_filter_global_disable (); extern struct t_gui_filter *gui_filter_search_by_name (const char *name); |