diff options
author | Sébastien Helleu <flashcode@flashtux.org> | 2024-01-06 19:14:45 +0100 |
---|---|---|
committer | Sébastien Helleu <flashcode@flashtux.org> | 2024-01-06 19:26:39 +0100 |
commit | d8704d5c7405fec7089b391872954b27cdd9094d (patch) | |
tree | d20545fe892d564dc7537a8bb0ac3393871c9a10 /src/gui/gui-buffer.c | |
parent | 6efa574483b0498cfb92cddf7365e6207558ed3a (diff) | |
download | weechat-d8704d5c7405fec7089b391872954b27cdd9094d.zip |
core: add variable "opening" in buffer, do not send buffer signals when the buffer is opening
Diffstat (limited to 'src/gui/gui-buffer.c')
-rw-r--r-- | src/gui/gui-buffer.c | 135 |
1 files changed, 89 insertions, 46 deletions
diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index 1c4f00aa3..ae17e4fdc 100644 --- a/src/gui/gui-buffer.c +++ b/src/gui/gui-buffer.c @@ -90,12 +90,12 @@ char *gui_buffer_notify_string[GUI_BUFFER_NUM_NOTIFY] = { "none", "highlight", "message", "all" }; char *gui_buffer_properties_get_integer[] = -{ "number", "layout_number", "layout_number_merge_order", "type", "notify", - "num_displayed", "active", "hidden", "zoomed", "print_hooks_enabled", - "day_change", "clear", "filter", "closing", "lines_hidden", - "prefix_max_length", "next_line_id", "time_for_each_line", "nicklist", - "nicklist_case_sensitive", "nicklist_max_length", "nicklist_display_groups", - "nicklist_count", "nicklist_visible_count", +{ "opening", "number", "layout_number", "layout_number_merge_order", "type", + "notify", "num_displayed", "active", "hidden", "zoomed", + "print_hooks_enabled", "day_change", "clear", "filter", "closing", + "lines_hidden", "prefix_max_length", "next_line_id", "time_for_each_line", + "nicklist", "nicklist_case_sensitive", "nicklist_max_length", + "nicklist_display_groups", "nicklist_count", "nicklist_visible_count", "nicklist_groups_count", "nicklist_groups_visible_count", "nicklist_nicks_count", "nicklist_nicks_visible_count", "input", "input_get_unknown_commands", @@ -178,6 +178,19 @@ gui_buffer_search_notify (const char *notify) } /* + * Sends a buffer signal (only if the buffer is completely opened. + */ + +int +gui_buffer_send_signal (struct t_gui_buffer *buffer, + const char *signal, + const char *type_data, void *signal_data) +{ + return (buffer->opening) ? + WEECHAT_RC_OK : hook_signal_send (signal, type_data, signal_data); +} + +/* * Gets plugin name of buffer. * * Note: during upgrade process (at startup after /upgrade), the name of plugin @@ -251,9 +264,10 @@ gui_buffer_local_var_add (struct t_gui_buffer *buffer, const char *name, ptr_value = hashtable_get (buffer->local_variables, name); hashtable_set (buffer->local_variables, name, value); - (void) hook_signal_send ((ptr_value) ? - "buffer_localvar_changed" : "buffer_localvar_added", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal ( + buffer, + (ptr_value) ? "buffer_localvar_changed" : "buffer_localvar_added", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -272,8 +286,9 @@ gui_buffer_local_var_remove (struct t_gui_buffer *buffer, const char *name) if (ptr_value) { hashtable_remove (buffer->local_variables, name); - (void) hook_signal_send ("buffer_localvar_removed", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_localvar_removed", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } } @@ -287,8 +302,9 @@ gui_buffer_local_var_remove_all (struct t_gui_buffer *buffer) if (buffer && buffer->local_variables) { hashtable_remove_all (buffer->local_variables); - (void) hook_signal_send ("buffer_localvar_removed", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_localvar_removed", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } } @@ -781,6 +797,7 @@ gui_buffer_new_props (struct t_weechat_plugin *plugin, return NULL; /* init buffer */ + new_buffer->opening = 1; new_buffer->plugin = plugin; new_buffer->plugin_name_for_upgrade = NULL; @@ -937,14 +954,18 @@ gui_buffer_new_props (struct t_weechat_plugin *plugin, /* apply properties (from options weechat.buffer.*) */ gui_buffer_apply_config_properties (new_buffer); + new_buffer->opening = 0; + if (first_buffer_creation) { gui_buffer_visited_add (new_buffer); } else { - (void) hook_signal_send ("buffer_opened", - WEECHAT_HOOK_SIGNAL_POINTER, new_buffer); + (void) gui_buffer_send_signal ( + new_buffer, + "buffer_opened", + WEECHAT_HOOK_SIGNAL_POINTER, new_buffer); } return new_buffer; @@ -1316,7 +1337,9 @@ gui_buffer_get_integer (struct t_gui_buffer *buffer, const char *property) if (!buffer || !property) return 0; - if (strcmp (property, "number") == 0) + if (strcmp (property, "opening") == 0) + return buffer->opening; + else if (strcmp (property, "number") == 0) return buffer->number; else if (strcmp (property, "layout_number") == 0) return buffer->layout_number; @@ -1531,8 +1554,9 @@ gui_buffer_set_name (struct t_gui_buffer *buffer, const char *name) gui_buffer_local_var_add (buffer, "name", name); - (void) hook_signal_send ("buffer_renamed", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_renamed", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); if (buffer->old_full_name) { @@ -1571,8 +1595,9 @@ gui_buffer_set_short_name (struct t_gui_buffer *buffer, const char *short_name) buffer->mixed_lines->buffer_max_length_refresh = 1; gui_buffer_ask_chat_refresh (buffer, 1); - (void) hook_signal_send ("buffer_renamed", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_renamed", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -1608,8 +1633,9 @@ gui_buffer_set_type (struct t_gui_buffer *buffer, enum t_gui_buffer_type type) gui_buffer_ask_chat_refresh (buffer, 2); - (void) hook_signal_send ("buffer_type_changed", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_type_changed", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -1634,8 +1660,9 @@ gui_buffer_set_title (struct t_gui_buffer *buffer, const char *new_title) free (buffer->title); buffer->title = (new_title && new_title[0]) ? strdup (new_title) : NULL; - (void) hook_signal_send ("buffer_title_changed", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_title_changed", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -3078,8 +3105,9 @@ gui_buffer_clear (struct t_gui_buffer *buffer) gui_buffer_ask_chat_refresh (buffer, 2); - (void) hook_signal_send ("buffer_cleared", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_cleared", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -3775,9 +3803,10 @@ gui_buffer_zoom (struct t_gui_buffer *buffer) gui_buffer_ask_chat_refresh (buffer, 2); - (void) hook_signal_send ((buffer_was_zoomed) ? - "buffer_unzoomed" : "buffer_zoomed", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal ( + buffer, + (buffer_was_zoomed) ? "buffer_unzoomed" : "buffer_zoomed", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -3879,9 +3908,10 @@ gui_buffer_renumber (int number1, int number2, int start_number) } if (ptr_buffer_moved) { - (void) hook_signal_send ("buffer_moved", - WEECHAT_HOOK_SIGNAL_POINTER, - ptr_buffer_moved); + (void) gui_buffer_send_signal (ptr_buffer_moved, + "buffer_moved", + WEECHAT_HOOK_SIGNAL_POINTER, + ptr_buffer_moved); } ptr_buffer = ptr_buffer2; if (ptr_buffer == ptr_last_buffer) @@ -4015,8 +4045,9 @@ gui_buffer_move_to_number (struct t_gui_buffer *buffer, int number) last_gui_buffer = ptr_last_buffer; } - (void) hook_signal_send ("buffer_moved", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_moved", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -4107,10 +4138,14 @@ gui_buffer_swap (int number1, int number2) } /* send signals */ - (void) hook_signal_send ("buffer_moved", - WEECHAT_HOOK_SIGNAL_POINTER, ptr_first_buffer[0]); - (void) hook_signal_send ("buffer_moved", - WEECHAT_HOOK_SIGNAL_POINTER, ptr_first_buffer[1]); + (void) gui_buffer_send_signal ( + ptr_first_buffer[0], + "buffer_moved", + WEECHAT_HOOK_SIGNAL_POINTER, ptr_first_buffer[0]); + (void) gui_buffer_send_signal ( + ptr_first_buffer[1], + "buffer_moved", + WEECHAT_HOOK_SIGNAL_POINTER, ptr_first_buffer[1]); } /* @@ -4214,8 +4249,9 @@ gui_buffer_merge (struct t_gui_buffer *buffer, gui_window_ask_refresh (1); - (void) hook_signal_send ("buffer_merged", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_merged", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -4348,8 +4384,9 @@ gui_buffer_unmerge (struct t_gui_buffer *buffer, int number) gui_window_ask_refresh (1); - (void) hook_signal_send ("buffer_unmerged", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_unmerged", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -4392,8 +4429,9 @@ gui_buffer_hide (struct t_gui_buffer *buffer) buffer->hidden = 1; - (void) hook_signal_send ("buffer_hidden", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_hidden", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -4424,8 +4462,9 @@ gui_buffer_unhide (struct t_gui_buffer *buffer) buffer->hidden = 0; - (void) hook_signal_send ("buffer_unhidden", - WEECHAT_HOOK_SIGNAL_POINTER, buffer); + (void) gui_buffer_send_signal (buffer, + "buffer_unhidden", + WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* @@ -4924,6 +4963,7 @@ gui_buffer_hdata_buffer_cb (const void *pointer, void *data, 0, 0, NULL, NULL); if (hdata) { + HDATA_VAR(struct t_gui_buffer, opening, INTEGER, 0, NULL, NULL); HDATA_VAR(struct t_gui_buffer, plugin, POINTER, 0, NULL, "plugin"); HDATA_VAR(struct t_gui_buffer, plugin_name_for_upgrade, STRING, 0, NULL, NULL); HDATA_VAR(struct t_gui_buffer, number, INTEGER, 0, NULL, NULL); @@ -5109,6 +5149,8 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist, if (!infolist_new_var_integer (ptr_item, "current_buffer", (gui_current_window->buffer == buffer) ? 1 : 0)) return 0; + if (!infolist_new_var_integer (ptr_item, "opening", buffer->opening)) + return 0; if (!infolist_new_var_pointer (ptr_item, "plugin", buffer->plugin)) return 0; if (!infolist_new_var_string (ptr_item, "plugin_name", @@ -5366,6 +5408,7 @@ gui_buffer_print_log () { log_printf (""); log_printf ("[buffer (addr:0x%lx)]", ptr_buffer); + log_printf (" opening . . . . . . . . : %d", ptr_buffer->opening); log_printf (" plugin. . . . . . . . . : 0x%lx ('%s')", ptr_buffer->plugin, gui_buffer_get_plugin_name (ptr_buffer)); log_printf (" plugin_name_for_upgrade : '%s'", ptr_buffer->plugin_name_for_upgrade); |