diff --git a/CHANGELOG.md b/CHANGELOG.md index 40478f006..777888d30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ - exec: fix unexpected execution of command with `/exec -o` when the command starts with two command chars ([#2199](https://github.com/weechat/weechat/issues/2199)) - relay/api: fix empty nicklist in remote buffers after connection or reconnection - relay/api: reply HTTP 400 (Bad Request) when the body received is not a dict in websocket data +- core: fix too many sorts of hotlist when buffers are moved ([#2097](https://github.com/weechat/weechat/issues/2097)) - core: always send the signal "buffer_switch", even when the buffer is opening ([#2198](https://github.com/weechat/weechat/issues/2198)) - core: reload all plugins with command `/plugin reload *` - relay, xfer: fix letters with actions displayed on top of buffer diff --git a/src/gui/gui-bar-item.c b/src/gui/gui-bar-item.c index e2d81f14c..2e5220e04 100644 --- a/src/gui/gui-bar-item.c +++ b/src/gui/gui-bar-item.c @@ -71,6 +71,7 @@ char *gui_bar_item_names[GUI_BAR_NUM_ITEMS] = }; struct t_gui_bar_item_hook *gui_bar_item_hooks = NULL; struct t_hook *gui_bar_item_timer = NULL; +struct t_hook *gui_bar_item_timer_hotlist_resort = NULL; /* @@ -2275,6 +2276,25 @@ gui_bar_item_timer_cb (const void *pointer, void *data, int remaining_calls) return WEECHAT_RC_OK; } +/* + * Timer callback for resorting hotlist. + */ + +int +gui_bar_item_timer_hotlist_resort_cb (const void *pointer, void *data, + int remaining_calls) +{ + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) remaining_calls; + + gui_hotlist_resort (); + + gui_bar_item_timer_hotlist_resort = NULL; + + return WEECHAT_RC_OK; +} /* * Callback when a signal is received: rebuilds an item. */ @@ -2298,7 +2318,13 @@ gui_bar_item_signal_cb (const void *pointer, void *data, if ((strcmp (item, "hotlist") == 0) && (strcmp (signal, "hotlist_changed") != 0)) { - gui_hotlist_resort (); + if (!gui_bar_item_timer_hotlist_resort) + { + gui_bar_item_timer_hotlist_resort = hook_timer ( + NULL, + 1, 0, 1, + &gui_bar_item_timer_hotlist_resort_cb, NULL, NULL); + } } gui_bar_item_update (item); }