summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorSimmo Saan <simmo.saan@gmail.com>2019-02-21 14:10:09 +0200
committerSimmo Saan <simmo.saan@gmail.com>2019-02-21 16:03:15 +0200
commit91936ff5831e05d316f8abb5dcb5cd830c46addb (patch)
tree65f3638e123163c971b2ab24e394981fc3a36930 /src/gui
parent0a6172c12875545295f992cf70e2e80e32af1e3f (diff)
downloadweechat-91936ff5831e05d316f8abb5dcb5cd830c46addb.zip
gui: only refilter affected buffers on filter change (closes #1309)
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/gui-filter.c17
-rw-r--r--src/gui/gui-filter.h2
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);