void gui_layout_buffer_get_number_all (struct t_gui_layout *layout) { struct t_gui_buffer *ptr_buffer; for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) { gui_layout_buffer_get_number (layout, gui_buffer_get_plugin_name (ptr_buffer), ptr_buffer->name, &(ptr_buffer->layout_number), &(ptr_buffer->layout_number_merge_order)); } }
void gui_layout_window_store_tree (struct t_gui_layout *layout, struct t_gui_layout_window **layout_windows, struct t_gui_layout_window *parent_layout, struct t_gui_window_tree *tree) { struct t_gui_layout_window *layout_window; if (tree->window) { if (tree->window == gui_current_window) layout->internal_id_current_window = layout->internal_id; layout_window = gui_layout_window_add (layout_windows, layout->internal_id, parent_layout, 0, 0, gui_buffer_get_plugin_name (tree->window->buffer), tree->window->buffer->name); } else { layout_window = gui_layout_window_add (layout_windows, layout->internal_id, parent_layout, tree->split_pct, tree->split_horizontal, NULL, NULL); } layout->internal_id++; if (tree->child1) { gui_layout_window_store_tree (layout, layout_windows, layout_window, tree->child1); } if (tree->child2) { gui_layout_window_store_tree (layout, layout_windows, layout_window, tree->child2); } }
int gui_layout_window_check_buffer (struct t_gui_window *window) { /* no layout? return -1 */ if (!window->layout_plugin_name || !window->layout_buffer_name) return -1; /* layout and buffer displayed matches? return 1 */ if ((strcmp (window->layout_plugin_name, gui_buffer_get_plugin_name (window->buffer)) == 0) && (strcmp (window->layout_buffer_name, (window->buffer)->name) == 0)) { return 1; } /* buffer displayed does not match the layout, return 0 */ return 0; }
void gui_layout_window_assign_buffer (struct t_gui_buffer *buffer) { struct t_gui_window *ptr_win; const char *plugin_name; plugin_name = gui_buffer_get_plugin_name (buffer); for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) { if (ptr_win->layout_plugin_name && ptr_win->layout_buffer_name) { if ((strcmp (ptr_win->layout_plugin_name, plugin_name) == 0) && (strcmp (ptr_win->layout_buffer_name, buffer->name) == 0)) { gui_window_switch_to_buffer (ptr_win, buffer, 0); } } } }
void gui_layout_buffer_store (struct t_gui_layout *layout) { struct t_gui_buffer *ptr_buffer; if (!layout) return; gui_layout_buffer_remove_all (layout); for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) { gui_layout_buffer_add (layout, gui_buffer_get_plugin_name (ptr_buffer), ptr_buffer->name, ptr_buffer->number); } /* get layout number for all buffers */ gui_layout_buffer_get_number_all (layout); }
void gui_layout_window_assign_all_buffers () { struct t_gui_window *ptr_win; struct t_gui_buffer *ptr_buffer; for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) { if (ptr_win->layout_plugin_name && ptr_win->layout_buffer_name) { for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) { if ((strcmp (ptr_win->layout_plugin_name, gui_buffer_get_plugin_name (ptr_buffer)) == 0) && (strcmp (ptr_win->layout_buffer_name, ptr_buffer->name) == 0)) { gui_window_switch_to_buffer (ptr_win, ptr_buffer, 0); break; } } } } }
void gui_layout_buffer_save (struct t_gui_layout_buffer **layout_buffers, struct t_gui_layout_buffer **last_layout_buffer) { struct t_gui_buffer *ptr_buffer; if (!layout_buffers || !last_layout_buffer) return; gui_layout_buffer_remove_all (layout_buffers, last_layout_buffer); for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) { gui_layout_buffer_add (layout_buffers, last_layout_buffer, gui_buffer_get_plugin_name (ptr_buffer), ptr_buffer->name, ptr_buffer->number); } /* get layout number for all buffers */ gui_layout_buffer_get_number_all (*layout_buffers); }
void gui_chat_printf_date_tags (struct t_gui_buffer *buffer, time_t date, const char *tags, const char *message, ...) { time_t date_printed; int display_time, length, at_least_one_message_printed, msg_discarded; char *pos, *pos_prefix, *pos_tab, *pos_end, *pos_lines; char *modifier_data, *new_msg, *ptr_msg, *lines_waiting; struct t_gui_line *ptr_line; if (!message) return; if (!gui_buffer_valid (buffer)) return; if (gui_init_ok) { if (!buffer) buffer = gui_buffer_search_main (); if (!buffer || buffer->closing) return; if (buffer->type != GUI_BUFFER_TYPE_FORMATTED) buffer = gui_buffers; if (buffer->type != GUI_BUFFER_TYPE_FORMATTED) return; } /* if mute is enabled for buffer (or all buffers), then just return */ if ((gui_chat_mute == GUI_CHAT_MUTE_ALL_BUFFERS) || ((gui_chat_mute == GUI_CHAT_MUTE_BUFFER) && (gui_chat_mute_buffer == buffer))) return; weechat_va_format (message); if (!vbuffer) return; utf8_normalize (vbuffer, '?'); date_printed = time (NULL); if (date <= 0) date = date_printed; at_least_one_message_printed = 0; pos = vbuffer; while (pos) { /* display until next end of line */ pos_end = strchr (pos, '\n'); if (pos_end) pos_end[0] = '\0'; /* call modifier for message printed ("weechat_print") */ new_msg = NULL; msg_discarded = 0; if (buffer) { length = strlen (gui_buffer_get_plugin_name (buffer)) + 1 + strlen (buffer->name) + 1 + ((tags) ? strlen (tags) : 0) + 1; modifier_data = malloc (length); if (modifier_data) { snprintf (modifier_data, length, "%s;%s;%s", gui_buffer_get_plugin_name (buffer), buffer->name, (tags) ? tags : ""); new_msg = hook_modifier_exec (NULL, "weechat_print", modifier_data, pos); free (modifier_data); if (new_msg) { if (!new_msg[0] && pos[0]) { /* * modifier returned empty message, then we'll not * print anything */ free (new_msg); new_msg = NULL; msg_discarded = 1; } else if (strcmp (message, new_msg) == 0) { /* no changes in new message */ free (new_msg); new_msg = NULL; } } } } if (!msg_discarded) { pos_prefix = NULL; display_time = 1; ptr_msg = (new_msg) ? new_msg : pos; /* space followed by tab => prefix ignored */ if ((ptr_msg[0] == ' ') && (ptr_msg[1] == '\t')) { ptr_msg += 2; } else { /* if two first chars are tab, then do not display time */ if ((ptr_msg[0] == '\t') && (ptr_msg[1] == '\t')) { display_time = 0; ptr_msg += 2; } else { /* if tab found, use prefix (before tab) */ pos_tab = strchr (ptr_msg, '\t'); if (pos_tab) { pos_tab[0] = '\0'; pos_prefix = ptr_msg; ptr_msg = pos_tab + 1; } } } if (gui_init_ok) { ptr_line = gui_line_add (buffer, (display_time) ? date : 0, date_printed, tags, pos_prefix, ptr_msg); if (ptr_line) { if (buffer && buffer->print_hooks_enabled) hook_print_exec (buffer, ptr_line); if (ptr_line->data->displayed) at_least_one_message_printed = 1; } } else { length = ((pos_prefix) ? strlen (pos_prefix) + 1 : 0) + strlen (ptr_msg) + 1; if (gui_chat_lines_waiting_buffer) { length += strlen (gui_chat_lines_waiting_buffer) + 1; lines_waiting = realloc (gui_chat_lines_waiting_buffer, length); if (lines_waiting) { gui_chat_lines_waiting_buffer = lines_waiting; } else { free (gui_chat_lines_waiting_buffer); gui_chat_lines_waiting_buffer = NULL; } } else { gui_chat_lines_waiting_buffer = malloc (length); if (gui_chat_lines_waiting_buffer) gui_chat_lines_waiting_buffer[0] = '\0'; } if (gui_chat_lines_waiting_buffer) { pos_lines = gui_chat_lines_waiting_buffer + strlen (gui_chat_lines_waiting_buffer); if (pos_lines > gui_chat_lines_waiting_buffer) { pos_lines[0] = '\n'; pos_lines++; } if (pos_prefix) { memcpy (pos_lines, pos_prefix, strlen (pos_prefix)); pos_lines += strlen (pos_prefix); pos_lines[0] = '\t'; pos_lines++; } memcpy (pos_lines, ptr_msg, strlen (ptr_msg) + 1); } } } if (new_msg) free (new_msg); pos = (pos_end && pos_end[1]) ? pos_end + 1 : NULL; } if (gui_init_ok && at_least_one_message_printed) gui_buffer_ask_chat_refresh (buffer, 1); free (vbuffer); }
int gui_hotlist_add_to_infolist (struct t_infolist *infolist, struct t_gui_hotlist *hotlist) { struct t_infolist_item *ptr_item; int i; char option_name[64]; if (!infolist || !hotlist) return 0; ptr_item = infolist_new_item (infolist); if (!ptr_item) return 0; if (!infolist_new_var_integer (ptr_item, "priority", hotlist->priority)) return 0; switch (hotlist->priority) { case GUI_HOTLIST_LOW: if (!infolist_new_var_string (ptr_item, "color", gui_color_get_name (CONFIG_COLOR(config_color_status_data_other)))) return 0; break; case GUI_HOTLIST_MESSAGE: if (!infolist_new_var_string (ptr_item, "color", gui_color_get_name (CONFIG_COLOR(config_color_status_data_msg)))) return 0; break; case GUI_HOTLIST_PRIVATE: if (!infolist_new_var_string (ptr_item, "color", gui_color_get_name (CONFIG_COLOR(config_color_status_data_private)))) return 0; break; case GUI_HOTLIST_HIGHLIGHT: if (!infolist_new_var_string (ptr_item, "color", gui_color_get_name (CONFIG_COLOR(config_color_status_data_highlight)))) return 0; break; case GUI_HOTLIST_NUM_PRIORITIES: /* * this constant is used to count hotlist priorities only, * it is never used as priority */ break; } if (!infolist_new_var_buffer (ptr_item, "creation_time", &(hotlist->creation_time), sizeof (struct timeval))) return 0; if (!infolist_new_var_pointer (ptr_item, "buffer_pointer", hotlist->buffer)) return 0; if (!infolist_new_var_integer (ptr_item, "buffer_number", hotlist->buffer->number)) return 0; if (!infolist_new_var_string (ptr_item, "plugin_name", gui_buffer_get_plugin_name (hotlist->buffer))) return 0; if (!infolist_new_var_string (ptr_item, "buffer_name", hotlist->buffer->name)) return 0; for (i = 0; i < GUI_HOTLIST_NUM_PRIORITIES; i++) { snprintf (option_name, sizeof (option_name), "count_%02d", i); if (!infolist_new_var_integer (ptr_item, option_name, hotlist->count[i])) return 0; } return 1; }