diff --git a/src/core/wee-command.c b/src/core/wee-command.c index 8cdd56928..a90fe99eb 100644 --- a/src/core/wee-command.c +++ b/src/core/wee-command.c @@ -381,7 +381,7 @@ command_buffer (void *data, struct t_gui_buffer *buffer, } gui_buffer_close (buffer, 1); gui_status_refresh_needed = 1; - gui_current_window->buffer->input_refresh_needed = 1; + gui_buffer_ask_input_refresh (gui_current_window->buffer, 1); return WEECHAT_RC_OK; } diff --git a/src/core/wee-config-file.c b/src/core/wee-config-file.c index a774c8c17..34ae60bd0 100644 --- a/src/core/wee-config-file.c +++ b/src/core/wee-config-file.c @@ -843,15 +843,25 @@ config_file_option_set (struct t_config_option *option, char *value, case CONFIG_OPTION_TYPE_BOOLEAN: if (value) { - if (config_file_string_boolean_is_valid (value)) + if (string_strcasecmp (value, "toggle") == 0) { - value_int = config_file_string_to_boolean (value); - if (value_int == *((int *)option->value)) - rc = 1; - else + *((int *)option->value) = + (*((int *)option->value) == CONFIG_BOOLEAN_TRUE) ? + CONFIG_BOOLEAN_FALSE : CONFIG_BOOLEAN_TRUE; + rc = 2; + } + else + { + if (config_file_string_boolean_is_valid (value)) { - *((int *)option->value) = value_int; - rc = 2; + value_int = config_file_string_to_boolean (value); + if (value_int == *((int *)option->value)) + rc = 1; + else + { + *((int *)option->value) = value_int; + rc = 2; + } } } } diff --git a/src/core/wee-hook.h b/src/core/wee-hook.h index 4f17d606e..b3625a45d 100644 --- a/src/core/wee-hook.h +++ b/src/core/wee-hook.h @@ -68,7 +68,7 @@ struct t_hook struct t_hook *next_hook; /* link to next hook */ }; -typedef int (t_hook_callback_command)(void *data, struct t_gui_buffer *, +typedef int (t_hook_callback_command)(void *data, struct t_gui_buffer *buffer, int argc, char **argv, char **argv_eol); struct t_hook_command diff --git a/src/gui/curses/gui-curses-chat.c b/src/gui/curses/gui-curses-chat.c index 497a25ac2..8fabd0b02 100644 --- a/src/gui/curses/gui-curses-chat.c +++ b/src/gui/curses/gui-curses-chat.c @@ -1133,17 +1133,8 @@ gui_chat_draw (struct t_gui_buffer *buffer, int erase) { struct t_gui_window *ptr_win; struct t_gui_line *ptr_line; - /*t_irc_dcc *dcc_first, *dcc_selected, *ptr_dcc;*/ char format_empty[32]; int i, line_pos, count, old_scroll, y_start, y_end; - /*int j, num_bars; - unsigned long pct_complete; - char *unit_name[] = { N_("bytes"), N_("KB"), N_("MB"), N_("GB") }; - char *unit_format[] = { "%.0f", "%.1f", "%.02f", "%.02f" }; - float unit_divide[] = { 1, 1024, 1024*1024, 1024*1024*1024 }; - int num_unit; - char format[32], date[128], *buf; - struct tm *date_tmp;*/ if (!gui_ok) return; @@ -1168,254 +1159,119 @@ gui_chat_draw (struct t_gui_buffer *buffer, int erase) gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_chat, GUI_COLOR_CHAT); - /*if (buffer->type == GUI_BUFFER_TYPE_DCC) + ptr_win->win_chat_cursor_x = 0; + ptr_win->win_chat_cursor_y = 0; + + switch (ptr_win->buffer->type) { - i = 0; - dcc_first = (ptr_win->dcc_first) ? (t_irc_dcc *) ptr_win->dcc_first : irc_dcc_list; - dcc_selected = (ptr_win->dcc_selected) ? (t_irc_dcc *) ptr_win->dcc_selected : irc_dcc_list; - for (ptr_dcc = dcc_first; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc) - { - if (i >= ptr_win->win_chat_height - 1) - break; - - // nickname and filename - gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_chat, - (ptr_dcc == dcc_selected) ? - GUI_COLOR_DCC_SELECTED : GUI_COLOR_WIN_CHAT); - mvwprintw (GUI_CURSES(ptr_win)->win_chat, i, 0, "%s %-16s ", - (ptr_dcc == dcc_selected) ? "***" : " ", - ptr_dcc->nick); - buf = weechat_iconv_from_internal (NULL, - (IRC_DCC_IS_CHAT(ptr_dcc->type)) ? - _(ptr_dcc->filename) : ptr_dcc->filename); - wprintw (GUI_CURSES(ptr_win)->win_chat, "%s", - (buf) ? buf : ((IRC_DCC_IS_CHAT(ptr_dcc->type)) ? - _(ptr_dcc->filename) : ptr_dcc->filename)); - if (buf) - free (buf); - if (IRC_DCC_IS_FILE(ptr_dcc->type)) + case GUI_BUFFER_TYPE_FORMATED: + /* display at position of scrolling */ + if (ptr_win->start_line) { - if (ptr_dcc->filename_suffix > 0) - wprintw (GUI_CURSES(ptr_win)->win_chat, " (.%d)", - ptr_dcc->filename_suffix); - } - - // status - gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_chat, - (ptr_dcc == dcc_selected) ? - GUI_COLOR_DCC_SELECTED : GUI_COLOR_WIN_CHAT); - mvwprintw (GUI_CURSES(ptr_win)->win_chat, i + 1, 0, "%s %s ", - (ptr_dcc == dcc_selected) ? "***" : " ", - (IRC_DCC_IS_RECV(ptr_dcc->type)) ? "-->>" : "<<--"); - gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_chat, - GUI_COLOR_DCC_WAITING + ptr_dcc->status); - buf = weechat_iconv_from_internal (NULL, _(irc_dcc_status_string[ptr_dcc->status])); - wprintw (GUI_CURSES(ptr_win)->win_chat, "%-10s", - (buf) ? buf : _(irc_dcc_status_string[ptr_dcc->status])); - if (buf) - free (buf); - - // other infos - gui_window_set_weechat_color (GUI_CURSES(ptr_win)->win_chat, - (ptr_dcc == dcc_selected) ? - GUI_COLOR_DCC_SELECTED : GUI_COLOR_WIN_CHAT); - if (IRC_DCC_IS_FILE(ptr_dcc->type)) - { - wprintw (GUI_CURSES(ptr_win)->win_chat, " ["); - if (ptr_dcc->size == 0) - { - if (ptr_dcc->status == IRC_DCC_DONE) - num_bars = 10; - else - num_bars = 0; - } - else - num_bars = (int)((((float)(ptr_dcc->pos)/(float)(ptr_dcc->size))*100) / 10); - for (j = 0; j < num_bars - 1; j++) - wprintw (GUI_CURSES(ptr_win)->win_chat, "="); - if (num_bars > 0) - wprintw (GUI_CURSES(ptr_win)->win_chat, ">"); - for (j = 0; j < 10 - num_bars; j++) - wprintw (GUI_CURSES(ptr_win)->win_chat, " "); - - if (ptr_dcc->size < 1024*10) - num_unit = 0; - else if (ptr_dcc->size < 1024*1024) - num_unit = 1; - else if (ptr_dcc->size < 1024*1024*1024) - num_unit = 2; - else - num_unit = 3; - if (ptr_dcc->size == 0) - { - if (ptr_dcc->status == IRC_DCC_DONE) - pct_complete = 100; - else - pct_complete = 0; - } - else - pct_complete = (unsigned long)(((float)(ptr_dcc->pos)/(float)(ptr_dcc->size))*100); - wprintw (GUI_CURSES(ptr_win)->win_chat, "] %3lu%% ", - pct_complete); - sprintf (format, "%s %%s / %s %%s", - unit_format[num_unit], - unit_format[num_unit]); - wprintw (GUI_CURSES(ptr_win)->win_chat, format, - ((float)(ptr_dcc->pos)) / ((float)(unit_divide[num_unit])), - unit_name[num_unit], - ((float)(ptr_dcc->size)) / ((float)(unit_divide[num_unit])), - unit_name[num_unit]); - - if (ptr_dcc->bytes_per_sec < 1024*1024) - num_unit = 1; - else if (ptr_dcc->bytes_per_sec < 1024*1024*1024) - num_unit = 2; - else - num_unit = 3; - wprintw (GUI_CURSES(ptr_win)->win_chat, " ("); - if (ptr_dcc->status == IRC_DCC_ACTIVE) - { - wprintw (GUI_CURSES(ptr_win)->win_chat, _("ETA")); - wprintw (GUI_CURSES(ptr_win)->win_chat, ": %.2lu:%.2lu:%.2lu - ", - ptr_dcc->eta / 3600, - (ptr_dcc->eta / 60) % 60, - ptr_dcc->eta % 60); - } - sprintf (format, "%s %%s/s)", unit_format[num_unit]); - buf = weechat_iconv_from_internal (NULL, unit_name[num_unit]); - wprintw (GUI_CURSES(ptr_win)->win_chat, format, - ((float)ptr_dcc->bytes_per_sec) / ((float)(unit_divide[num_unit])), - (buf) ? buf : unit_name[num_unit]); - if (buf) - free (buf); + ptr_line = ptr_win->start_line; + line_pos = ptr_win->start_line_pos; } else { - date_tmp = localtime (&(ptr_dcc->start_time)); - strftime (date, sizeof (date) - 1, "%a, %d %b %Y %H:%M:%S", date_tmp); - wprintw (GUI_CURSES(ptr_win)->win_chat, " %s", date); + /* look for first line to display, starting from last line */ + ptr_line = NULL; + line_pos = 0; + gui_chat_calculate_line_diff (ptr_win, &ptr_line, &line_pos, + (-1) * (ptr_win->win_chat_height - 1)); } - wclrtoeol (GUI_CURSES(ptr_win)->win_chat); + if (line_pos > 0) + { + /* display end of first line at top of screen */ + gui_chat_display_line (ptr_win, ptr_line, + gui_chat_display_line (ptr_win, + ptr_line, + 0, 1) - + line_pos, 0); + ptr_line = gui_chat_get_next_line_displayed (ptr_line); + ptr_win->first_line_displayed = 0; + } + else + ptr_win->first_line_displayed = + (ptr_line == gui_chat_get_first_line_displayed (ptr_win->buffer)); - ptr_win->dcc_last_displayed = ptr_dcc; - i += 2; - } - } - else*/ - { - ptr_win->win_chat_cursor_x = 0; - ptr_win->win_chat_cursor_y = 0; - - switch (ptr_win->buffer->type) - { - case GUI_BUFFER_TYPE_FORMATED: - /* display at position of scrolling */ - if (ptr_win->start_line) - { - ptr_line = ptr_win->start_line; - line_pos = ptr_win->start_line_pos; - } - else - { - /* look for first line to display, starting from last line */ - ptr_line = NULL; - line_pos = 0; - gui_chat_calculate_line_diff (ptr_win, &ptr_line, &line_pos, - (-1) * (ptr_win->win_chat_height - 1)); - } - - if (line_pos > 0) - { - /* display end of first line at top of screen */ - gui_chat_display_line (ptr_win, ptr_line, - gui_chat_display_line (ptr_win, - ptr_line, - 0, 1) - - line_pos, 0); + /* display lines */ + count = 0; + while (ptr_line && (ptr_win->win_chat_cursor_y <= ptr_win->win_chat_height - 1)) + { + count = gui_chat_display_line (ptr_win, ptr_line, 0, 0); + ptr_line = gui_chat_get_next_line_displayed (ptr_line); + } + + old_scroll = ptr_win->scroll; + + ptr_win->scroll = (ptr_win->win_chat_cursor_y > ptr_win->win_chat_height - 1); + + /* check if last line of buffer is entirely displayed and scrolling */ + /* if so, disable scroll indicator */ + if (!ptr_line && ptr_win->scroll) + { + if (count == gui_chat_display_line (ptr_win, ptr_win->buffer->last_line, 0, 1)) + ptr_win->scroll = 0; + } + + if (ptr_win->scroll != old_scroll) + { + hook_signal_send ("window_scrolled", + WEECHAT_HOOK_SIGNAL_POINTER, ptr_win); + } + + if (!ptr_win->scroll + && (ptr_win->start_line == gui_chat_get_first_line_displayed (ptr_win->buffer))) + { + ptr_win->start_line = NULL; + ptr_win->start_line_pos = 0; + } + + /* cursor is below end line of chat window? */ + if (ptr_win->win_chat_cursor_y > ptr_win->win_chat_height - 1) + { + ptr_win->win_chat_cursor_x = 0; + ptr_win->win_chat_cursor_y = ptr_win->win_chat_height - 1; + } + break; + case GUI_BUFFER_TYPE_FREE: + /* display at position of scrolling */ + ptr_line = (ptr_win->start_line) ? + ptr_win->start_line : buffer->lines; + if (ptr_line) + { + if (!ptr_line->displayed) ptr_line = gui_chat_get_next_line_displayed (ptr_line); - ptr_win->first_line_displayed = 0; - } - else - ptr_win->first_line_displayed = - (ptr_line == gui_chat_get_first_line_displayed (ptr_win->buffer)); - - /* display lines */ - count = 0; - while (ptr_line && (ptr_win->win_chat_cursor_y <= ptr_win->win_chat_height - 1)) - { - count = gui_chat_display_line (ptr_win, ptr_line, 0, 0); - ptr_line = gui_chat_get_next_line_displayed (ptr_line); - } - - old_scroll = ptr_win->scroll; - - ptr_win->scroll = (ptr_win->win_chat_cursor_y > ptr_win->win_chat_height - 1); - - /* check if last line of buffer is entirely displayed and scrolling */ - /* if so, disable scroll indicator */ - if (!ptr_line && ptr_win->scroll) - { - if (count == gui_chat_display_line (ptr_win, ptr_win->buffer->last_line, 0, 1)) - ptr_win->scroll = 0; - } - - if (ptr_win->scroll != old_scroll) - { - hook_signal_send ("window_scrolled", - WEECHAT_HOOK_SIGNAL_POINTER, ptr_win); - } - - if (!ptr_win->scroll - && (ptr_win->start_line == gui_chat_get_first_line_displayed (ptr_win->buffer))) - { - ptr_win->start_line = NULL; - ptr_win->start_line_pos = 0; - } - - /* cursor is below end line of chat window? */ - if (ptr_win->win_chat_cursor_y > ptr_win->win_chat_height - 1) - { - ptr_win->win_chat_cursor_x = 0; - ptr_win->win_chat_cursor_y = ptr_win->win_chat_height - 1; - } - break; - case GUI_BUFFER_TYPE_FREE: - /* display at position of scrolling */ - ptr_line = (ptr_win->start_line) ? - ptr_win->start_line : buffer->lines; if (ptr_line) { - if (!ptr_line->displayed) - ptr_line = gui_chat_get_next_line_displayed (ptr_line); - if (ptr_line) + y_start = (ptr_win->start_line) ? ptr_line->y : 0; + y_end = y_start + ptr_win->win_chat_height - 1; + while (ptr_line && (ptr_line->y <= y_end)) { - y_start = (ptr_win->start_line) ? ptr_line->y : 0; - y_end = y_start + ptr_win->win_chat_height - 1; - while (ptr_line && (ptr_line->y <= y_end)) + if (ptr_line->refresh_needed || erase) { - if (ptr_line->refresh_needed || erase) - { - gui_chat_display_line_y (ptr_win, ptr_line, - ptr_line->y - y_start); - } - ptr_line = gui_chat_get_next_line_displayed (ptr_line); + gui_chat_display_line_y (ptr_win, ptr_line, + ptr_line->y - y_start); } + ptr_line = gui_chat_get_next_line_displayed (ptr_line); } } - } + } + break; } wnoutrefresh (GUI_CURSES(ptr_win)->win_chat); - refresh (); - - if (buffer->type == GUI_BUFFER_TYPE_FREE) - { - for (ptr_line = buffer->lines; ptr_line; - ptr_line = ptr_line->next_line) - { - ptr_line->refresh_needed = 0; - } - } + } + } + + refresh (); + + if (buffer->type == GUI_BUFFER_TYPE_FREE) + { + for (ptr_line = buffer->lines; ptr_line; + ptr_line = ptr_line->next_line) + { + ptr_line->refresh_needed = 0; } } } diff --git a/src/gui/curses/gui-curses-window.c b/src/gui/curses/gui-curses-window.c index 38c7f69e6..9a49faa7d 100644 --- a/src/gui/curses/gui-curses-window.c +++ b/src/gui/curses/gui-curses-window.c @@ -843,7 +843,7 @@ gui_window_scroll_topic_left (struct t_gui_window *window) window->win_title_start -= (window->win_width * 3) / 4; if (window->win_title_start < 0) window->win_title_start = 0; - window->buffer->title_refresh_needed = 1; + gui_buffer_ask_title_refresh (window->buffer, 1); } /* @@ -857,7 +857,7 @@ gui_window_scroll_topic_right (struct t_gui_window *window) return; window->win_title_start += (window->win_width * 3) / 4; - window->buffer->title_refresh_needed = 1; + gui_buffer_ask_title_refresh (window->buffer, 1); } /* @@ -875,7 +875,7 @@ gui_window_nick_beginning (struct t_gui_window *window) if (window->win_nick_start > 0) { window->win_nick_start = 0; - window->buffer->nicklist_refresh_needed = 1; + gui_buffer_ask_nicklist_refresh (window->buffer, 1); } } } @@ -904,7 +904,7 @@ gui_window_nick_end (struct t_gui_window *window) if (new_start != window->win_nick_start) { window->win_nick_start = new_start; - window->buffer->nicklist_refresh_needed = 1; + gui_buffer_ask_nicklist_refresh (window->buffer, 1); } } } @@ -926,7 +926,7 @@ gui_window_nick_page_up (struct t_gui_window *window) window->win_nick_start -= (window->win_nick_num_max - 1); if (window->win_nick_start <= 1) window->win_nick_start = 0; - window->buffer->nicklist_refresh_needed = 1; + gui_buffer_ask_nicklist_refresh (window->buffer, 1); } } } @@ -951,7 +951,7 @@ gui_window_nick_page_down (struct t_gui_window *window) window->win_nick_start += (window->win_nick_num_max - 1); else window->win_nick_start += (window->win_nick_num_max - 2); - window->buffer->nicklist_refresh_needed = 1; + gui_buffer_ask_nicklist_refresh (window->buffer, 1); } } } diff --git a/src/gui/gui-action.c b/src/gui/gui-action.c index 906564c86..36bf593a3 100644 --- a/src/gui/gui-action.c +++ b/src/gui/gui-action.c @@ -684,8 +684,8 @@ gui_action_up (char *args) ((t_irc_dcc *)(window->dcc_first))->prev_dcc; window->dcc_selected = ((t_irc_dcc *)(window->dcc_selected))->prev_dcc; - gui_current_window->buffer->chat_refresh_needed = 1; - gui_current_window->buffer->input_refresh_needed = 1; + gui_buffer_ask_chat_refresh (gui_current_window->buffer, 1); + gui_buffer_ask_input_refresh (gui_current_window->buffer, 1); } } } @@ -824,8 +824,8 @@ gui_action_down (char *args) else window->dcc_selected = irc_dcc_list->next_dcc; - gui_current_window->buffer->chat_refresh_needed = 1; - gui_current_window->buffer->input_refresh_needed = 1; + gui_buffer_ask_chat_refresh (gui_current_window->buffer, 1); + gui_buffer_ask_input_refresh (gui_current_window->buffer, 1); } } } @@ -1300,8 +1300,8 @@ gui_action_scroll_previous_highlight (char *args) window->start_line_pos = 0; window->first_line_displayed = (window->start_line == gui_current_window->buffer->lines); - gui_current_window->buffer->chat_refresh_needed = 1; - gui_current_window->buffer->input_refresh_needed = 1; + gui_buffer_ask_chat_refresh (gui_current_window->buffer, 1); + gui_buffer_ask_input_refresh (gui_current_window->buffer, 1); return; } ptr_line = ptr_line->prev_line; @@ -1337,8 +1337,8 @@ gui_action_scroll_next_highlight (char *args) window->start_line_pos = 0; window->first_line_displayed = (window->start_line == gui_current_window->buffer->lines); - gui_current_window->buffer->chat_refresh_needed = 1; - gui_current_window->buffer->input_refresh_needed = 1; + gui_buffer_ask_chat_refresh (gui_current_window->buffer, 1); + gui_buffer_ask_input_refresh (gui_current_window->buffer, 1); return; } ptr_line = ptr_line->next_line; @@ -1370,7 +1370,7 @@ gui_action_scroll_unread (char *args) gui_current_window->start_line_pos = 0; gui_current_window->first_line_displayed = (gui_current_window->start_line == gui_chat_get_first_line_displayed (gui_current_window->buffer)); - gui_current_window->buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (gui_current_window->buffer, 2); gui_status_refresh_needed = 1; } } diff --git a/src/gui/gui-bar.c b/src/gui/gui-bar.c index 292f8e6c8..cfb0d78ae 100644 --- a/src/gui/gui-bar.c +++ b/src/gui/gui-bar.c @@ -293,6 +293,9 @@ gui_bar_config_check_size (void *data, struct t_config_option *option, number = strtol (value, &error, 10); if (error && !error[0]) { + if (number < 0) + return 0; + if (number <= ptr_bar->current_size || gui_bar_check_size_add (ptr_bar, number - ptr_bar->current_size)) diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c index ba6883123..98e6cb6ae 100644 --- a/src/gui/gui-buffer.c +++ b/src/gui/gui-buffer.c @@ -265,6 +265,50 @@ gui_buffer_get_pointer (struct t_gui_buffer *buffer, char *property) return NULL; } +/* + * gui_buffer_ask_title_refresh: set "title_refresh_needed" flag + */ + +void +gui_buffer_ask_title_refresh (struct t_gui_buffer *buffer, int refresh) +{ + if (refresh > buffer->title_refresh_needed) + buffer->title_refresh_needed = refresh; +} + +/* + * gui_buffer_ask_chat_refresh: set "chat_refresh_needed" flag + */ + +void +gui_buffer_ask_chat_refresh (struct t_gui_buffer *buffer, int refresh) +{ + if (refresh > buffer->chat_refresh_needed) + buffer->chat_refresh_needed = refresh; +} + +/* + * gui_buffer_ask_nicklist_refresh: set "nicklist_refresh_needed" flag + */ + +void +gui_buffer_ask_nicklist_refresh (struct t_gui_buffer *buffer, int refresh) +{ + if (refresh > buffer->nicklist_refresh_needed) + buffer->nicklist_refresh_needed = refresh; +} + +/* + * gui_buffer_ask_input_refresh: set "input_refresh_needed" flag + */ + +void +gui_buffer_ask_input_refresh (struct t_gui_buffer *buffer, int refresh) +{ + if (refresh > buffer->input_refresh_needed) + buffer->input_refresh_needed = refresh; +} + /* * gui_buffer_set_category: set category for a buffer */ @@ -324,7 +368,7 @@ gui_buffer_set_type (struct t_gui_buffer *buffer, enum t_gui_buffer_type type) break; } buffer->type = type; - buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (buffer, 2); } /* @@ -337,7 +381,7 @@ gui_buffer_set_title (struct t_gui_buffer *buffer, char *new_title) if (buffer->title) free (buffer->title); buffer->title = (new_title && new_title[0]) ? strdup (new_title) : NULL; - buffer->title_refresh_needed = 1; + gui_buffer_ask_title_refresh (buffer, 1); } /* @@ -373,7 +417,7 @@ gui_buffer_set_nicklist_display_groups (struct t_gui_buffer *buffer, buffer->nicklist_display_groups = (display_groups) ? 1 : 0; buffer->nicklist_visible_count = 0; gui_nicklist_compute_visible_count (buffer, buffer->nicklist_root); - buffer->nicklist_refresh_needed = 1; + gui_buffer_ask_nicklist_refresh (buffer, 1); } /* @@ -386,7 +430,7 @@ gui_buffer_set_nick (struct t_gui_buffer *buffer, char *new_nick) if (buffer->input_nick) free (buffer->input_nick); buffer->input_nick = (new_nick && new_nick[0]) ? strdup (new_nick) : NULL; - buffer->input_refresh_needed = 1; + gui_buffer_ask_input_refresh (buffer, 1); } /* @@ -680,7 +724,7 @@ gui_buffer_clear (struct t_gui_buffer *buffer) } } - buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (buffer, 2); gui_status_refresh_needed = 1; } @@ -694,7 +738,9 @@ gui_buffer_clear_all () struct t_gui_buffer *ptr_buffer; for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) + { gui_buffer_clear (ptr_buffer); + } } /* diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h index 21ac6f776..f292fa9be 100644 --- a/src/gui/gui-buffer.h +++ b/src/gui/gui-buffer.h @@ -160,6 +160,14 @@ extern char *gui_buffer_get_string (struct t_gui_buffer *buffer, char *property); extern void *gui_buffer_get_pointer (struct t_gui_buffer *buffer, char *property); +extern void gui_buffer_ask_title_refresh (struct t_gui_buffer *buffer, + int refresh); +extern void gui_buffer_ask_chat_refresh (struct t_gui_buffer *buffer, + int refresh); +extern void gui_buffer_ask_nicklist_refresh (struct t_gui_buffer *buffer, + int refresh); +extern void gui_buffer_ask_input_refresh (struct t_gui_buffer *buffer, + int refresh); extern void gui_buffer_set_category (struct t_gui_buffer *buffer, char *category); extern void gui_buffer_set_name (struct t_gui_buffer *buffer, char *name); diff --git a/src/gui/gui-chat.c b/src/gui/gui-chat.c index 16c0d3b82..42c08b144 100644 --- a/src/gui/gui-chat.c +++ b/src/gui/gui-chat.c @@ -573,7 +573,7 @@ gui_chat_line_free (struct t_gui_buffer *buffer, struct t_gui_line *line) { ptr_win->start_line = ptr_win->start_line->next_line; ptr_win->start_line_pos = 0; - ptr_win->buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (buffer, 2); gui_status_refresh_needed = 1; } } @@ -887,7 +887,7 @@ gui_chat_printf_date_tags (struct t_gui_buffer *buffer, time_t date, if (gui_init_ok) { - buffer->chat_refresh_needed = 1; + gui_buffer_ask_chat_refresh (buffer, 1); if (gui_add_hotlist && ((buffer->num_displayed == 0) || (gui_buffer_is_scrolled (buffer)))) @@ -937,7 +937,7 @@ gui_chat_printf_y (struct t_gui_buffer *buffer, int y, char *message, ...) if (ptr_line && (ptr_line->y == y)) { gui_chat_line_free (buffer, ptr_line); - buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (buffer, 2); } } } @@ -953,7 +953,7 @@ gui_chat_printf_y (struct t_gui_buffer *buffer, int y, char *message, ...) if (gui_init_ok) { gui_chat_line_add_y (buffer, y, buf); - buffer->chat_refresh_needed = 1; + gui_buffer_ask_chat_refresh (buffer, 1); } else string_iconv_fprintf (stdout, "%s\n", buf); diff --git a/src/gui/gui-filter.c b/src/gui/gui-filter.c index 12005ca72..b39debe3f 100644 --- a/src/gui/gui-filter.c +++ b/src/gui/gui-filter.c @@ -106,7 +106,7 @@ gui_filter_buffer (struct t_gui_buffer *buffer) /* force chat refresh if at least one line changed */ if (ptr_line->displayed != line_displayed) - buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (buffer, 2); ptr_line->displayed = line_displayed; diff --git a/src/gui/gui-nicklist.c b/src/gui/gui-nicklist.c index 78ae1c6cd..63ab79fb1 100644 --- a/src/gui/gui-nicklist.c +++ b/src/gui/gui-nicklist.c @@ -195,7 +195,7 @@ gui_nicklist_add_group (struct t_gui_buffer *buffer, if (buffer->nicklist_display_groups && visible) { - buffer->nicklist_refresh_needed = 1; + gui_buffer_ask_nicklist_refresh (buffer, 1); buffer->nicklist_visible_count++; gui_status_refresh_needed = 1; } @@ -337,7 +337,7 @@ gui_nicklist_add_nick (struct t_gui_buffer *buffer, if (visible) { - buffer->nicklist_refresh_needed = 1; + gui_buffer_ask_nicklist_refresh (buffer, 1); buffer->nicklist_visible_count++; gui_status_refresh_needed = 1; } @@ -372,7 +372,7 @@ gui_nicklist_remove_nick (struct t_gui_buffer *buffer, if (nick->visible) { - buffer->nicklist_refresh_needed = 1; + gui_buffer_ask_nicklist_refresh (buffer, 1); if (buffer->nicklist_visible_count > 0) buffer->nicklist_visible_count--; gui_status_refresh_needed = 1; @@ -427,7 +427,7 @@ gui_nicklist_remove_group (struct t_gui_buffer *buffer, if (group->visible) { - buffer->nicklist_refresh_needed = 1; + gui_buffer_ask_nicklist_refresh (buffer, 1); if (buffer->nicklist_display_groups && (buffer->nicklist_visible_count > 0)) buffer->nicklist_visible_count--; diff --git a/src/gui/gui-window.c b/src/gui/gui-window.c index 09b84f2f2..66761bfa2 100644 --- a/src/gui/gui-window.c +++ b/src/gui/gui-window.c @@ -637,7 +637,7 @@ gui_window_scroll (struct t_gui_window *window, char *scroll) window->start_line_pos = 0; window->first_line_displayed = (window->start_line == gui_chat_get_first_line_displayed (window->buffer)); - window->buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (window->buffer, 2); gui_status_refresh_needed = 1; return; } @@ -680,7 +680,7 @@ gui_window_search_text (struct t_gui_window *window) window->start_line_pos = 0; window->first_line_displayed = (window->start_line == gui_chat_get_first_line_displayed (window->buffer)); - window->buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (window->buffer, 2); gui_status_refresh_needed = 1; return 1; } @@ -709,7 +709,7 @@ gui_window_search_text (struct t_gui_window *window) window->start_line_pos = 0; window->first_line_displayed = (window->start_line == window->buffer->lines); - window->buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (window->buffer, 2); gui_status_refresh_needed = 1; return 1; } @@ -740,7 +740,7 @@ gui_window_search_start (struct t_gui_window *window) strdup (window->buffer->input_buffer); gui_input_delete_line (window->buffer); gui_status_refresh_needed = 1; - window->buffer->input_refresh_needed = 1; + gui_buffer_ask_input_refresh (window->buffer, 1); } /* @@ -759,7 +759,7 @@ gui_window_search_restart (struct t_gui_window *window) window->buffer->text_search_found = 1; else { - window->buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (window->buffer, 2); gui_status_refresh_needed = 1; } } @@ -784,9 +784,9 @@ gui_window_search_stop (struct t_gui_window *window) window->start_line = NULL; window->start_line_pos = 0; gui_hotlist_remove_buffer (window->buffer); - window->buffer->chat_refresh_needed = 2; + gui_buffer_ask_chat_refresh (window->buffer, 2); gui_status_refresh_needed = 1; - window->buffer->input_refresh_needed = 1; + gui_buffer_ask_input_refresh (window->buffer, 1); } /* diff --git a/src/plugins/demo/demo.c b/src/plugins/demo/demo.c index f8a4620bc..1f4b2609f 100644 --- a/src/plugins/demo/demo.c +++ b/src/plugins/demo/demo.c @@ -296,7 +296,7 @@ demo_infolist_command_cb (void *data, struct t_gui_buffer *buffer, int argc, { if (weechat_strcasecmp (argv[1], "buffer") == 0) { - infolist = weechat_infolist_get ("buffer", NULL); + infolist = weechat_infolist_get ("buffer", NULL, NULL); if (infolist) { demo_infolist_print (infolist, "buffer"); @@ -306,7 +306,7 @@ demo_infolist_command_cb (void *data, struct t_gui_buffer *buffer, int argc, } if (weechat_strcasecmp (argv[1], "buffer_lines") == 0) { - infolist = weechat_infolist_get ("buffer_lines", NULL); + infolist = weechat_infolist_get ("buffer_lines", NULL, NULL); if (infolist) { demo_infolist_print (infolist, "buffer_line"); diff --git a/src/plugins/irc/irc-config.c b/src/plugins/irc/irc-config.c index 6229fa7e2..2f6c6df06 100644 --- a/src/plugins/irc/irc-config.c +++ b/src/plugins/irc/irc-config.c @@ -348,7 +348,7 @@ irc_config_reload_servers_from_config () char *name, *full_name, *server_name, *pos_option; int i, index_option; - infolist = weechat_infolist_get ("options", "irc.server.*"); + infolist = weechat_infolist_get ("options", NULL, "irc.server.*"); while (weechat_infolist_next (infolist)) { name = weechat_infolist_string (infolist, "name"); diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index 565ac5097..3e0326a9d 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -1006,7 +1006,7 @@ irc_server_rename (struct t_irc_server *server, char *new_name) if (!option_name) return 0; snprintf (option_name, length, "irc.server.%s.*", server->name); - infolist = weechat_infolist_get ("options", option_name); + infolist = weechat_infolist_get ("options", NULL, option_name); free (option_name); while (weechat_infolist_next (infolist)) { diff --git a/src/plugins/logger/logger.c b/src/plugins/logger/logger.c index ec0a7ddf3..df6be59f3 100644 --- a/src/plugins/logger/logger.c +++ b/src/plugins/logger/logger.c @@ -207,7 +207,7 @@ logger_get_filename (struct t_gui_buffer *buffer) if (dir_separator && weechat_dir && log_path && log_path2) { - ptr_infolist = weechat_infolist_get ("buffer", buffer); + ptr_infolist = weechat_infolist_get ("buffer", buffer, NULL); if (ptr_infolist) { category2 = NULL; @@ -386,7 +386,7 @@ logger_start_buffer_all () { struct t_plugin_infolist *ptr_infolist; - ptr_infolist = weechat_infolist_get ("buffer", NULL); + ptr_infolist = weechat_infolist_get ("buffer", NULL, NULL); if (ptr_infolist) { while (weechat_infolist_next (ptr_infolist)) diff --git a/src/plugins/plugin-api.c b/src/plugins/plugin-api.c index 90979ca8d..73ef72aba 100644 --- a/src/plugins/plugin-api.c +++ b/src/plugins/plugin-api.c @@ -574,6 +574,13 @@ plugin_api_infolist_get_add_options (struct t_plugin_infolist *infolist, switch (ptr_option->type) { case CONFIG_OPTION_TYPE_BOOLEAN: + if (!plugin_infolist_new_var_string (ptr_item, + "type", + "boolean")) + { + free (option_full_name); + return 0; + } if (CONFIG_BOOLEAN(ptr_option) == CONFIG_BOOLEAN_TRUE) snprintf (value, sizeof (value), "on"); else @@ -598,6 +605,13 @@ plugin_api_infolist_get_add_options (struct t_plugin_infolist *infolist, } break; case CONFIG_OPTION_TYPE_INTEGER: + if (!plugin_infolist_new_var_string (ptr_item, + "type", + "integer")) + { + free (option_full_name); + return 0; + } if (ptr_option->string_values) { if (!plugin_infolist_new_var_string (ptr_item, @@ -638,6 +652,13 @@ plugin_api_infolist_get_add_options (struct t_plugin_infolist *infolist, } break; case CONFIG_OPTION_TYPE_STRING: + if (!plugin_infolist_new_var_string (ptr_item, + "type", + "string")) + { + free (option_full_name); + return 0; + } if (!plugin_infolist_new_var_string (ptr_item, "value", CONFIG_STRING(ptr_option))) @@ -654,6 +675,13 @@ plugin_api_infolist_get_add_options (struct t_plugin_infolist *infolist, } break; case CONFIG_OPTION_TYPE_COLOR: + if (!plugin_infolist_new_var_string (ptr_item, + "type", + "color")) + { + free (option_full_name); + return 0; + } if (!plugin_infolist_new_var_string (ptr_item, "value", gui_color_get_name (CONFIG_COLOR(ptr_option)))) @@ -689,7 +717,7 @@ plugin_api_infolist_get_add_options (struct t_plugin_infolist *infolist, */ struct t_plugin_infolist * -plugin_api_infolist_get (char *name, void *pointer) +plugin_api_infolist_get (char *name, void *pointer, char *arguments) { struct t_plugin_infolist *ptr_infolist; struct t_gui_buffer *ptr_buffer; @@ -766,7 +794,7 @@ plugin_api_infolist_get (char *name, void *pointer) ptr_infolist = plugin_infolist_new (); if (ptr_infolist) { - if (!plugin_api_infolist_get_add_options (ptr_infolist, pointer)) + if (!plugin_api_infolist_get_add_options (ptr_infolist, arguments)) { plugin_infolist_free (ptr_infolist); return NULL; diff --git a/src/plugins/plugin-api.h b/src/plugins/plugin-api.h index f90104c6c..bc61ab425 100644 --- a/src/plugins/plugin-api.h +++ b/src/plugins/plugin-api.h @@ -54,7 +54,8 @@ extern char *plugin_api_info_get (struct t_weechat_plugin *plugin, char *info); /* infolists */ extern struct t_plugin_infolist *plugin_api_infolist_get (char *name, - void *pointer); + void *pointer, + char *arguments); extern int plugin_api_infolist_next (struct t_plugin_infolist *infolist); extern int plugin_api_infolist_prev (struct t_plugin_infolist *infolist); extern char *plugin_api_infolist_fields (struct t_plugin_infolist *infolist); diff --git a/src/plugins/scripts/lua/weechat-lua-api.c b/src/plugins/scripts/lua/weechat-lua-api.c index 04a6eeb8e..2cf5a3ee0 100644 --- a/src/plugins/scripts/lua/weechat-lua-api.c +++ b/src/plugins/scripts/lua/weechat-lua-api.c @@ -3013,12 +3013,12 @@ weechat_lua_api_unhook_all (lua_State *L) } /* - * weechat_lua_api_input_data_cb: callback for input data in a buffer + * weechat_lua_api_buffer_input_data_cb: callback for input data in a buffer */ int -weechat_lua_api_input_data_cb (void *data, struct t_gui_buffer *buffer, - char *input_data) +weechat_lua_api_buffer_input_data_cb (void *data, struct t_gui_buffer *buffer, + char *input_data) { struct t_script_callback *script_callback; char *lua_argv[3]; @@ -3049,11 +3049,11 @@ weechat_lua_api_input_data_cb (void *data, struct t_gui_buffer *buffer, } /* - * weechat_lua_api_close_cb: callback for buffer closed + * weechat_lua_api_buffer_close_cb: callback for buffer closed */ int -weechat_lua_api_close_cb (void *data, struct t_gui_buffer *buffer) +weechat_lua_api_buffer_close_cb (void *data, struct t_gui_buffer *buffer) { struct t_script_callback *script_callback; char *lua_argv[2]; @@ -3124,9 +3124,9 @@ weechat_lua_api_buffer_new (lua_State *L) lua_current_script, (char *)category, (char *)name, - &weechat_lua_api_input_data_cb, + &weechat_lua_api_buffer_input_data_cb, (char *)function_input, - &weechat_lua_api_close_cb, + &weechat_lua_api_buffer_close_cb, (char *)function_close)); LUA_RETURN_STRING_FREE(result); @@ -4121,7 +4121,7 @@ weechat_lua_api_info_get (lua_State *L) static int weechat_lua_api_infolist_get (lua_State *L) { - const char *name, *pointer; + const char *name, *pointer, *arguments; char *value; int n; @@ -4136,20 +4136,23 @@ weechat_lua_api_infolist_get (lua_State *L) name = NULL; pointer = NULL; + arguments = NULL; n = lua_gettop (lua_current_interpreter); - if (n < 2) + if (n < 3) { WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get"); LUA_RETURN_EMPTY; } - name = lua_tostring (lua_current_interpreter, -2); - pointer = lua_tostring (lua_current_interpreter, -1); + name = lua_tostring (lua_current_interpreter, -3); + pointer = lua_tostring (lua_current_interpreter, -2); + arguments = lua_tostring (lua_current_interpreter, -1); value = script_ptr2str (weechat_infolist_get ((char *)name, - script_str2ptr ((char *)pointer))); + script_str2ptr ((char *)pointer), + (char *)arguments)); LUA_RETURN_STRING_FREE(value); } diff --git a/src/plugins/scripts/perl/weechat-perl-api.c b/src/plugins/scripts/perl/weechat-perl-api.c index 168d53bc7..4c6fefd25 100644 --- a/src/plugins/scripts/perl/weechat-perl-api.c +++ b/src/plugins/scripts/perl/weechat-perl-api.c @@ -2517,12 +2517,12 @@ static XS (XS_weechat_unhook_all) } /* - * weechat_perl_api_input_data_cb: callback for input data in a buffer + * weechat_perl_api_buffer_input_data_cb: callback for input data in a buffer */ int -weechat_perl_api_input_data_cb (void *data, struct t_gui_buffer *buffer, - char *input_data) +weechat_perl_api_buffer_input_data_cb (void *data, struct t_gui_buffer *buffer, + char *input_data) { struct t_script_callback *script_callback; char *perl_argv[3]; @@ -2552,11 +2552,11 @@ weechat_perl_api_input_data_cb (void *data, struct t_gui_buffer *buffer, } /* - * weechat_perl_api_close_cb: callback for buffer closed + * weechat_perl_api_buffer_close_cb: callback for buffer closed */ int -weechat_perl_api_close_cb (void *data, struct t_gui_buffer *buffer) +weechat_perl_api_buffer_close_cb (void *data, struct t_gui_buffer *buffer) { struct t_script_callback *script_callback; char *perl_argv[2]; @@ -2616,9 +2616,9 @@ static XS (XS_weechat_buffer_new) perl_current_script, category, name, - &weechat_perl_api_input_data_cb, + &weechat_perl_api_buffer_input_data_cb, function_input, - &weechat_perl_api_close_cb, + &weechat_perl_api_buffer_close_cb, function_close)); PERL_RETURN_STRING_FREE(result); @@ -3410,7 +3410,7 @@ static XS (XS_weechat_info_get) static XS (XS_weechat_infolist_get) { - char *value, *name, *pointer; + char *value, *name, *pointer, *arguments; dXSARGS; /* make C compiler happy */ @@ -3422,7 +3422,7 @@ static XS (XS_weechat_infolist_get) PERL_RETURN_EMPTY; } - if (items < 2) + if (items < 3) { WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get"); PERL_RETURN_EMPTY; @@ -3430,7 +3430,10 @@ static XS (XS_weechat_infolist_get) name = SvPV (ST (0), PL_na); pointer = SvPV (ST (1), PL_na); - value = script_ptr2str (weechat_infolist_get (name, script_str2ptr (pointer))); + arguments = SvPV (ST (2), PL_na); + value = script_ptr2str (weechat_infolist_get (name, + script_str2ptr (pointer), + arguments)); PERL_RETURN_STRING_FREE(value); } diff --git a/src/plugins/scripts/python/weechat-python-api.c b/src/plugins/scripts/python/weechat-python-api.c index a4829ce03..dc3e6d6fa 100644 --- a/src/plugins/scripts/python/weechat-python-api.c +++ b/src/plugins/scripts/python/weechat-python-api.c @@ -2673,12 +2673,12 @@ weechat_python_api_unhook_all (PyObject *self, PyObject *args) } /* - * weechat_python_api_input_data_cb: callback for input data in a buffer + * weechat_python_api_buffer_input_data_cb: callback for input data in a buffer */ int -weechat_python_api_input_data_cb (void *data, struct t_gui_buffer *buffer, - char *input_data) +weechat_python_api_buffer_input_data_cb (void *data, struct t_gui_buffer *buffer, + char *input_data) { struct t_script_callback *script_callback; char *python_argv[3]; @@ -2708,11 +2708,11 @@ weechat_python_api_input_data_cb (void *data, struct t_gui_buffer *buffer, } /* - * weechat_python_api_close_cb: callback for buffer closed + * weechat_python_api_buffer_close_cb: callback for buffer closed */ int -weechat_python_api_close_cb (void *data, struct t_gui_buffer *buffer) +weechat_python_api_buffer_close_cb (void *data, struct t_gui_buffer *buffer) { struct t_script_callback *script_callback; char *python_argv[2]; @@ -2775,9 +2775,9 @@ weechat_python_api_buffer_new (PyObject *self, PyObject *args) python_current_script, category, name, - &weechat_python_api_input_data_cb, + &weechat_python_api_buffer_input_data_cb, function_input, - &weechat_python_api_close_cb, + &weechat_python_api_buffer_close_cb, function_close)); PYTHON_RETURN_STRING_FREE(result); @@ -3632,7 +3632,7 @@ weechat_python_api_info_get (PyObject *self, PyObject *args) static PyObject * weechat_python_api_infolist_get (PyObject *self, PyObject *args) { - char *name, *pointer, *value; + char *name, *pointer, *arguments, *value; PyObject *object; /* make C compiler happy */ @@ -3646,15 +3646,17 @@ weechat_python_api_infolist_get (PyObject *self, PyObject *args) name = NULL; pointer = NULL; + arguments = NULL; - if (!PyArg_ParseTuple (args, "ss", &name, &pointer)) + if (!PyArg_ParseTuple (args, "sss", &name, &pointer, &arguments)) { WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get"); PYTHON_RETURN_EMPTY; } value = script_ptr2str (weechat_infolist_get (name, - script_str2ptr (pointer))); + script_str2ptr (pointer), + arguments)); PYTHON_RETURN_STRING_FREE(value); } diff --git a/src/plugins/scripts/ruby/weechat-ruby-api.c b/src/plugins/scripts/ruby/weechat-ruby-api.c index 46ec71db0..00525a3be 100644 --- a/src/plugins/scripts/ruby/weechat-ruby-api.c +++ b/src/plugins/scripts/ruby/weechat-ruby-api.c @@ -3078,12 +3078,12 @@ weechat_ruby_api_unhook_all (VALUE class) } /* - * weechat_ruby_api_input_data_cb: callback for input data in a buffer + * weechat_ruby_api_buffer_input_data_cb: callback for input data in a buffer */ int -weechat_ruby_api_input_data_cb (void *data, struct t_gui_buffer *buffer, - char *input_data) +weechat_ruby_api_buffer_input_data_cb (void *data, struct t_gui_buffer *buffer, + char *input_data) { struct t_script_callback *script_callback; char *ruby_argv[3]; @@ -3114,11 +3114,11 @@ weechat_ruby_api_input_data_cb (void *data, struct t_gui_buffer *buffer, } /* - * weechat_ruby_api_close_cb: callback for closed buffer + * weechat_ruby_api_buffer_close_cb: callback for closed buffer */ int -weechat_ruby_api_close_cb (void *data, struct t_gui_buffer *buffer) +weechat_ruby_api_buffer_close_cb (void *data, struct t_gui_buffer *buffer) { struct t_script_callback *script_callback; char *ruby_argv[2]; @@ -3193,9 +3193,9 @@ weechat_ruby_api_buffer_new (VALUE class, VALUE category, VALUE name, ruby_current_script, c_category, c_name, - &weechat_ruby_api_input_data_cb, + &weechat_ruby_api_buffer_input_data_cb, c_function_input, - &weechat_ruby_api_close_cb, + &weechat_ruby_api_buffer_close_cb, c_function_close)); RUBY_RETURN_STRING_FREE(result); @@ -4177,9 +4177,10 @@ weechat_ruby_api_info_get (VALUE class, VALUE info) */ static VALUE -weechat_ruby_api_infolist_get (VALUE class, VALUE name, VALUE pointer) +weechat_ruby_api_infolist_get (VALUE class, VALUE name, VALUE pointer, + VALUE arguments) { - char *c_name, *c_pointer, *value; + char *c_name, *c_pointer, *c_arguments, *value; VALUE return_value; /* make C compiler happy */ @@ -4199,11 +4200,15 @@ weechat_ruby_api_infolist_get (VALUE class, VALUE name, VALUE pointer) Check_Type (name, T_STRING); Check_Type (pointer, T_STRING); + Check_Type (arguments, T_STRING); c_name = STR2CSTR (name); c_pointer = STR2CSTR (pointer); + c_arguments = STR2CSTR (arguments); - value = script_ptr2str (weechat_infolist_get (c_name, script_str2ptr (c_pointer))); + value = script_ptr2str (weechat_infolist_get (c_name, + script_str2ptr (c_pointer), + c_arguments)); RUBY_RETURN_STRING_FREE(value); } @@ -4590,7 +4595,7 @@ weechat_ruby_api_init (VALUE ruby_mWeechat) rb_define_module_function (ruby_mWeechat, "bar_remove", &weechat_ruby_api_bar_remove, 1); rb_define_module_function (ruby_mWeechat, "command", &weechat_ruby_api_command, 2); rb_define_module_function (ruby_mWeechat, "info_get", &weechat_ruby_api_info_get, 1); - rb_define_module_function (ruby_mWeechat, "infolist_get", &weechat_ruby_api_infolist_get, 2); + rb_define_module_function (ruby_mWeechat, "infolist_get", &weechat_ruby_api_infolist_get, 3); rb_define_module_function (ruby_mWeechat, "infolist_next", &weechat_ruby_api_infolist_next, 1); rb_define_module_function (ruby_mWeechat, "infolist_prev", &weechat_ruby_api_infolist_prev, 1); rb_define_module_function (ruby_mWeechat, "infolist_fields", &weechat_ruby_api_infolist_fields, 1); diff --git a/src/plugins/weechat-plugin.h b/src/plugins/weechat-plugin.h index 1206ef0f4..4fdea2b2a 100644 --- a/src/plugins/weechat-plugin.h +++ b/src/plugins/weechat-plugin.h @@ -390,7 +390,8 @@ struct t_weechat_plugin char *(*info_get) (struct t_weechat_plugin *plugin, char *info); /* infolists */ - struct t_plugin_infolist *(*infolist_get) (char *name, void *pointer); + struct t_plugin_infolist *(*infolist_get) (char *name, void *pointer, + char *arguments); int (*infolist_next) (struct t_plugin_infolist *infolist); int (*infolist_prev) (struct t_plugin_infolist *infolist); char *(*infolist_fields) (struct t_plugin_infolist *infolist); @@ -790,8 +791,8 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin); weechat_plugin->info_get(weechat_plugin, __name) /* infolists */ -#define weechat_infolist_get(__name, __pointer) \ - weechat_plugin->infolist_get(__name, __pointer) +#define weechat_infolist_get(__name, __pointer, __arguments) \ + weechat_plugin->infolist_get(__name, __pointer, __arguments) #define weechat_infolist_next(__list) \ weechat_plugin->infolist_next(__list) #define weechat_infolist_prev(__list) \