diff --git a/CHANGELOG.md b/CHANGELOG.md index 58f4ab426..d9492b6d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Fixed +- core: fix too many sorts of hotlist when buffers are moved ([#2097](https://github.com/weechat/weechat/issues/2097)) - relay, xfer: fix letters with actions displayed on top of buffer ## Version 4.4.3 (2024-10-30) 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); }