mirror of
https://github.com/weechat/weechat.git
synced 2026-07-05 17:23:15 +02:00
Partial support of bars, with custom items.
Today only root bars are partially working (refresh is not always performed), and bars are not saved in configuration file. To be continued...
This commit is contained in:
@@ -40,6 +40,8 @@
|
||||
#include "wee-string.h"
|
||||
#include "wee-utf8.h"
|
||||
#include "wee-list.h"
|
||||
#include "../gui/gui-bar.h"
|
||||
#include "../gui/gui-bar-item.h"
|
||||
#include "../gui/gui-buffer.h"
|
||||
#include "../gui/gui-chat.h"
|
||||
#include "../gui/gui-color.h"
|
||||
@@ -52,6 +54,162 @@
|
||||
#include "../plugins/plugin-config.h"
|
||||
|
||||
|
||||
/*
|
||||
* command_bar: manage bars
|
||||
*/
|
||||
|
||||
int
|
||||
command_bar (void *data, struct t_gui_buffer *buffer,
|
||||
int argc, char **argv, char **argv_eol)
|
||||
{
|
||||
int i, type, position, size, separator;
|
||||
long number;
|
||||
char *error;
|
||||
struct t_gui_bar *ptr_bar;
|
||||
struct t_gui_bar_item *ptr_item;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) buffer;
|
||||
(void) argc;
|
||||
(void) argv;
|
||||
(void) argv_eol;
|
||||
|
||||
if ((argc == 1)
|
||||
|| ((argc == 2) && (string_strcasecmp (argv[1], "list") == 0)))
|
||||
{
|
||||
/* list of bars */
|
||||
if (gui_bars)
|
||||
{
|
||||
gui_chat_printf (NULL, "");
|
||||
gui_chat_printf (NULL, _("List of bars:"));
|
||||
for (ptr_bar = gui_bars; ptr_bar;
|
||||
ptr_bar = ptr_bar->next_bar)
|
||||
{
|
||||
gui_chat_printf (NULL,
|
||||
_(" %d. %s: %s, %s, %s: %d, items: %s%s (plugin: %s)"),
|
||||
ptr_bar->number,
|
||||
ptr_bar->name,
|
||||
gui_bar_type_str[ptr_bar->type],
|
||||
gui_bar_position_str[ptr_bar->position],
|
||||
((ptr_bar->position == GUI_BAR_POSITION_BOTTOM)
|
||||
|| (ptr_bar->position == GUI_BAR_POSITION_TOP)) ?
|
||||
_("height") : _("width"),
|
||||
ptr_bar->size,
|
||||
(ptr_bar->items) ? ptr_bar->items : "-",
|
||||
(ptr_bar->separator) ?
|
||||
_(", with separator") : "",
|
||||
(ptr_bar->plugin) ? ptr_bar->plugin->name : "-");
|
||||
}
|
||||
}
|
||||
else
|
||||
gui_chat_printf (NULL, _("No bar defined"));
|
||||
|
||||
/* list of bar items */
|
||||
if (gui_bar_items)
|
||||
{
|
||||
gui_chat_printf (NULL, "");
|
||||
gui_chat_printf (NULL, _("List of bar items:"));
|
||||
for (ptr_item = gui_bar_items; ptr_item;
|
||||
ptr_item = ptr_item->next_item)
|
||||
{
|
||||
gui_chat_printf (NULL,
|
||||
_(" %s (plugin: %s)"),
|
||||
ptr_item->name,
|
||||
(ptr_item->plugin) ? ptr_item->plugin->name : "-");
|
||||
}
|
||||
}
|
||||
else
|
||||
gui_chat_printf (NULL, _("No bar item defined"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string_strcasecmp (argv[1], "add") == 0)
|
||||
{
|
||||
if (argc < 8)
|
||||
{
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: missing arguments for \"%s\" "
|
||||
"command"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
|
||||
"bar");
|
||||
return WEECHAT_RC_ERROR;
|
||||
}
|
||||
type = -1;
|
||||
for (i = 0; i < GUI_BAR_NUM_TYPES; i++)
|
||||
{
|
||||
if (string_strcasecmp (argv[3], gui_bar_type_str[i]) == 0)
|
||||
{
|
||||
type = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (type < 0)
|
||||
{
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: wrong type \"%s\" for bar "
|
||||
"\"%s\""),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
|
||||
argv[3], argv[2]);
|
||||
return WEECHAT_RC_ERROR;
|
||||
}
|
||||
position = -1;
|
||||
for (i = 0; i < GUI_BAR_NUM_POSITIONS; i++)
|
||||
{
|
||||
if (string_strcasecmp (argv[4], gui_bar_position_str[i]) == 0)
|
||||
{
|
||||
position = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (position < 0)
|
||||
{
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: wrong position \"%s\" for bar "
|
||||
"\"%s\""),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
|
||||
argv[4], argv[2]);
|
||||
return WEECHAT_RC_ERROR;
|
||||
}
|
||||
error = NULL;
|
||||
number = strtol (argv[5], &error, 10);
|
||||
if (error && (error[0] == '\0'))
|
||||
{
|
||||
size = number;
|
||||
separator = 0;
|
||||
if (strcmp (argv[6], "0") != 0)
|
||||
separator = 1;
|
||||
|
||||
/* create bar */
|
||||
if (gui_bar_new (NULL, argv[2], argv[3], argv[4], size,
|
||||
separator, argv[7]))
|
||||
gui_chat_printf (NULL, _("%sBar \"%s\" created"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_INFO],
|
||||
argv[2]);
|
||||
else
|
||||
gui_chat_printf (NULL, _("%sError: failed to create bar "
|
||||
"\"%s\""),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
|
||||
argv[2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: wrong size \"%s\" for bar "
|
||||
"\"%s\""),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
|
||||
argv[5], argv[2]);
|
||||
return WEECHAT_RC_ERROR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* command_buffer: manage buffers
|
||||
*/
|
||||
@@ -1870,6 +2028,21 @@ command_window (void *data, struct t_gui_buffer *buffer,
|
||||
void
|
||||
command_init ()
|
||||
{
|
||||
hook_command (NULL, "bar",
|
||||
N_("manage bars"),
|
||||
N_("[add name type position size [separator]] | [list]"),
|
||||
N_(" add: add a new bar\n"
|
||||
" name: name of bar (must be unique)\n"
|
||||
" type: \"root\" (outside windows), \"window_active\" "
|
||||
"(inside active window), or \"window_inactive\" (inside "
|
||||
"each inactive window)\n"
|
||||
" position: bottom, top, left or right\n"
|
||||
" size: size of bar (in chars)\n"
|
||||
"separator: 1 for using separator (line), 0 or nothing "
|
||||
"means no separator\n"
|
||||
" list: list all bars"),
|
||||
"list",
|
||||
&command_bar, NULL);
|
||||
hook_command (NULL, "buffer",
|
||||
N_("manage buffers"),
|
||||
N_("[action [args] | number | [[server] [channel]]]"),
|
||||
|
||||
@@ -1015,7 +1015,7 @@ config_weechat_init ()
|
||||
weechat_config_file, ptr_section,
|
||||
"color_status_more", "color",
|
||||
N_("text color for buffer with new data (status bar)"),
|
||||
NULL, GUI_COLOR_STATUS_MORE, 0, "white", &config_change_color, NULL);
|
||||
NULL, GUI_COLOR_STATUS_MORE, 0, "yellow", &config_change_color, NULL);
|
||||
/* infobar window */
|
||||
config_color_infobar = config_file_new_option (
|
||||
weechat_config_file, ptr_section,
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
#include "wee-log.h"
|
||||
#include "wee-hook.h"
|
||||
#include "wee-string.h"
|
||||
#include "../gui/gui-bar.h"
|
||||
#include "../gui/gui-bar-item.h"
|
||||
#include "../gui/gui-buffer.h"
|
||||
#include "../gui/gui-chat.h"
|
||||
#include "../gui/gui-hotlist.h"
|
||||
@@ -73,6 +75,8 @@ debug_dump (int crash)
|
||||
|
||||
gui_window_print_log ();
|
||||
gui_buffer_print_log ();
|
||||
gui_bar_print_log ();
|
||||
gui_bar_item_print_log ();
|
||||
gui_hotlist_print_log ();
|
||||
|
||||
hook_print_log ();
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ enum t_hook_type
|
||||
HOOK_TYPE_SIGNAL, /* signal */
|
||||
HOOK_TYPE_CONFIG, /* config option */
|
||||
HOOK_TYPE_COMPLETION, /* custom completions */
|
||||
HOOK_TYPE_MODIFIER, /* stirng modifier */
|
||||
HOOK_TYPE_MODIFIER, /* string modifier */
|
||||
/* number of hook types */
|
||||
HOOK_NUM_TYPES,
|
||||
};
|
||||
|
||||
@@ -18,10 +18,11 @@ IF(NOT DISABLE_NCURSES)
|
||||
SUBDIRS( curses )
|
||||
ENDIF(NOT DISABLE_NCURSES)
|
||||
|
||||
SET(LIB_GUI_COMMON_SRC gui-action.c gui-action.h gui-buffer.c gui-buffer.h
|
||||
gui-chat.c gui-chat.h gui-color.c gui-color.h gui-completion.c gui-completion.h
|
||||
gui-history.c gui-history.h gui-hotlist.c gui-hotlist.h gui-infobar.c
|
||||
gui-infobar.h gui-input.c gui-input.h gui-keyboard.c gui-keyboard.h gui-main.h
|
||||
SET(LIB_GUI_COMMON_SRC gui-action.c gui-action.h gui-bar.c gui-bar.h
|
||||
gui-bar-item.c gui-bar-item.h gui-buffer.c gui-buffer.h gui-chat.c gui-chat.h
|
||||
gui-color.c gui-color.h gui-completion.c gui-completion.h gui-history.c
|
||||
gui-history.h gui-hotlist.c gui-hotlist.h gui-infobar.c gui-infobar.h
|
||||
gui-input.c gui-input.h gui-keyboard.c gui-keyboard.h gui-main.h
|
||||
gui-nicklist.c gui-nicklist.h gui-status.h gui-window.c gui-window.h)
|
||||
|
||||
INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
|
||||
|
||||
@@ -20,6 +20,10 @@ noinst_LIBRARIES = lib_weechat_gui_common.a
|
||||
|
||||
lib_weechat_gui_common_a_SOURCES = gui-action.c \
|
||||
gui-action.h \
|
||||
gui-bar.c \
|
||||
gui-bar.h \
|
||||
gui-bar-item.c \
|
||||
gui-bar-item.h \
|
||||
gui-buffer.c \
|
||||
gui-buffer.h \
|
||||
gui-chat.c \
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
SET(WEECHAT_CURSES_SRC gui-curses-chat.c gui-curses-color.c gui-curses-infobar.c
|
||||
gui-curses-input.c gui-curses-keyboard.c gui-curses-main.c gui-curses-nicklist.c
|
||||
gui-curses-status.c gui-curses-window.c gui-curses.h)
|
||||
SET(WEECHAT_CURSES_SRC gui-curses-bar.c gui-curses-chat.c gui-curses-color.c
|
||||
gui-curses-infobar.c gui-curses-input.c gui-curses-keyboard.c gui-curses-main.c
|
||||
gui-curses-nicklist.c gui-curses-status.c gui-curses-window.c gui-curses.h)
|
||||
|
||||
SET(EXECUTABLE weechat-curses)
|
||||
|
||||
|
||||
@@ -37,7 +37,8 @@ weechat_curses_LDADD = ../../core/weechat.o \
|
||||
$(PLUGINS_LFLAGS) \
|
||||
$(NCURSES_LFLAGS)
|
||||
|
||||
weechat_curses_SOURCES = gui-curses-chat.c \
|
||||
weechat_curses_SOURCES = gui-curses-bar.c \
|
||||
gui-curses-chat.c \
|
||||
gui-curses-color.c \
|
||||
gui-curses-infobar.c \
|
||||
gui-curses-input.c \
|
||||
|
||||
@@ -0,0 +1,399 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2008 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* gui-curses-bar.c: bar functions for Curses GUI */
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "../../core/weechat.h"
|
||||
#include "../../core/wee-log.h"
|
||||
#include "../gui-bar.h"
|
||||
#include "../gui-bar-item.h"
|
||||
#include "../gui-chat.h"
|
||||
#include "../gui-color.h"
|
||||
#include "../gui-window.h"
|
||||
#include "gui-curses.h"
|
||||
|
||||
|
||||
/*
|
||||
* gui_bar_window_get_size: get total bar size (window bars) for a position
|
||||
* bar is optional, if not NULL, size is computed
|
||||
* from bar 1 to bar # - 1
|
||||
*/
|
||||
|
||||
int
|
||||
gui_bar_window_get_size (struct t_gui_bar *bar, struct t_gui_window *window,
|
||||
int position)
|
||||
{
|
||||
struct t_gui_bar_window *ptr_bar_window;
|
||||
int total_size;
|
||||
|
||||
total_size = 0;
|
||||
for (ptr_bar_window = GUI_CURSES(window)->bar_windows; ptr_bar_window;
|
||||
ptr_bar_window = ptr_bar_window->next_bar_window)
|
||||
{
|
||||
/* stop before bar */
|
||||
if (bar && (ptr_bar_window->bar == bar))
|
||||
return total_size;
|
||||
|
||||
if ((ptr_bar_window->bar->type != GUI_BAR_TYPE_ROOT)
|
||||
&& (ptr_bar_window->bar->position == position))
|
||||
{
|
||||
switch (position)
|
||||
{
|
||||
case GUI_BAR_POSITION_BOTTOM:
|
||||
case GUI_BAR_POSITION_TOP:
|
||||
total_size += ptr_bar_window->height;
|
||||
break;
|
||||
case GUI_BAR_POSITION_LEFT:
|
||||
case GUI_BAR_POSITION_RIGHT:
|
||||
total_size += ptr_bar_window->width;
|
||||
break;
|
||||
}
|
||||
if (ptr_bar_window->bar->separator)
|
||||
total_size++;
|
||||
}
|
||||
}
|
||||
return total_size;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_window_calculate_pos_size: calculate position and size of a bar
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_window_calculate_pos_size (struct t_gui_bar_window *bar_window,
|
||||
struct t_gui_window *window)
|
||||
{
|
||||
int x1, y1, x2, y2;
|
||||
int add_bottom, add_top, add_left, add_right;
|
||||
|
||||
if (window)
|
||||
{
|
||||
x1 = window->win_x;
|
||||
y1 = window->win_y + 1;
|
||||
x2 = x1 + window->win_width - 1;
|
||||
y2 = y1 + window->win_height - 1;
|
||||
add_left = gui_bar_window_get_size (bar_window->bar, window, GUI_BAR_POSITION_LEFT);
|
||||
add_right = gui_bar_window_get_size (bar_window->bar, window, GUI_BAR_POSITION_RIGHT);
|
||||
add_top = gui_bar_window_get_size (bar_window->bar, window, GUI_BAR_POSITION_TOP);
|
||||
add_bottom = gui_bar_window_get_size (bar_window->bar, window, GUI_BAR_POSITION_BOTTOM);
|
||||
}
|
||||
else
|
||||
{
|
||||
x1 = 0;
|
||||
y1 = 0;
|
||||
x2 = gui_window_get_width () - 1;
|
||||
y2 = gui_window_get_height () - 1;
|
||||
add_bottom = gui_bar_root_get_size (bar_window->bar, GUI_BAR_POSITION_BOTTOM);
|
||||
add_top = gui_bar_root_get_size (bar_window->bar, GUI_BAR_POSITION_TOP);
|
||||
add_left = gui_bar_root_get_size (bar_window->bar, GUI_BAR_POSITION_LEFT);
|
||||
add_right = gui_bar_root_get_size (bar_window->bar, GUI_BAR_POSITION_RIGHT);
|
||||
}
|
||||
|
||||
switch (bar_window->bar->position)
|
||||
{
|
||||
case GUI_BAR_POSITION_BOTTOM:
|
||||
bar_window->x = x1 + add_left;
|
||||
bar_window->y = y2 - add_bottom - bar_window->bar->size + 1;
|
||||
bar_window->width = x2 - add_right - x1 + 1;
|
||||
bar_window->height = bar_window->bar->size - add_top - add_bottom;
|
||||
break;
|
||||
case GUI_BAR_POSITION_TOP:
|
||||
bar_window->x = x1 + add_left;
|
||||
bar_window->y = y1 + add_top;
|
||||
bar_window->width = x2 - x1 + 1;
|
||||
bar_window->height = bar_window->bar->size - add_left - add_right;
|
||||
break;
|
||||
case GUI_BAR_POSITION_LEFT:
|
||||
bar_window->x = x1 + add_left;
|
||||
bar_window->y = y1 + add_top;
|
||||
bar_window->width = bar_window->bar->size - add_left - add_right;
|
||||
bar_window->height = y2 - add_top - add_bottom - y1 + 1;
|
||||
break;
|
||||
case GUI_BAR_POSITION_RIGHT:
|
||||
bar_window->x = x2 - add_right - bar_window->bar->size + 1;
|
||||
bar_window->y = y1 + add_top;
|
||||
bar_window->width = bar_window->bar->size - add_left - add_right;
|
||||
bar_window->height = y2 - y1 + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_window_new: create a new "window bar" for a bar, in screen or a window
|
||||
* if window is not NULL, bar window will be in this window
|
||||
*/
|
||||
|
||||
int
|
||||
gui_bar_window_new (struct t_gui_bar *bar, struct t_gui_window *window)
|
||||
{
|
||||
struct t_gui_bar_window *new_bar_window;
|
||||
|
||||
new_bar_window = (struct t_gui_bar_window *) malloc (sizeof (struct t_gui_bar_window));
|
||||
if (new_bar_window)
|
||||
{
|
||||
new_bar_window->bar = bar;
|
||||
if (window)
|
||||
{
|
||||
bar->bar_window = NULL;
|
||||
new_bar_window->next_bar_window = GUI_CURSES(window)->bar_windows;
|
||||
GUI_CURSES(window)->bar_windows = new_bar_window;
|
||||
}
|
||||
else
|
||||
{
|
||||
bar->bar_window = new_bar_window;
|
||||
new_bar_window->next_bar_window = NULL;
|
||||
}
|
||||
|
||||
gui_bar_window_calculate_pos_size (new_bar_window, window);
|
||||
|
||||
new_bar_window->win_bar = newwin (new_bar_window->height,
|
||||
new_bar_window->width,
|
||||
new_bar_window->y,
|
||||
new_bar_window->x);
|
||||
new_bar_window->win_separator = NULL;
|
||||
if (new_bar_window->bar->separator)
|
||||
{
|
||||
switch (bar->position)
|
||||
{
|
||||
case GUI_BAR_POSITION_BOTTOM:
|
||||
new_bar_window->win_separator = newwin (1,
|
||||
new_bar_window->width,
|
||||
new_bar_window->y - 1,
|
||||
new_bar_window->x);
|
||||
break;
|
||||
case GUI_BAR_POSITION_TOP:
|
||||
new_bar_window->win_separator = newwin (1,
|
||||
new_bar_window->width,
|
||||
new_bar_window->y + new_bar_window->height,
|
||||
new_bar_window->x);
|
||||
break;
|
||||
case GUI_BAR_POSITION_LEFT:
|
||||
new_bar_window->win_separator = newwin (new_bar_window->height,
|
||||
1,
|
||||
new_bar_window->y,
|
||||
new_bar_window->x + new_bar_window->width);
|
||||
break;
|
||||
case GUI_BAR_POSITION_RIGHT:
|
||||
new_bar_window->win_separator = newwin (new_bar_window->height,
|
||||
1,
|
||||
new_bar_window->y,
|
||||
new_bar_window->x - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* failed to create bar window */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_window_print: print text on a bar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_window_print (struct t_gui_bar_window *bar_win, char *text,
|
||||
int *max_width)
|
||||
{
|
||||
int weechat_color;
|
||||
char str_color[3];
|
||||
|
||||
if ((bar_win->bar->position == GUI_BAR_POSITION_LEFT)
|
||||
|| (bar_win->bar->position == GUI_BAR_POSITION_RIGHT))
|
||||
gui_window_set_weechat_color (bar_win->win_bar, GUI_COLOR_CHAT);
|
||||
else
|
||||
gui_window_set_weechat_color (bar_win->win_bar, GUI_COLOR_STATUS);
|
||||
|
||||
while (text && text[0])
|
||||
{
|
||||
if (text[0] == GUI_COLOR_COLOR_CHAR)
|
||||
{
|
||||
text++;
|
||||
if (isdigit (text[0]) && isdigit (text[1]))
|
||||
{
|
||||
str_color[0] = text[0];
|
||||
str_color[1] = text[1];
|
||||
str_color[2] = '\0';
|
||||
text += 2;
|
||||
sscanf (str_color, "%d", &weechat_color);
|
||||
gui_window_set_weechat_color (bar_win->win_bar, weechat_color);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wprintw (bar_win->win_bar, "%c", text[0]);
|
||||
(*max_width)--;
|
||||
text++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_window_draw: draw a bar for a window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_window_draw (struct t_gui_window *window,
|
||||
struct t_gui_bar_window *bar_win)
|
||||
{
|
||||
int i, max_width;
|
||||
char *item_value;
|
||||
struct t_gui_bar_item *ptr_item;
|
||||
|
||||
if ((bar_win->bar->position == GUI_BAR_POSITION_LEFT)
|
||||
|| (bar_win->bar->position == GUI_BAR_POSITION_RIGHT))
|
||||
gui_window_curses_clear (bar_win->win_bar, GUI_COLOR_CHAT);
|
||||
else
|
||||
gui_window_curses_clear (bar_win->win_bar, GUI_COLOR_STATUS);
|
||||
|
||||
max_width = bar_win->width;
|
||||
|
||||
for (i = 0; i < bar_win->bar->items_count; i++)
|
||||
{
|
||||
ptr_item = gui_bar_item_search (bar_win->bar->items_array[i]);
|
||||
if (ptr_item && ptr_item->build_callback)
|
||||
{
|
||||
item_value = (ptr_item->build_callback) (ptr_item->build_callback_data,
|
||||
ptr_item, window,
|
||||
max_width);
|
||||
if (item_value)
|
||||
{
|
||||
if (item_value[0])
|
||||
{
|
||||
gui_bar_window_print (bar_win, item_value, &max_width);
|
||||
if (max_width < 0)
|
||||
max_width = 0;
|
||||
}
|
||||
free (item_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wnoutrefresh (bar_win->win_bar);
|
||||
|
||||
if (bar_win->bar->separator)
|
||||
{
|
||||
switch (bar_win->bar->position)
|
||||
{
|
||||
case GUI_BAR_POSITION_BOTTOM:
|
||||
gui_window_set_weechat_color (bar_win->win_separator,
|
||||
GUI_COLOR_SEPARATOR);
|
||||
mvwhline (bar_win->win_separator, 0, 0, ACS_HLINE,
|
||||
bar_win->width);
|
||||
break;
|
||||
case GUI_BAR_POSITION_TOP:
|
||||
gui_window_set_weechat_color (bar_win->win_separator,
|
||||
GUI_COLOR_SEPARATOR);
|
||||
mvwhline (bar_win->win_separator, 0, 0, ACS_HLINE,
|
||||
bar_win->width);
|
||||
break;
|
||||
case GUI_BAR_POSITION_LEFT:
|
||||
gui_window_set_weechat_color (bar_win->win_separator,
|
||||
GUI_COLOR_SEPARATOR);
|
||||
mvwvline (bar_win->win_separator, 0, 0, ACS_VLINE,
|
||||
bar_win->height);
|
||||
break;
|
||||
case GUI_BAR_POSITION_RIGHT:
|
||||
gui_window_set_weechat_color (bar_win->win_separator,
|
||||
GUI_COLOR_SEPARATOR);
|
||||
mvwvline (bar_win->win_separator, 0, 0, ACS_VLINE,
|
||||
bar_win->height);
|
||||
break;
|
||||
}
|
||||
wnoutrefresh (bar_win->win_separator);
|
||||
}
|
||||
|
||||
refresh ();
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_draw: draw a bar
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_draw (struct t_gui_bar *bar)
|
||||
{
|
||||
struct t_gui_window *ptr_win;
|
||||
struct t_gui_bar_window *ptr_bar_win;
|
||||
|
||||
if (bar->bar_window)
|
||||
{
|
||||
/* root bar */
|
||||
gui_bar_window_draw (NULL, bar->bar_window);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* bar on each window */
|
||||
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
|
||||
{
|
||||
for (ptr_bar_win = GUI_CURSES(ptr_win)->bar_windows; ptr_bar_win;
|
||||
ptr_bar_win = ptr_bar_win->next_bar_window)
|
||||
{
|
||||
if (ptr_bar_win->bar == bar)
|
||||
{
|
||||
gui_bar_window_draw (ptr_win, ptr_bar_win);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_window_free: delete a bar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_window_free (struct t_gui_bar_window *bar_window)
|
||||
{
|
||||
/* delete Curses windows */
|
||||
if (bar_window->win_bar)
|
||||
delwin (bar_window->win_bar);
|
||||
if (bar_window->win_separator)
|
||||
delwin (bar_window->win_separator);
|
||||
|
||||
/* free bar window */
|
||||
free (bar_window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_window_print_log: print bar window infos in log (usually for crash dump)
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_window_print_log (struct t_gui_bar_window *bar_window)
|
||||
{
|
||||
log_printf ("");
|
||||
log_printf (" [window bar (addr:0x%x)]", bar_window);
|
||||
log_printf (" bar . . . . . . . : 0x%x", bar_window->bar);
|
||||
log_printf (" x . . . . . . . . : %d", bar_window->x);
|
||||
log_printf (" y . . . . . . . . : %d", bar_window->y);
|
||||
log_printf (" width . . . . . . : %d", bar_window->width);
|
||||
log_printf (" height. . . . . . : %d", bar_window->height);
|
||||
log_printf (" win_bar . . . . . : 0x%x", bar_window->win_bar);
|
||||
log_printf (" win_separator . . : 0x%x", bar_window->win_separator);
|
||||
}
|
||||
@@ -29,8 +29,10 @@
|
||||
|
||||
#include "../../core/weechat.h"
|
||||
#include "../../core/wee-config.h"
|
||||
#include "../../core/wee-hook.h"
|
||||
#include "../../core/wee-string.h"
|
||||
#include "../../core/wee-utf8.h"
|
||||
#include "../../plugins/plugin.h"
|
||||
#include "../gui-buffer.h"
|
||||
#include "../gui-chat.h"
|
||||
#include "../gui-color.h"
|
||||
@@ -963,7 +965,7 @@ gui_chat_draw (struct t_gui_buffer *buffer, int erase)
|
||||
struct t_gui_line *ptr_line;
|
||||
/*t_irc_dcc *dcc_first, *dcc_selected, *ptr_dcc;*/
|
||||
char format_empty[32];
|
||||
int i, line_pos, count;
|
||||
int i, line_pos, count, old_scroll;
|
||||
/*int j, num_bars;
|
||||
unsigned long pct_complete;
|
||||
char *unit_name[] = { N_("bytes"), N_("KB"), N_("MB"), N_("GB") };
|
||||
@@ -1173,6 +1175,8 @@ gui_chat_draw (struct t_gui_buffer *buffer, int erase)
|
||||
ptr_line = ptr_line->next_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 */
|
||||
@@ -1183,6 +1187,12 @@ gui_chat_draw (struct t_gui_buffer *buffer, int erase)
|
||||
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 == ptr_win->buffer->lines))
|
||||
{
|
||||
ptr_win->start_line = NULL;
|
||||
|
||||
@@ -345,7 +345,7 @@ gui_color_init_weechat ()
|
||||
{
|
||||
int i;
|
||||
|
||||
gui_color[GUI_COLOR_SEPARATOR] = gui_color_build (GUI_COLOR_SEPARATOR, CONFIG_COLOR(config_color_separator), CONFIG_COLOR(config_color_separator));
|
||||
gui_color[GUI_COLOR_SEPARATOR] = gui_color_build (GUI_COLOR_SEPARATOR, CONFIG_COLOR(config_color_separator), CONFIG_COLOR(config_color_chat_bg));
|
||||
|
||||
gui_color[GUI_COLOR_TITLE] = gui_color_build (GUI_COLOR_TITLE, CONFIG_COLOR(config_color_title), CONFIG_COLOR(config_color_title_bg));
|
||||
gui_color[GUI_COLOR_TITLE_MORE] = gui_color_build (GUI_COLOR_TITLE_MORE, CONFIG_COLOR(config_color_title_more), CONFIG_COLOR(config_color_title_bg));
|
||||
@@ -378,8 +378,8 @@ gui_color_init_weechat ()
|
||||
|
||||
gui_color[GUI_COLOR_STATUS] = gui_color_build (GUI_COLOR_STATUS, CONFIG_COLOR(config_color_status), CONFIG_COLOR(config_color_status_bg));
|
||||
gui_color[GUI_COLOR_STATUS_DELIMITERS] = gui_color_build (GUI_COLOR_STATUS_DELIMITERS, CONFIG_COLOR(config_color_status_delimiters), CONFIG_COLOR(config_color_status_bg));
|
||||
gui_color[GUI_COLOR_STATUS_NUMBER] = gui_color_build (GUI_COLOR_STATUS_NAME, CONFIG_COLOR(config_color_status_number), CONFIG_COLOR(config_color_status_bg));
|
||||
gui_color[GUI_COLOR_STATUS_CATEGORY] = gui_color_build (GUI_COLOR_STATUS_NAME, CONFIG_COLOR(config_color_status_category), CONFIG_COLOR(config_color_status_bg));
|
||||
gui_color[GUI_COLOR_STATUS_NUMBER] = gui_color_build (GUI_COLOR_STATUS_NUMBER, CONFIG_COLOR(config_color_status_number), CONFIG_COLOR(config_color_status_bg));
|
||||
gui_color[GUI_COLOR_STATUS_CATEGORY] = gui_color_build (GUI_COLOR_STATUS_CATEGORY, CONFIG_COLOR(config_color_status_category), CONFIG_COLOR(config_color_status_bg));
|
||||
gui_color[GUI_COLOR_STATUS_NAME] = gui_color_build (GUI_COLOR_STATUS_NAME, CONFIG_COLOR(config_color_status_name), CONFIG_COLOR(config_color_status_bg));
|
||||
gui_color[GUI_COLOR_STATUS_DATA_MSG] = gui_color_build (GUI_COLOR_STATUS_DATA_MSG, CONFIG_COLOR(config_color_status_data_msg), CONFIG_COLOR(config_color_status_bg));
|
||||
gui_color[GUI_COLOR_STATUS_DATA_PRIVATE] = gui_color_build (GUI_COLOR_STATUS_DATA_PRIVATE, CONFIG_COLOR(config_color_status_data_private), CONFIG_COLOR(config_color_status_bg));
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "../../core/wee-util.h"
|
||||
#include "../../plugins/plugin.h"
|
||||
#include "../gui-main.h"
|
||||
#include "../gui-bar-item.h"
|
||||
#include "../gui-buffer.h"
|
||||
#include "../gui-chat.h"
|
||||
#include "../gui-color.h"
|
||||
@@ -97,7 +98,10 @@ gui_main_init ()
|
||||
|
||||
/* get time length */
|
||||
gui_chat_time_length = util_get_time_length (CONFIG_STRING(config_look_buffer_time_format));
|
||||
|
||||
|
||||
/* init bar items */
|
||||
gui_bar_item_init ();
|
||||
|
||||
/* create new window/buffer */
|
||||
if (gui_window_new (NULL, 0, 0, COLS, LINES, 100, 100))
|
||||
{
|
||||
@@ -243,6 +247,9 @@ gui_main_loop ()
|
||||
void
|
||||
gui_main_end ()
|
||||
{
|
||||
/* remove bar items */
|
||||
gui_bar_item_end ();
|
||||
|
||||
/* free clipboard buffer */
|
||||
if (gui_input_clipboard)
|
||||
free (gui_input_clipboard);
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "../../core/wee-log.h"
|
||||
#include "../../core/wee-string.h"
|
||||
#include "../gui-window.h"
|
||||
#include "../gui-bar.h"
|
||||
#include "../gui-buffer.h"
|
||||
#include "../gui-chat.h"
|
||||
#include "../gui-color.h"
|
||||
@@ -82,6 +83,7 @@ gui_window_objects_init (struct t_gui_window *window)
|
||||
GUI_CURSES(window)->win_infobar = NULL;
|
||||
GUI_CURSES(window)->win_input = NULL;
|
||||
GUI_CURSES(window)->win_separator = NULL;
|
||||
GUI_CURSES(window)->bar_windows = NULL;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@@ -192,10 +194,16 @@ int
|
||||
gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
|
||||
{
|
||||
int max_length, max_height, lines, width_used;
|
||||
int add_top, add_bottom, add_left, add_right;
|
||||
|
||||
if (!gui_ok)
|
||||
return 0;
|
||||
|
||||
add_bottom = gui_bar_window_get_size (NULL, window, GUI_BAR_POSITION_BOTTOM);
|
||||
add_top = gui_bar_window_get_size (NULL, window, GUI_BAR_POSITION_TOP);
|
||||
add_left = gui_bar_window_get_size (NULL, window, GUI_BAR_POSITION_LEFT);
|
||||
add_right = gui_bar_window_get_size (NULL, window, GUI_BAR_POSITION_RIGHT);
|
||||
|
||||
/* init chat & nicklist settings */
|
||||
if (window->buffer->nicklist)
|
||||
{
|
||||
@@ -219,7 +227,8 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
|
||||
}
|
||||
else
|
||||
{
|
||||
width_used = window->win_width - (window->win_width % (max_length + 2));
|
||||
width_used = (window->win_width - add_left - add_right)
|
||||
- ((window->win_width - add_left - add_right) % (max_length + 2));
|
||||
if (((max_length + 2) * window->buffer->nicklist_visible_count) % width_used == 0)
|
||||
lines = ((max_length + 2) * window->buffer->nicklist_visible_count) / width_used;
|
||||
else
|
||||
@@ -231,8 +240,8 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
|
||||
&& (lines < CONFIG_INTEGER(config_look_nicklist_min_size)))
|
||||
lines = CONFIG_INTEGER(config_look_nicklist_min_size);
|
||||
max_height = (CONFIG_BOOLEAN(config_look_infobar)) ?
|
||||
window->win_height - 3 - 4 :
|
||||
window->win_height - 2 - 4;
|
||||
window->win_height - add_top - add_bottom - 3 - 4 :
|
||||
window->win_height - add_top - add_bottom - 2 - 4;
|
||||
if (lines > max_height)
|
||||
lines = max_height;
|
||||
if (!force_calculate
|
||||
@@ -244,85 +253,84 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
|
||||
switch (CONFIG_INTEGER(config_look_nicklist_position))
|
||||
{
|
||||
case CONFIG_LOOK_NICKLIST_LEFT:
|
||||
window->win_chat_x = window->win_x + max_length +
|
||||
window->win_chat_x = window->win_x + add_left + max_length +
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
window->win_chat_y = window->win_y + 1;
|
||||
window->win_chat_y = window->win_y + add_top + 1;
|
||||
window->win_chat_width = window->win_width - max_length -
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
window->win_nick_x = window->win_x + 0;
|
||||
window->win_nick_y = window->win_y + 1;
|
||||
window->win_nick_x = window->win_x + add_left + 0;
|
||||
window->win_nick_y = window->win_y + add_top + 1;
|
||||
window->win_nick_width = max_length +
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
if (CONFIG_BOOLEAN(config_look_infobar))
|
||||
{
|
||||
window->win_chat_height = window->win_height - 4;
|
||||
window->win_nick_height = window->win_height - 4;
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 4;
|
||||
window->win_nick_height = window->win_height - add_top - add_bottom - 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->win_chat_height = window->win_height - 3;
|
||||
window->win_nick_height = window->win_height - 3;
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 3;
|
||||
window->win_nick_height = window->win_height - add_top - add_bottom - 3;
|
||||
}
|
||||
window->win_nick_num_max = window->win_nick_height;
|
||||
break;
|
||||
case CONFIG_LOOK_NICKLIST_RIGHT:
|
||||
window->win_chat_x = window->win_x;
|
||||
window->win_chat_y = window->win_y + 1;
|
||||
window->win_chat_width = window->win_width - max_length -
|
||||
window->win_chat_x = window->win_x + add_left;
|
||||
window->win_chat_y = window->win_y + add_top + 1;
|
||||
window->win_chat_width = window->win_width - add_left - add_right - max_length -
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
window->win_nick_x = window->win_x + window->win_width -
|
||||
max_length -
|
||||
window->win_nick_x = window->win_x + window->win_width - add_right - max_length -
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
window->win_nick_y = window->win_y + 1;
|
||||
window->win_nick_y = window->win_y + add_top + 1;
|
||||
window->win_nick_width = max_length +
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
if (CONFIG_BOOLEAN(config_look_infobar))
|
||||
{
|
||||
window->win_chat_height = window->win_height - 4;
|
||||
window->win_nick_height = window->win_height - 4;
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 4;
|
||||
window->win_nick_height = window->win_height - add_top - add_bottom - 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->win_chat_height = window->win_height - 3;
|
||||
window->win_nick_height = window->win_height - 3;
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 3;
|
||||
window->win_nick_height = window->win_height - add_top - add_bottom - 3;
|
||||
}
|
||||
window->win_nick_num_max = window->win_nick_height;
|
||||
break;
|
||||
case CONFIG_LOOK_NICKLIST_TOP:
|
||||
window->win_chat_x = window->win_x;
|
||||
window->win_chat_y = window->win_y + 1 + lines +
|
||||
window->win_chat_x = window->win_x + add_left;
|
||||
window->win_chat_y = window->win_y + add_top + 1 + lines +
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
window->win_chat_width = window->win_width;
|
||||
window->win_chat_width = window->win_width - add_left - add_right;
|
||||
if (CONFIG_BOOLEAN(config_look_infobar))
|
||||
window->win_chat_height = window->win_height - 3 - lines -
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 3 - lines -
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0) - 1;
|
||||
else
|
||||
window->win_chat_height = window->win_height - 3 - lines -
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 3 - lines -
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
window->win_nick_x = window->win_x;
|
||||
window->win_nick_y = window->win_y + 1;
|
||||
window->win_nick_width = window->win_width;
|
||||
window->win_nick_x = window->win_x + add_left;
|
||||
window->win_nick_y = window->win_y + add_top + 1;
|
||||
window->win_nick_width = window->win_width - add_left - add_right;
|
||||
window->win_nick_height = lines +
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
window->win_nick_num_max = lines * (window->win_nick_width / (max_length + 1));
|
||||
break;
|
||||
case CONFIG_LOOK_NICKLIST_BOTTOM:
|
||||
window->win_chat_x = window->win_x;
|
||||
window->win_chat_y = window->win_y + 1;
|
||||
window->win_chat_width = window->win_width;
|
||||
window->win_chat_x = window->win_x + add_left;
|
||||
window->win_chat_y = window->win_y + add_top + 1;
|
||||
window->win_chat_width = window->win_width - add_left - add_right;
|
||||
if (CONFIG_BOOLEAN(config_look_infobar))
|
||||
window->win_chat_height = window->win_height - 3 - lines -
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 3 - lines -
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0) - 1;
|
||||
else
|
||||
window->win_chat_height = window->win_height - 3 - lines -
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 3 - lines -
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
window->win_nick_x = window->win_x;
|
||||
if (CONFIG_BOOLEAN(config_look_infobar))
|
||||
window->win_nick_y = window->win_y + window->win_height -
|
||||
window->win_nick_y = window->win_y + window->win_height - add_bottom -
|
||||
2 - lines -
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0) - 1;
|
||||
else
|
||||
window->win_nick_y = window->win_y + window->win_height -
|
||||
window->win_nick_y = window->win_y + window->win_height - add_bottom -
|
||||
2 - lines -
|
||||
((CONFIG_BOOLEAN(config_look_nicklist_separator)) ? 1 : 0);
|
||||
window->win_nick_width = window->win_width;
|
||||
@@ -332,20 +340,20 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
|
||||
break;
|
||||
}
|
||||
|
||||
window->win_chat_cursor_x = window->win_x;
|
||||
window->win_chat_cursor_y = window->win_y;
|
||||
window->win_chat_cursor_x = window->win_x + add_left;
|
||||
window->win_chat_cursor_y = window->win_y + add_top;
|
||||
}
|
||||
else
|
||||
{
|
||||
window->win_chat_x = window->win_x;
|
||||
window->win_chat_y = window->win_y + 1;
|
||||
window->win_chat_width = window->win_width;
|
||||
window->win_chat_x = window->win_x + add_left;
|
||||
window->win_chat_y = window->win_y + add_top + 1;
|
||||
window->win_chat_width = window->win_width - add_left - add_right;
|
||||
if (CONFIG_BOOLEAN(config_look_infobar))
|
||||
window->win_chat_height = window->win_height - 4;
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 4;
|
||||
else
|
||||
window->win_chat_height = window->win_height - 3;
|
||||
window->win_chat_cursor_x = window->win_x;
|
||||
window->win_chat_cursor_y = window->win_y;
|
||||
window->win_chat_height = window->win_height - add_top - add_bottom - 3;
|
||||
window->win_chat_cursor_x = window->win_x + add_left;
|
||||
window->win_chat_cursor_y = window->win_y + add_top;
|
||||
window->win_nick_x = -1;
|
||||
window->win_nick_y = -1;
|
||||
window->win_nick_width = -1;
|
||||
@@ -354,26 +362,26 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
|
||||
}
|
||||
|
||||
/* title window */
|
||||
window->win_title_x = window->win_x;
|
||||
window->win_title_y = window->win_y;
|
||||
window->win_title_width = window->win_width;
|
||||
window->win_title_x = window->win_x + add_left;
|
||||
window->win_title_y = window->win_y + add_top;
|
||||
window->win_title_width = window->win_width - add_left - add_right;
|
||||
window->win_title_height = 1;
|
||||
|
||||
/* status window */
|
||||
window->win_status_x = window->win_x;
|
||||
window->win_status_x = window->win_x + add_left;
|
||||
if (CONFIG_BOOLEAN(config_look_infobar))
|
||||
window->win_status_y = window->win_y + window->win_height - 3;
|
||||
window->win_status_y = window->win_y + window->win_height - add_bottom - 3;
|
||||
else
|
||||
window->win_status_y = window->win_y + window->win_height - 2;
|
||||
window->win_status_width = window->win_width;
|
||||
window->win_status_y = window->win_y + window->win_height - add_bottom - 2;
|
||||
window->win_status_width = window->win_width - add_left - add_right;
|
||||
window->win_status_height = 1;
|
||||
|
||||
/* infobar window */
|
||||
if (CONFIG_BOOLEAN(config_look_infobar))
|
||||
{
|
||||
window->win_infobar_x = window->win_x;
|
||||
window->win_infobar_y = window->win_y + window->win_height - 2;
|
||||
window->win_infobar_width = window->win_width;
|
||||
window->win_infobar_x = window->win_x + add_left;
|
||||
window->win_infobar_y = window->win_y + window->win_height - add_bottom - 2;
|
||||
window->win_infobar_width = window->win_width - add_left - add_right;
|
||||
window->win_infobar_height = 1;
|
||||
}
|
||||
else
|
||||
@@ -385,9 +393,9 @@ gui_window_calculate_pos_size (struct t_gui_window *window, int force_calculate)
|
||||
}
|
||||
|
||||
/* input window */
|
||||
window->win_input_x = window->win_x;
|
||||
window->win_input_y = window->win_y + window->win_height - 1;
|
||||
window->win_input_width = window->win_width;
|
||||
window->win_input_x = window->win_x + add_left;
|
||||
window->win_input_y = window->win_y + window->win_height - add_bottom - 1;
|
||||
window->win_input_width = window->win_width - add_left - add_right;
|
||||
window->win_input_height = 1;
|
||||
|
||||
return 1;
|
||||
@@ -403,7 +411,7 @@ gui_window_draw_separator (struct t_gui_window *window)
|
||||
if (GUI_CURSES(window)->win_separator)
|
||||
delwin (GUI_CURSES(window)->win_separator);
|
||||
|
||||
if (window->win_x > 0)
|
||||
if (window->win_x > gui_bar_root_get_size (NULL, GUI_BAR_POSITION_LEFT))
|
||||
{
|
||||
GUI_CURSES(window)->win_separator = newwin (window->win_height,
|
||||
1,
|
||||
@@ -411,8 +419,8 @@ gui_window_draw_separator (struct t_gui_window *window)
|
||||
window->win_x - 1);
|
||||
gui_window_set_weechat_color (GUI_CURSES(window)->win_separator,
|
||||
GUI_COLOR_SEPARATOR);
|
||||
wborder (GUI_CURSES(window)->win_separator,
|
||||
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
|
||||
mvwvline (GUI_CURSES(window)->win_separator, 0, 0, ACS_VLINE,
|
||||
window->win_height);
|
||||
wnoutrefresh (GUI_CURSES(window)->win_separator);
|
||||
refresh ();
|
||||
}
|
||||
@@ -928,15 +936,32 @@ gui_window_refresh_windows ()
|
||||
{
|
||||
struct t_gui_window *ptr_win, *old_current_window;
|
||||
struct t_gui_buffer *ptr_buffer;
|
||||
struct t_gui_bar *ptr_bar;
|
||||
int add_bottom, add_top, add_left, add_right;
|
||||
|
||||
if (!gui_ok)
|
||||
return;
|
||||
|
||||
old_current_window = gui_current_window;
|
||||
|
||||
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
|
||||
{
|
||||
if (ptr_bar->type == GUI_BAR_TYPE_ROOT)
|
||||
{
|
||||
gui_bar_window_calculate_pos_size (ptr_bar->bar_window, NULL);
|
||||
gui_bar_draw (ptr_bar);
|
||||
}
|
||||
}
|
||||
|
||||
if (gui_window_auto_resize (gui_windows_tree, 0, 0,
|
||||
gui_window_get_width (),
|
||||
gui_window_get_height (), 0) < 0)
|
||||
add_bottom = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_BOTTOM);
|
||||
add_top = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_TOP);
|
||||
add_left = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_LEFT);
|
||||
add_right = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_RIGHT);
|
||||
|
||||
if (gui_window_auto_resize (gui_windows_tree, add_left, add_top,
|
||||
gui_window_get_width () - add_left - add_right,
|
||||
gui_window_get_height () - add_top - add_bottom,
|
||||
0) < 0)
|
||||
gui_window_merge_all (gui_current_window);
|
||||
|
||||
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
|
||||
@@ -1048,7 +1073,7 @@ void
|
||||
gui_window_resize (struct t_gui_window *window, int pourcentage)
|
||||
{
|
||||
struct t_gui_window_tree *parent;
|
||||
int old_split_pct;
|
||||
int old_split_pct, add_bottom, add_top, add_left, add_right;
|
||||
|
||||
if (!gui_ok)
|
||||
return;
|
||||
@@ -1062,9 +1087,16 @@ gui_window_resize (struct t_gui_window *window, int pourcentage)
|
||||
parent->split_pct = pourcentage;
|
||||
else
|
||||
parent->split_pct = 100 - pourcentage;
|
||||
if (gui_window_auto_resize (gui_windows_tree, 0, 0,
|
||||
gui_window_get_width (),
|
||||
gui_window_get_height (), 1) < 0)
|
||||
|
||||
add_bottom = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_BOTTOM);
|
||||
add_top = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_TOP);
|
||||
add_left = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_LEFT);
|
||||
add_right = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_RIGHT);
|
||||
|
||||
if (gui_window_auto_resize (gui_windows_tree, add_left, add_top,
|
||||
gui_window_get_width () - add_left - add_right,
|
||||
gui_window_get_height () - add_top - add_bottom,
|
||||
1) < 0)
|
||||
parent->split_pct = old_split_pct;
|
||||
else
|
||||
gui_window_refresh_windows ();
|
||||
@@ -1126,7 +1158,7 @@ gui_window_merge (struct t_gui_window *window)
|
||||
void
|
||||
gui_window_merge_all (struct t_gui_window *window)
|
||||
{
|
||||
int num_deleted;
|
||||
int num_deleted, add_bottom, add_top, add_left, add_right;
|
||||
|
||||
if (!gui_ok)
|
||||
return;
|
||||
@@ -1143,12 +1175,19 @@ gui_window_merge_all (struct t_gui_window *window)
|
||||
gui_window_tree_free (&gui_windows_tree);
|
||||
gui_window_tree_init (window);
|
||||
window->ptr_tree = gui_windows_tree;
|
||||
window->win_x = 0;
|
||||
window->win_y = 0;
|
||||
window->win_width = gui_window_get_width ();
|
||||
window->win_height = gui_window_get_height ();
|
||||
|
||||
add_bottom = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_BOTTOM);
|
||||
add_top = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_TOP);
|
||||
add_left = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_LEFT);
|
||||
add_right = gui_bar_root_get_size (NULL, GUI_BAR_POSITION_RIGHT);
|
||||
window->win_x = add_left;
|
||||
window->win_y = add_top;
|
||||
window->win_width = gui_window_get_width () - add_left - add_right;
|
||||
window->win_height = gui_window_get_height () - add_top - add_bottom;
|
||||
|
||||
window->win_width_pct = 100;
|
||||
window->win_height_pct = 100;
|
||||
|
||||
gui_current_window = window;
|
||||
gui_window_switch_to_buffer (window, window->buffer);
|
||||
gui_window_redraw_buffer (window->buffer);
|
||||
@@ -1450,6 +1489,9 @@ gui_window_title_reset ()
|
||||
void
|
||||
gui_window_objects_print_log (struct t_gui_window *window)
|
||||
{
|
||||
struct t_gui_bar_window *ptr_bar_win;
|
||||
|
||||
log_printf ("");
|
||||
log_printf (" win_title . . . . . : 0x%x", GUI_CURSES(window)->win_title);
|
||||
log_printf (" win_chat. . . . . . : 0x%x", GUI_CURSES(window)->win_chat);
|
||||
log_printf (" win_nick. . . . . . : 0x%x", GUI_CURSES(window)->win_nick);
|
||||
@@ -1457,4 +1499,10 @@ gui_window_objects_print_log (struct t_gui_window *window)
|
||||
log_printf (" win_infobar . . . . : 0x%x", GUI_CURSES(window)->win_infobar);
|
||||
log_printf (" win_input . . . . . : 0x%x", GUI_CURSES(window)->win_input);
|
||||
log_printf (" win_separator . . . : 0x%x", GUI_CURSES(window)->win_separator);
|
||||
|
||||
for (ptr_bar_win = GUI_CURSES(window)->bar_windows; ptr_bar_win;
|
||||
ptr_bar_win = ptr_bar_win->next_bar_window)
|
||||
{
|
||||
gui_bar_window_print_log (ptr_bar_win);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,18 @@
|
||||
|
||||
#define GUI_CURSES(window) ((t_gui_curses_objects *)(window->gui_objects))
|
||||
|
||||
struct t_gui_bar_window
|
||||
{
|
||||
struct t_gui_bar *bar; /* pointer to bar */
|
||||
int x, y; /* position of window */
|
||||
int width, height; /* window size */
|
||||
WINDOW *win_bar; /* bar Curses window */
|
||||
WINDOW *win_separator; /* separator (optional) */
|
||||
struct t_gui_bar_window *next_bar_window;
|
||||
/* link to next bar window */
|
||||
/* (only used if bar is in windows) */
|
||||
};
|
||||
|
||||
typedef struct t_gui_curses_objects t_gui_curses_objects;
|
||||
|
||||
struct t_gui_curses_objects
|
||||
@@ -44,6 +56,7 @@ struct t_gui_curses_objects
|
||||
WINDOW *win_infobar; /* info bar window */
|
||||
WINDOW *win_input; /* input window */
|
||||
WINDOW *win_separator; /* separation between 2 splited (V) win */
|
||||
struct t_gui_bar_window *bar_windows; /* bar windows */
|
||||
};
|
||||
|
||||
extern struct t_gui_color gui_weechat_colors[];
|
||||
@@ -52,6 +65,10 @@ extern struct t_gui_color gui_weechat_colors[];
|
||||
extern int gui_color_get_pair (int num_color);
|
||||
extern void gui_color_init ();
|
||||
|
||||
/* bar functions */
|
||||
extern void gui_bar_window_calculate_pos_size (struct t_gui_bar_window *bar_window,
|
||||
struct t_gui_window *window);
|
||||
|
||||
/* chat functions */
|
||||
extern void gui_chat_calculate_line_diff (struct t_gui_window *window,
|
||||
struct t_gui_line **line,
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
SET(WEECHAT_GTK_SRC gui-gtk-chat.c gui-gtk-color.c gui-gtk-infobar.c
|
||||
gui-gtk-input.c gui-gtk-keyboard.c gui-gtk-main.c gui-gtk-nicklist.c
|
||||
gui-gtk-status.c gui-gtk-window.c gui-gtk.h)
|
||||
SET(WEECHAT_GTK_SRC gui-gtk-bar.c gui-gtk-chat.c gui-gtk-color.c
|
||||
gui-gtk-infobar.c gui-gtk-input.c gui-gtk-keyboard.c gui-gtk-main.c
|
||||
gui-gtk-nicklist.c gui-gtk-status.c gui-gtk-window.c gui-gtk.h)
|
||||
|
||||
SET(EXECUTABLE weechat-gtk)
|
||||
|
||||
|
||||
@@ -37,7 +37,8 @@ weechat_gtk_LDADD = ../../core/weechat.o \
|
||||
$(PLUGINS_LFLAGS) \
|
||||
$(GTK_LFLAGS)
|
||||
|
||||
weechat_gtk_SOURCES = gui-gtk-chat.c \
|
||||
weechat_gtk_SOURCES = gui-gtk-bar.c \
|
||||
gui-gtk-chat.c \
|
||||
gui-gtk-color.c \
|
||||
gui-gtk-infobar.c \
|
||||
gui-gtk-input.c \
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2008 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* gui-gtk-bar.c: bar functions for Gtk GUI */
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "../../core/weechat.h"
|
||||
#include "../../core/wee-log.h"
|
||||
#include "../gui-bar.h"
|
||||
#include "../gui-chat.h"
|
||||
#include "../gui-color.h"
|
||||
#include "../gui-window.h"
|
||||
#include "gui-gtk.h"
|
||||
|
||||
|
||||
/*
|
||||
* gui_bar_windows_get_size: get total bar size (window bars) for a position
|
||||
* bar is optional, if not NULL, size is computed
|
||||
* from bar 1 to bar # - 1
|
||||
*/
|
||||
|
||||
int
|
||||
gui_bar_window_get_size (struct t_gui_bar *bar, struct t_gui_window *window,
|
||||
int position)
|
||||
{
|
||||
(void) bar;
|
||||
(void) window;
|
||||
(void) position;
|
||||
|
||||
/* TODO: write this function for Gtk */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_window_new: create a new "window bar" for a bar, in screen or a window
|
||||
* if window is not NULL, bar window will be in this window
|
||||
*/
|
||||
|
||||
int
|
||||
gui_bar_window_new (struct t_gui_bar *bar, struct t_gui_window *window)
|
||||
{
|
||||
(void) bar;
|
||||
(void) window;
|
||||
|
||||
/* TODO: write this function for Gtk */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_draw: draw a bar
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_draw (struct t_gui_bar *bar)
|
||||
{
|
||||
(void) bar;
|
||||
|
||||
/* TODO: write this function for Gtk */
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_window_free: delete an bar window
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_window_free (struct t_gui_bar_window *bar_window)
|
||||
{
|
||||
/* TODO: complete this function for Gtk */
|
||||
|
||||
/* free bar window */
|
||||
free (bar_window);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_window_print_log: print bar window infos in log (usually for crash dump)
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_window_print_log (struct t_gui_bar_window *bar_window)
|
||||
{
|
||||
log_printf ("");
|
||||
log_printf (" [window bar (addr:0x%x)]", bar_window);
|
||||
log_printf (" bar . . . . . . . : 0x%x", bar_window->bar);
|
||||
log_printf (" x . . . . . . . . : %d", bar_window->x);
|
||||
log_printf (" y . . . . . . . . : %d", bar_window->y);
|
||||
log_printf (" width . . . . . . : %d", bar_window->width);
|
||||
log_printf (" height. . . . . . : %d", bar_window->height);
|
||||
}
|
||||
@@ -76,6 +76,7 @@ gui_window_objects_init (struct t_gui_window *window)
|
||||
GUI_GTK(window)->texttag_chat = NULL;
|
||||
GUI_GTK(window)->textview_nicklist = NULL;
|
||||
GUI_GTK(window)->textbuffer_nicklist = NULL;
|
||||
GUI_GTK(window)->bar_windows = NULL;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
@@ -919,9 +920,23 @@ gui_window_title_reset ()
|
||||
void
|
||||
gui_window_objects_print_log (struct t_gui_window *window)
|
||||
{
|
||||
struct t_gui_bar_window *ptr_bar_win;
|
||||
|
||||
log_printf (" textview_chat . . . : 0x%x", GUI_GTK(window)->textview_chat);
|
||||
log_printf (" textbuffer_chat . . : 0x%x", GUI_GTK(window)->textbuffer_chat);
|
||||
log_printf (" texttag_chat. . . . : 0x%x", GUI_GTK(window)->texttag_chat);
|
||||
log_printf (" textview_nicklist . : 0x%x", GUI_GTK(window)->textview_nicklist);
|
||||
log_printf (" textbuffer_nicklist : 0x%x", GUI_GTK(window)->textbuffer_nicklist);
|
||||
|
||||
for (ptr_bar_win = GUI_GTK(window)->bar_windows; ptr_bar_win;
|
||||
ptr_bar_win = ptr_bar_win->next_bar_window)
|
||||
{
|
||||
log_printf ("");
|
||||
log_printf (" [window bar (addr:0x%x)]", ptr_bar_win);
|
||||
log_printf (" bar . . . . . . . : 0x%x", ptr_bar_win->bar);
|
||||
log_printf (" x . . . . . . . . : %d", ptr_bar_win->x);
|
||||
log_printf (" y . . . . . . . . : %d", ptr_bar_win->y);
|
||||
log_printf (" width . . . . . . : %d", ptr_bar_win->width);
|
||||
log_printf (" height. . . . . . : %d", ptr_bar_win->height);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,16 @@ struct t_gui_line;
|
||||
|
||||
#define GUI_GTK(window) ((t_gui_gtk_objects *)(window->gui_objects))
|
||||
|
||||
struct t_gui_bar_window
|
||||
{
|
||||
struct t_gui_bar *bar; /* pointer to bar */
|
||||
int x, y; /* position of window */
|
||||
int width, height; /* window size */
|
||||
struct t_gui_bar_window *next_bar_window;
|
||||
/* link to next bar window */
|
||||
/* (only used if bar is in windows) */
|
||||
};
|
||||
|
||||
typedef struct t_gui_gtk_objects t_gui_gtk_objects;
|
||||
|
||||
struct t_gui_gtk_objects
|
||||
@@ -63,6 +73,7 @@ struct t_gui_gtk_objects
|
||||
GtkTextTag *texttag_chat; /* texttag widget for chat */
|
||||
GtkWidget *textview_nicklist; /* textview widget for nicklist */
|
||||
GtkTextBuffer *textbuffer_nicklist; /* textbuffer widget for nicklist */
|
||||
struct t_gui_bar_window *bar_windows; /* bar windows */
|
||||
};
|
||||
|
||||
//extern t_gui_color gui_weechat_colors[];
|
||||
|
||||
@@ -0,0 +1,592 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2008 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* gui-bar-item.c: bar item functions, used by all GUI */
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../core/weechat.h"
|
||||
#include "../core/wee-config.h"
|
||||
#include "../core/wee-hook.h"
|
||||
#include "../core/wee-log.h"
|
||||
#include "../core/wee-string.h"
|
||||
#include "../plugins/plugin.h"
|
||||
#include "gui-bar-item.h"
|
||||
#include "gui-bar.h"
|
||||
#include "gui-buffer.h"
|
||||
#include "gui-color.h"
|
||||
#include "gui-hotlist.h"
|
||||
#include "gui-window.h"
|
||||
|
||||
|
||||
struct t_gui_bar_item *gui_bar_items = NULL; /* first bar item */
|
||||
struct t_gui_bar_item *last_gui_bar_item = NULL; /* last bar item */
|
||||
char *gui_bar_item_names[GUI_BAR_NUM_ITEMS] =
|
||||
{ "buffer_count", "buffer_plugin", "buffer_name", "nicklist_count", "scroll",
|
||||
"hotlist"
|
||||
};
|
||||
struct t_hook *gui_bar_item_hook1 = NULL;
|
||||
struct t_hook *gui_bar_item_hook2 = NULL;
|
||||
struct t_hook *gui_bar_item_hook3 = NULL;
|
||||
struct t_hook *gui_bar_item_hook4 = NULL;
|
||||
struct t_hook *gui_bar_item_hook5 = NULL;
|
||||
struct t_hook *gui_bar_item_hook6 = NULL;
|
||||
struct t_hook *gui_bar_item_hook7 = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* gui_bar_item_search: search a bar item
|
||||
*/
|
||||
|
||||
struct t_gui_bar_item *
|
||||
gui_bar_item_search (char *name)
|
||||
{
|
||||
struct t_gui_bar_item *ptr_item;
|
||||
|
||||
if (!name || !name[0])
|
||||
return NULL;
|
||||
|
||||
for (ptr_item = gui_bar_items; ptr_item; ptr_item = ptr_item->next_item)
|
||||
{
|
||||
if (strcmp (ptr_item->name, name) == 0)
|
||||
return ptr_item;
|
||||
}
|
||||
|
||||
/* bar item not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_search_with_plugin: search a bar item for a plugin
|
||||
*/
|
||||
|
||||
struct t_gui_bar_item *
|
||||
gui_bar_item_search_with_plugin (struct t_weechat_plugin *plugin, char *name)
|
||||
{
|
||||
struct t_gui_bar_item *ptr_item;
|
||||
|
||||
if (!name || !name[0])
|
||||
return NULL;
|
||||
|
||||
for (ptr_item = gui_bar_items; ptr_item; ptr_item = ptr_item->next_item)
|
||||
{
|
||||
if ((ptr_item->plugin == plugin)
|
||||
&& (strcmp (ptr_item->name, name) == 0))
|
||||
return ptr_item;
|
||||
}
|
||||
|
||||
/* bar item not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_new: create a new bar item
|
||||
*/
|
||||
|
||||
struct t_gui_bar_item *
|
||||
gui_bar_item_new (struct t_weechat_plugin *plugin, char *name,
|
||||
char *(*build_callback)(void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width),
|
||||
void *build_callback_data)
|
||||
{
|
||||
struct t_gui_bar_item *new_bar_item;
|
||||
|
||||
if (!name || !name[0])
|
||||
return NULL;
|
||||
|
||||
/* it's not possible to create 2 bar items with same name for same plugin*/
|
||||
if (gui_bar_item_search_with_plugin (plugin, name))
|
||||
return NULL;
|
||||
|
||||
/* create bar item */
|
||||
new_bar_item = (struct t_gui_bar_item *) malloc (sizeof (struct t_gui_bar_item));
|
||||
if (new_bar_item)
|
||||
{
|
||||
new_bar_item->plugin = plugin;
|
||||
new_bar_item->name = strdup (name);
|
||||
new_bar_item->build_callback = build_callback;
|
||||
new_bar_item->build_callback_data = build_callback_data;
|
||||
|
||||
/* add bar item to bar items queue */
|
||||
new_bar_item->prev_item = last_gui_bar_item;
|
||||
if (gui_bar_items)
|
||||
last_gui_bar_item->next_item = new_bar_item;
|
||||
else
|
||||
gui_bar_items = new_bar_item;
|
||||
last_gui_bar_item = new_bar_item;
|
||||
new_bar_item->next_item = NULL;
|
||||
|
||||
return new_bar_item;
|
||||
}
|
||||
|
||||
/* failed to create bar item */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_contains_item: return 1 if a bar contains item, O otherwise
|
||||
*/
|
||||
|
||||
int
|
||||
gui_bar_contains_item (struct t_gui_bar *bar, char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!bar || !name || !name[0])
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < bar->items_count; i++)
|
||||
{
|
||||
if (strcmp (bar->items_array[i], name) == 0)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* item is not in bar */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_update: update an item on all bars displayed on screen
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_item_update (char *name)
|
||||
{
|
||||
struct t_gui_bar *ptr_bar;
|
||||
|
||||
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
|
||||
{
|
||||
if (gui_bar_contains_item (ptr_bar, name))
|
||||
gui_bar_draw (ptr_bar);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_free: delete a bar item
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_item_free (struct t_gui_bar_item *item)
|
||||
{
|
||||
/* remove bar item from bar items list */
|
||||
if (item->prev_item)
|
||||
item->prev_item->next_item = item->next_item;
|
||||
if (item->next_item)
|
||||
item->next_item->prev_item = item->prev_item;
|
||||
if (gui_bar_items == item)
|
||||
gui_bar_items = item->next_item;
|
||||
if (last_gui_bar_item == item)
|
||||
last_gui_bar_item = item->prev_item;
|
||||
|
||||
/* free data */
|
||||
if (item->name)
|
||||
free (item->name);
|
||||
|
||||
free (item);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_free_all: delete all bar items
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_item_free_all ()
|
||||
{
|
||||
while (gui_bar_items)
|
||||
{
|
||||
gui_bar_item_free (gui_bar_items);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_free_all_plugin: delete all bar items for a plugin
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_item_free_all_plugin (struct t_weechat_plugin *plugin)
|
||||
{
|
||||
struct t_gui_bar_item *ptr_item, *next_item;
|
||||
|
||||
ptr_item = gui_bar_items;
|
||||
while (ptr_item)
|
||||
{
|
||||
next_item = ptr_item->next_item;
|
||||
|
||||
if (ptr_item->plugin == plugin)
|
||||
gui_bar_item_free (ptr_item);
|
||||
|
||||
ptr_item = next_item;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_default_buffer_count: default item for number of buffers
|
||||
*/
|
||||
|
||||
char *
|
||||
gui_bar_item_default_buffer_count (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width)
|
||||
{
|
||||
char buf[64];
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) max_width;
|
||||
|
||||
snprintf (buf, sizeof (buf), "%s[%s%d%s] ",
|
||||
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
|
||||
GUI_COLOR(GUI_COLOR_STATUS),
|
||||
(last_gui_buffer) ? last_gui_buffer->number : 0,
|
||||
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
|
||||
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_default_buffer_plugin: default item for name of buffer plugin
|
||||
*/
|
||||
|
||||
char *
|
||||
gui_bar_item_default_buffer_plugin (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width)
|
||||
{
|
||||
char buf[64];
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) max_width;
|
||||
|
||||
if (!window)
|
||||
return NULL;
|
||||
|
||||
snprintf (buf, sizeof (buf), "%s[%s%s%s] ",
|
||||
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
|
||||
GUI_COLOR(GUI_COLOR_STATUS),
|
||||
(window->buffer->plugin) ? window->buffer->plugin->name : "core",
|
||||
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
|
||||
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_default_buffer_name: default item for name of buffer
|
||||
*/
|
||||
|
||||
char *
|
||||
gui_bar_item_default_buffer_name (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width)
|
||||
{
|
||||
char buf[256];
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) max_width;
|
||||
|
||||
if (!window)
|
||||
return NULL;
|
||||
|
||||
snprintf (buf, sizeof (buf), "%s%d%s:%s%s%s/%s%s ",
|
||||
GUI_COLOR(GUI_COLOR_STATUS_NUMBER),
|
||||
window->buffer->number,
|
||||
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
|
||||
GUI_COLOR(GUI_COLOR_STATUS_CATEGORY),
|
||||
window->buffer->category,
|
||||
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
|
||||
GUI_COLOR(GUI_COLOR_STATUS_NAME),
|
||||
window->buffer->name);
|
||||
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_default_nicklist_count: default item for number of nicks in
|
||||
* buffer nicklist
|
||||
*/
|
||||
|
||||
char *
|
||||
gui_bar_item_default_nicklist_count (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width)
|
||||
{
|
||||
char buf[64];
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) max_width;
|
||||
|
||||
if (!window || !window->buffer->nicklist)
|
||||
return NULL;
|
||||
|
||||
snprintf (buf, sizeof (buf), "%s[%s%d%s] ",
|
||||
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS),
|
||||
GUI_COLOR(GUI_COLOR_STATUS),
|
||||
window->buffer->nicklist_visible_count,
|
||||
GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
|
||||
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_default_scroll: default item for scrolling indicator
|
||||
*/
|
||||
|
||||
char *
|
||||
gui_bar_item_default_scroll (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width)
|
||||
{
|
||||
char buf[64];
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) max_width;
|
||||
|
||||
if (!window || !window->scroll)
|
||||
return NULL;
|
||||
|
||||
snprintf (buf, sizeof (buf), "%s%s ",
|
||||
GUI_COLOR(GUI_COLOR_STATUS_MORE),
|
||||
_("(MORE)"));
|
||||
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_default_hotlist: default item for hotlist
|
||||
*/
|
||||
|
||||
char *
|
||||
gui_bar_item_default_hotlist (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width)
|
||||
{
|
||||
char buf[1024], format[32];
|
||||
struct t_gui_hotlist *ptr_hotlist;
|
||||
int names_count, display_name;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) max_width;
|
||||
|
||||
if (!gui_hotlist)
|
||||
return NULL;
|
||||
|
||||
buf[0] = '\0';
|
||||
|
||||
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
|
||||
strcat (buf, "[");
|
||||
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS));
|
||||
strcat (buf, _("Act: "));
|
||||
|
||||
names_count = 0;
|
||||
for (ptr_hotlist = gui_hotlist; ptr_hotlist;
|
||||
ptr_hotlist = ptr_hotlist->next_hotlist)
|
||||
{
|
||||
switch (ptr_hotlist->priority)
|
||||
{
|
||||
case GUI_HOTLIST_LOW:
|
||||
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DATA_OTHER));
|
||||
display_name = ((CONFIG_INTEGER(config_look_hotlist_names_level) & 1) != 0);
|
||||
break;
|
||||
case GUI_HOTLIST_MESSAGE:
|
||||
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DATA_MSG));
|
||||
display_name = ((CONFIG_INTEGER(config_look_hotlist_names_level) & 2) != 0);
|
||||
break;
|
||||
case GUI_HOTLIST_PRIVATE:
|
||||
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DATA_PRIVATE));
|
||||
display_name = ((CONFIG_INTEGER(config_look_hotlist_names_level) & 4) != 0);
|
||||
break;
|
||||
case GUI_HOTLIST_HIGHLIGHT:
|
||||
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DATA_HIGHLIGHT));
|
||||
display_name = ((CONFIG_INTEGER(config_look_hotlist_names_level) & 8) != 0);
|
||||
break;
|
||||
default:
|
||||
display_name = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
sprintf (buf + strlen (buf), "%d", ptr_hotlist->buffer->number);
|
||||
|
||||
if (display_name
|
||||
&& (CONFIG_INTEGER(config_look_hotlist_names_count) != 0)
|
||||
&& (names_count < CONFIG_INTEGER(config_look_hotlist_names_count)))
|
||||
{
|
||||
names_count++;
|
||||
|
||||
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
|
||||
strcat (buf, ":");
|
||||
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS));
|
||||
if (CONFIG_INTEGER(config_look_hotlist_names_length) == 0)
|
||||
snprintf (format, sizeof (format) - 1, "%%s");
|
||||
else
|
||||
snprintf (format, sizeof (format) - 1,
|
||||
"%%.%ds",
|
||||
CONFIG_INTEGER(config_look_hotlist_names_length));
|
||||
sprintf (buf + strlen (buf), format, ptr_hotlist->buffer->name);
|
||||
}
|
||||
|
||||
if (ptr_hotlist->next_hotlist)
|
||||
strcat (buf, ",");
|
||||
|
||||
if (strlen (buf) > sizeof (buf) - 32)
|
||||
break;
|
||||
}
|
||||
strcat (buf, GUI_COLOR(GUI_COLOR_STATUS_DELIMITERS));
|
||||
strcat (buf, "] ");
|
||||
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_signal_cb: callback when a signal is received, for rebuilding
|
||||
* an item
|
||||
*/
|
||||
|
||||
int
|
||||
gui_bar_item_signal_cb (void *data, char *signal,
|
||||
char *type_data, void *signal_data)
|
||||
{
|
||||
/* make C compiler happy */
|
||||
(void) signal;
|
||||
(void) type_data;
|
||||
(void) signal_data;
|
||||
|
||||
gui_bar_item_update ((char *)data);
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_init: init default items in WeeChat
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_item_init ()
|
||||
{
|
||||
/* buffer count */
|
||||
gui_bar_item_new (NULL,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_COUNT],
|
||||
&gui_bar_item_default_buffer_count, NULL);
|
||||
gui_bar_item_hook1 = hook_signal (NULL, "buffer_open",
|
||||
&gui_bar_item_signal_cb,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_COUNT]);
|
||||
gui_bar_item_hook2 = hook_signal (NULL, "buffer_closed",
|
||||
&gui_bar_item_signal_cb,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_COUNT]);
|
||||
|
||||
/* buffer plugin */
|
||||
gui_bar_item_new (NULL,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_PLUGIN],
|
||||
&gui_bar_item_default_buffer_plugin, NULL);
|
||||
|
||||
/* buffer name */
|
||||
gui_bar_item_new (NULL,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_NAME],
|
||||
&gui_bar_item_default_buffer_name, NULL);
|
||||
gui_bar_item_hook3 = hook_signal (NULL, "buffer_renamed",
|
||||
&gui_bar_item_signal_cb,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_NAME]);
|
||||
gui_bar_item_hook4 = hook_signal (NULL, "buffer_moved",
|
||||
&gui_bar_item_signal_cb,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_BUFFER_NAME]);
|
||||
|
||||
/* nicklist count */
|
||||
gui_bar_item_new (NULL,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_NICKLIST_COUNT],
|
||||
&gui_bar_item_default_nicklist_count, NULL);
|
||||
gui_bar_item_hook5 = hook_signal (NULL, "nicklist_changed",
|
||||
&gui_bar_item_signal_cb,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_NICKLIST_COUNT]);
|
||||
|
||||
/* scroll indicator */
|
||||
gui_bar_item_new (NULL,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_SCROLL],
|
||||
&gui_bar_item_default_scroll, NULL);
|
||||
gui_bar_item_hook6 = hook_signal (NULL, "window_scrolled",
|
||||
&gui_bar_item_signal_cb,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_SCROLL]);
|
||||
|
||||
/* hotlist */
|
||||
gui_bar_item_new (NULL,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_HOTLIST],
|
||||
&gui_bar_item_default_hotlist, NULL);
|
||||
gui_bar_item_hook7 = hook_signal (NULL, "hotlist_changed",
|
||||
&gui_bar_item_signal_cb,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_WEECHAT_HOTLIST]);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_end: remove bar items and hooks
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_item_end ()
|
||||
{
|
||||
/* remove hooks */
|
||||
unhook (gui_bar_item_hook1);
|
||||
unhook (gui_bar_item_hook2);
|
||||
unhook (gui_bar_item_hook3);
|
||||
unhook (gui_bar_item_hook4);
|
||||
unhook (gui_bar_item_hook5);
|
||||
unhook (gui_bar_item_hook6);
|
||||
unhook (gui_bar_item_hook7);
|
||||
|
||||
/* remove bar items */
|
||||
gui_bar_item_free_all ();
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_item_print_log: print bar items infos in log (usually for crash dump)
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_item_print_log ()
|
||||
{
|
||||
struct t_gui_bar_item *ptr_item;
|
||||
|
||||
for (ptr_item = gui_bar_items; ptr_item; ptr_item = ptr_item->next_item)
|
||||
{
|
||||
log_printf ("");
|
||||
log_printf ("[bar item (addr:0x%x)]", ptr_item);
|
||||
log_printf (" plugin . . . . . . . . : 0x%x", ptr_item->plugin);
|
||||
log_printf (" name . . . . . . . . . : '%s'", ptr_item->name);
|
||||
log_printf (" build_callback . . . . : 0x%x", ptr_item->build_callback);
|
||||
log_printf (" build_callback_data. . : 0x%x", ptr_item->build_callback_data);
|
||||
log_printf (" prev_item. . . . . . . : 0x%x", ptr_item->prev_item);
|
||||
log_printf (" next_item. . . . . . . : 0x%x", ptr_item->next_item);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2008 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __WEECHAT_GUI_BAR_ITEM_H
|
||||
#define __WEECHAT_GUI_BAR_ITEM_H 1
|
||||
|
||||
enum t_gui_bar_item_weechat
|
||||
{
|
||||
GUI_BAR_ITEM_WEECHAT_BUFFER_COUNT = 0,
|
||||
GUI_BAR_ITEM_WEECHAT_BUFFER_PLUGIN,
|
||||
GUI_BAR_ITEM_WEECHAT_BUFFER_NAME,
|
||||
GUI_BAR_ITEM_WEECHAT_NICKLIST_COUNT,
|
||||
GUI_BAR_ITEM_WEECHAT_SCROLL,
|
||||
GUI_BAR_ITEM_WEECHAT_HOTLIST,
|
||||
/* number of bar items */
|
||||
GUI_BAR_NUM_ITEMS,
|
||||
};
|
||||
|
||||
struct t_gui_window;
|
||||
|
||||
struct t_gui_bar_item
|
||||
{
|
||||
struct t_weechat_plugin *plugin; /* plugin */
|
||||
char *name; /* bar item name */
|
||||
char *(*build_callback)(void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width);
|
||||
/* callback called for building item */
|
||||
void *build_callback_data; /* data for callback */
|
||||
struct t_gui_bar_item *prev_item; /* link to previous bar item */
|
||||
struct t_gui_bar_item *next_item; /* link to next bar item */
|
||||
};
|
||||
|
||||
/* variables */
|
||||
|
||||
extern struct t_gui_bar_item *gui_bar_items;
|
||||
extern struct t_gui_bar_item *last_gui_bar_item;
|
||||
|
||||
/* functions */
|
||||
|
||||
extern struct t_gui_bar_item *gui_bar_item_search (char *name);
|
||||
extern struct t_gui_bar_item *gui_bar_item_new (struct t_weechat_plugin *plugin,
|
||||
char *name,
|
||||
char *(*build_callback)(void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width),
|
||||
void *build_callback_data);
|
||||
extern void gui_bar_item_update (char *name);
|
||||
extern void gui_bar_item_free (struct t_gui_bar_item *item);
|
||||
extern void gui_bar_item_free_all ();
|
||||
extern void gui_bar_item_free_all_plugin (struct t_weechat_plugin *plugin);
|
||||
extern void gui_bar_item_init ();
|
||||
extern void gui_bar_item_end ();
|
||||
extern void gui_bar_item_print_log ();
|
||||
|
||||
#endif /* gui-bar-item.h */
|
||||
@@ -0,0 +1,312 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2008 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* gui-bar.c: bar functions, used by all GUI */
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../core/weechat.h"
|
||||
#include "../core/wee-log.h"
|
||||
#include "../core/wee-string.h"
|
||||
#include "gui-bar.h"
|
||||
#include "gui-window.h"
|
||||
|
||||
|
||||
char *gui_bar_type_str[GUI_BAR_NUM_TYPES] =
|
||||
{ "root", "window_active", "window_inactive" };
|
||||
char *gui_bar_position_str[GUI_BAR_NUM_POSITIONS] =
|
||||
{ "bottom", "top", "left", "right" };
|
||||
|
||||
struct t_gui_bar *gui_bars = NULL; /* first bar */
|
||||
struct t_gui_bar *last_gui_bar = NULL; /* last bar */
|
||||
|
||||
|
||||
/*
|
||||
* gui_bar_root_get_size: get total bar size ("root" type) for a position
|
||||
*/
|
||||
|
||||
int
|
||||
gui_bar_root_get_size (struct t_gui_bar *bar, int position)
|
||||
{
|
||||
struct t_gui_bar *ptr_bar;
|
||||
int total_size;
|
||||
|
||||
total_size = 0;
|
||||
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
|
||||
{
|
||||
if (bar && (ptr_bar == bar))
|
||||
return total_size;
|
||||
|
||||
if ((ptr_bar->type == GUI_BAR_TYPE_ROOT)
|
||||
&& (ptr_bar->position == position))
|
||||
{
|
||||
total_size += ptr_bar->size;
|
||||
if (ptr_bar->separator)
|
||||
total_size++;
|
||||
}
|
||||
}
|
||||
return total_size;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_search: search a bar by name
|
||||
*/
|
||||
|
||||
struct t_gui_bar *
|
||||
gui_bar_search (char *name)
|
||||
{
|
||||
struct t_gui_bar *ptr_bar;
|
||||
|
||||
if (!name || !name[0])
|
||||
return NULL;
|
||||
|
||||
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
|
||||
{
|
||||
if (strcmp (ptr_bar->name, name) == 0)
|
||||
return ptr_bar;
|
||||
}
|
||||
|
||||
/* bar not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_new: create a new bar
|
||||
*/
|
||||
|
||||
struct t_gui_bar *
|
||||
gui_bar_new (struct t_weechat_plugin *plugin, char *name, char *type,
|
||||
char *position, int size, int separator, char *items)
|
||||
{
|
||||
struct t_gui_bar *new_bar;
|
||||
struct t_gui_window *ptr_win;
|
||||
int i, type_value, position_value;
|
||||
|
||||
if (!name || !name[0])
|
||||
return NULL;
|
||||
|
||||
/* it's not possible to create 2 bars with same name */
|
||||
if (gui_bar_search (name))
|
||||
return NULL;
|
||||
|
||||
/* look for type */
|
||||
type_value = -1;
|
||||
for (i = 0; i < GUI_BAR_NUM_TYPES; i++)
|
||||
{
|
||||
if (string_strcasecmp (type, gui_bar_type_str[i]) == 0)
|
||||
{
|
||||
type_value = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (type_value < 0)
|
||||
return NULL;
|
||||
|
||||
/* look for position */
|
||||
position_value = -1;
|
||||
for (i = 0; i < GUI_BAR_NUM_POSITIONS; i++)
|
||||
{
|
||||
if (string_strcasecmp (position, gui_bar_position_str[i]) == 0)
|
||||
{
|
||||
position_value = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (position_value < 0)
|
||||
return NULL;
|
||||
|
||||
/* create bar */
|
||||
new_bar = (struct t_gui_bar *) malloc (sizeof (struct t_gui_bar));
|
||||
if (new_bar)
|
||||
{
|
||||
new_bar->plugin = plugin;
|
||||
new_bar->number = (last_gui_bar) ? last_gui_bar->number + 1 : 1;
|
||||
new_bar->name = strdup (name);
|
||||
new_bar->type = type_value;
|
||||
new_bar->position = position_value;
|
||||
new_bar->size = size;
|
||||
new_bar->separator = separator;
|
||||
if (items && items[0])
|
||||
{
|
||||
new_bar->items = strdup (items);
|
||||
new_bar->items_array = string_explode (items, ",", 0, 0,
|
||||
&new_bar->items_count);
|
||||
}
|
||||
else
|
||||
{
|
||||
new_bar->items = NULL;
|
||||
new_bar->items_count = 0;
|
||||
new_bar->items_array = NULL;
|
||||
}
|
||||
|
||||
if (type_value == GUI_BAR_TYPE_ROOT)
|
||||
{
|
||||
/* create only one window for bar */
|
||||
gui_bar_window_new (new_bar, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* create bar window for all opened windows */
|
||||
for (ptr_win = gui_windows; ptr_win;
|
||||
ptr_win = ptr_win->next_window)
|
||||
{
|
||||
gui_bar_window_new (new_bar, ptr_win);
|
||||
}
|
||||
}
|
||||
|
||||
/* add bar to bars queue */
|
||||
new_bar->prev_bar = last_gui_bar;
|
||||
if (gui_bars)
|
||||
last_gui_bar->next_bar = new_bar;
|
||||
else
|
||||
gui_bars = new_bar;
|
||||
last_gui_bar = new_bar;
|
||||
new_bar->next_bar = NULL;
|
||||
|
||||
gui_window_refresh_needed = 1;
|
||||
|
||||
return new_bar;
|
||||
}
|
||||
|
||||
/* failed to create bar */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_update: update a bar on screen
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_update (char *name)
|
||||
{
|
||||
struct t_gui_bar *ptr_bar;
|
||||
|
||||
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
|
||||
{
|
||||
if (strcmp (ptr_bar->name, name) == 0)
|
||||
gui_bar_draw (ptr_bar);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_free: delete a bar
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_free (struct t_gui_bar *bar)
|
||||
{
|
||||
/* remove bar from bars list */
|
||||
if (bar->prev_bar)
|
||||
bar->prev_bar->next_bar = bar->next_bar;
|
||||
if (bar->next_bar)
|
||||
bar->next_bar->prev_bar = bar->prev_bar;
|
||||
if (gui_bars == bar)
|
||||
gui_bars = bar->next_bar;
|
||||
if (last_gui_bar == bar)
|
||||
last_gui_bar = bar->prev_bar;
|
||||
|
||||
/* free data */
|
||||
if (bar->name)
|
||||
free (bar->name);
|
||||
if (bar->bar_window)
|
||||
gui_bar_window_free (bar->bar_window);
|
||||
if (bar->items)
|
||||
free (bar->items);
|
||||
if (bar->items_array)
|
||||
string_free_exploded (bar->items_array);
|
||||
|
||||
free (bar);
|
||||
|
||||
gui_window_refresh_needed = 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_free_all: delete all bars
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_free_all ()
|
||||
{
|
||||
while (gui_bars)
|
||||
{
|
||||
gui_bar_free (gui_bars);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_free_all_plugin: delete all bars for a plugin
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_free_all_plugin (struct t_weechat_plugin *plugin)
|
||||
{
|
||||
struct t_gui_bar *ptr_bar, *next_bar;
|
||||
|
||||
ptr_bar = gui_bars;
|
||||
while (ptr_bar)
|
||||
{
|
||||
next_bar = ptr_bar->next_bar;
|
||||
|
||||
if (ptr_bar->plugin == plugin)
|
||||
gui_bar_free (ptr_bar);
|
||||
|
||||
ptr_bar = next_bar;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_bar_print_log: print bar infos in log (usually for crash dump)
|
||||
*/
|
||||
|
||||
void
|
||||
gui_bar_print_log ()
|
||||
{
|
||||
struct t_gui_bar *ptr_bar;
|
||||
|
||||
for (ptr_bar = gui_bars; ptr_bar; ptr_bar = ptr_bar->next_bar)
|
||||
{
|
||||
log_printf ("");
|
||||
log_printf ("[bar (addr:0x%x)]", ptr_bar);
|
||||
log_printf (" plugin . . . . . . . . : 0x%x", ptr_bar->plugin);
|
||||
log_printf (" number . . . . . . . . : %d", ptr_bar->number);
|
||||
log_printf (" name . . . . . . . . . : '%s'", ptr_bar->name);
|
||||
log_printf (" type . . . . . . . . . : %d (%s)",
|
||||
ptr_bar->type,
|
||||
gui_bar_type_str[ptr_bar->type]);
|
||||
log_printf (" position . . . . . . . : %d (%s)",
|
||||
ptr_bar->position,
|
||||
gui_bar_position_str[ptr_bar->position]);
|
||||
log_printf (" size . . . . . . . . . : %d", ptr_bar->size);
|
||||
log_printf (" separator. . . . . . . : %d", ptr_bar->separator);
|
||||
log_printf (" items. . . . . . . . . : '%s'", ptr_bar->items);
|
||||
log_printf (" items_count. . . . . . : %d", ptr_bar->items_count);
|
||||
log_printf (" items_array. . . . . . : 0x%x", ptr_bar->items_array);
|
||||
log_printf (" bar_window . . . . . . : 0x%x", ptr_bar->bar_window);
|
||||
log_printf (" prev_bar . . . . . . . : 0x%x", ptr_bar->prev_bar);
|
||||
log_printf (" next_bar . . . . . . . : 0x%x", ptr_bar->next_bar);
|
||||
|
||||
if (ptr_bar->bar_window)
|
||||
gui_bar_window_print_log (ptr_bar->bar_window);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) 2003-2008 by FlashCode <flashcode@flashtux.org>
|
||||
* See README for License detail, AUTHORS for developers list.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __WEECHAT_GUI_BAR_H
|
||||
#define __WEECHAT_GUI_BAR_H 1
|
||||
|
||||
struct t_weechat_plugin;
|
||||
struct t_gui_window;
|
||||
|
||||
enum t_gui_bar_type
|
||||
{
|
||||
GUI_BAR_TYPE_ROOT = 0,
|
||||
GUI_BAR_TYPE_WINDOW_ACTIVE,
|
||||
GUI_BAR_TYPE_WINDOW_INACTIVE,
|
||||
/* number of bar types */
|
||||
GUI_BAR_NUM_TYPES,
|
||||
};
|
||||
|
||||
enum t_gui_bar_position
|
||||
{
|
||||
GUI_BAR_POSITION_BOTTOM = 0,
|
||||
GUI_BAR_POSITION_TOP,
|
||||
GUI_BAR_POSITION_LEFT,
|
||||
GUI_BAR_POSITION_RIGHT,
|
||||
/* number of bar positions */
|
||||
GUI_BAR_NUM_POSITIONS,
|
||||
};
|
||||
|
||||
struct t_gui_bar
|
||||
{
|
||||
/* user choices */
|
||||
struct t_weechat_plugin *plugin; /* plugin */
|
||||
int number; /* bar number */
|
||||
char *name; /* bar name */
|
||||
int type; /* type (root or window) */
|
||||
int position; /* position (bottom, top, left, right) */
|
||||
int size; /* size of bar (in chars) */
|
||||
int separator; /* 1 if separator (line) displayed */
|
||||
char *items; /* bar items */
|
||||
|
||||
/* internal vars */
|
||||
int items_count; /* number of bar items */
|
||||
char **items_array; /* exploded bar items */
|
||||
struct t_gui_bar_window *bar_window; /* pointer to bar window */
|
||||
/* (for type root only) */
|
||||
struct t_gui_bar *prev_bar; /* link to previous bar */
|
||||
struct t_gui_bar *next_bar; /* link to next bar */
|
||||
};
|
||||
|
||||
/* variables */
|
||||
|
||||
extern char *gui_bar_type_str[];
|
||||
extern char *gui_bar_position_str[];
|
||||
extern struct t_gui_bar *gui_bars;
|
||||
extern struct t_gui_bar *last_gui_bar;
|
||||
|
||||
/* functions */
|
||||
|
||||
extern int gui_bar_root_get_size (struct t_gui_bar *bar, int position);
|
||||
extern struct t_gui_bar *gui_bar_search (char *name);
|
||||
extern struct t_gui_bar *gui_bar_new (struct t_weechat_plugin *plugin,
|
||||
char *name, char *type, char *position,
|
||||
int size, int separator, char *items);
|
||||
extern void gui_bar_update (char *name);
|
||||
extern void gui_bar_free (struct t_gui_bar *bar);
|
||||
extern void gui_bar_free_all ();
|
||||
extern void gui_bar_free_all_plugin (struct t_weechat_plugin *plugin);
|
||||
extern void gui_bar_print_log ();
|
||||
|
||||
/* functions (GUI dependent) */
|
||||
|
||||
extern int gui_bar_window_get_size (struct t_gui_bar *bar,
|
||||
struct t_gui_window *window, int position);
|
||||
extern int gui_bar_window_new (struct t_gui_bar *bar,
|
||||
struct t_gui_window *window);
|
||||
extern void gui_bar_window_free (struct t_gui_bar_window *bar_window);
|
||||
extern void gui_bar_draw (struct t_gui_bar *bar);
|
||||
extern void gui_bar_window_print_log (struct t_gui_bar_window *bar_window);
|
||||
|
||||
#endif /* gui-bar.h */
|
||||
+12
-3
@@ -253,6 +253,9 @@ gui_buffer_set_category (struct t_gui_buffer *buffer, char *category)
|
||||
buffer->category = strdup (category);
|
||||
}
|
||||
gui_status_refresh_needed = 1;
|
||||
|
||||
hook_signal_send ("buffer_renamed",
|
||||
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -269,6 +272,9 @@ gui_buffer_set_name (struct t_gui_buffer *buffer, char *name)
|
||||
buffer->name = strdup (name);
|
||||
}
|
||||
gui_status_refresh_needed = 1;
|
||||
|
||||
hook_signal_send ("buffer_renamed",
|
||||
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -625,7 +631,7 @@ gui_buffer_close (struct t_gui_buffer *buffer, int switch_to_another)
|
||||
struct t_gui_buffer *ptr_buffer;
|
||||
struct t_gui_line *ptr_line;
|
||||
|
||||
hook_signal_send ("buffer_close",
|
||||
hook_signal_send ("buffer_closing",
|
||||
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
|
||||
|
||||
if (buffer->close_callback)
|
||||
@@ -708,6 +714,8 @@ gui_buffer_close (struct t_gui_buffer *buffer, int switch_to_another)
|
||||
|
||||
if (gui_windows && gui_current_window && gui_current_window->buffer)
|
||||
gui_status_refresh_needed = 1;
|
||||
|
||||
hook_signal_send ("buffer_closed", WEECHAT_HOOK_SIGNAL_STRING, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -903,8 +911,9 @@ gui_buffer_move_to_number (struct t_gui_buffer *buffer, int number)
|
||||
snprintf (buf1_str, sizeof (buf1_str) - 1, "%d", buffer->number);
|
||||
argv[0] = buf1_str;
|
||||
argv[1] = buf2_str;
|
||||
/* TODO: send buffer_move event */
|
||||
/*plugin_event_handler_exec ("buffer_move", 2, argv);*/
|
||||
|
||||
hook_signal_send ("buffer_moved",
|
||||
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -28,8 +28,10 @@
|
||||
|
||||
#include "../core/weechat.h"
|
||||
#include "../core/wee-config.h"
|
||||
#include "../core/wee-hook.h"
|
||||
#include "../core/wee-log.h"
|
||||
#include "../core/wee-util.h"
|
||||
#include "../plugins/plugin.h"
|
||||
#include "gui-hotlist.h"
|
||||
#include "gui-buffer.h"
|
||||
#include "gui-status.h"
|
||||
@@ -178,6 +180,8 @@ gui_hotlist_add_hotlist (struct t_gui_hotlist **hotlist,
|
||||
*hotlist = new_hotlist;
|
||||
*last_hotlist = new_hotlist;
|
||||
}
|
||||
|
||||
hook_signal_send ("hotlist_changed", WEECHAT_HOOK_SIGNAL_STRING, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -312,6 +316,8 @@ gui_hotlist_free (struct t_gui_hotlist **hotlist,
|
||||
|
||||
free (ptr_hotlist);
|
||||
*hotlist = new_hotlist;
|
||||
|
||||
hook_signal_send ("hotlist_changed", WEECHAT_HOOK_SIGNAL_STRING, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+70
-35
@@ -44,6 +44,35 @@ WEECHAT_PLUGIN_LICENSE("GPL");
|
||||
struct t_weechat_plugin *weechat_demo_plugin = NULL;
|
||||
#define weechat_plugin weechat_demo_plugin
|
||||
|
||||
int demo_debug = 0;
|
||||
|
||||
|
||||
/*
|
||||
* demo_debug_signal_debug_cb: callback for "debug" signal
|
||||
*/
|
||||
|
||||
int
|
||||
demo_debug_signal_debug_cb (void *data, char *signal, char *type_data,
|
||||
void *signal_data)
|
||||
{
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) signal;
|
||||
|
||||
if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
|
||||
{
|
||||
if (weechat_strcasecmp ((char *)signal_data, "demo") == 0)
|
||||
{
|
||||
demo_debug ^= 1;
|
||||
if (demo_debug)
|
||||
weechat_printf (NULL, _("%s: debug enabled"), "demo");
|
||||
else
|
||||
weechat_printf (NULL, _("%s: debug disabled"), "demo");
|
||||
}
|
||||
}
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* demo_printf_command_cb: demo command for printf
|
||||
@@ -134,12 +163,15 @@ demo_buffer_close_cb (void *data, struct t_gui_buffer *buffer)
|
||||
{
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
|
||||
weechat_printf (NULL,
|
||||
"buffer_close_cb: buffer = %x (%s / %s)",
|
||||
buffer,
|
||||
weechat_buffer_get (buffer, "category"),
|
||||
weechat_buffer_get (buffer, "name"));
|
||||
|
||||
if (demo_debug)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
"buffer_close_cb: buffer = %x (%s / %s)",
|
||||
buffer,
|
||||
weechat_buffer_get (buffer, "category"),
|
||||
weechat_buffer_get (buffer, "name"));
|
||||
}
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
@@ -243,7 +275,6 @@ demo_infolist_print (struct t_plugin_infolist *infolist, char *item_name)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if (argv)
|
||||
weechat_string_free_exploded (argv);
|
||||
@@ -337,34 +368,37 @@ demo_signal_cb (void *data, char *signal, char *type_data, void *signal_data)
|
||||
{
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
|
||||
if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
|
||||
|
||||
if (demo_debug)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("demo_signal: signal: %s, type_data: %s, "
|
||||
"signal_data: '%s'"),
|
||||
signal, type_data, (char *)signal_data);
|
||||
}
|
||||
else if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_INT) == 0)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("demo_signal: signal: %s, type_data: %s, "
|
||||
"signal_data: %d"),
|
||||
signal, type_data, *((int *)signal_data));
|
||||
}
|
||||
else if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_POINTER) == 0)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("demo_signal: signal: %s, type_data: %s, "
|
||||
"signal_data: 0x%x"),
|
||||
signal, type_data, signal_data);
|
||||
}
|
||||
else
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("demo_signal: signal: %s, type_data: %s, "
|
||||
"signal_data: 0x%x (unknown type)"),
|
||||
signal, type_data, signal_data);
|
||||
if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("demo_signal: signal: %s, type_data: %s, "
|
||||
"signal_data: '%s'"),
|
||||
signal, type_data, (char *)signal_data);
|
||||
}
|
||||
else if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_INT) == 0)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("demo_signal: signal: %s, type_data: %s, "
|
||||
"signal_data: %d"),
|
||||
signal, type_data, *((int *)signal_data));
|
||||
}
|
||||
else if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_POINTER) == 0)
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("demo_signal: signal: %s, type_data: %s, "
|
||||
"signal_data: 0x%x"),
|
||||
signal, type_data, signal_data);
|
||||
}
|
||||
else
|
||||
{
|
||||
weechat_printf (NULL,
|
||||
_("demo_signal: signal: %s, type_data: %s, "
|
||||
"signal_data: 0x%x (unknown type)"),
|
||||
signal, type_data, signal_data);
|
||||
}
|
||||
}
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
@@ -426,7 +460,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin)
|
||||
"weechat_sharedir|charset_terminal|charset_internal|"
|
||||
"inactivity|input|input_mask|input_pos",
|
||||
&demo_info_command_cb, NULL);
|
||||
|
||||
|
||||
weechat_hook_signal ("debug", &demo_debug_signal_debug_cb, NULL);
|
||||
weechat_hook_signal ("*", &demo_signal_cb, NULL);
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
|
||||
@@ -116,14 +116,15 @@ irc_debug_signal_debug_cb (void *data, char *signal, char *type_data,
|
||||
if (strcmp (type_data, WEECHAT_HOOK_SIGNAL_STRING) == 0)
|
||||
{
|
||||
if (weechat_strcasecmp ((char *)signal_data, "irc") == 0)
|
||||
{
|
||||
irc_debug ^= 1;
|
||||
if (irc_debug)
|
||||
weechat_printf (NULL, _("%s: debug enabled"), "irc");
|
||||
else
|
||||
weechat_printf (NULL, _("%s: debug disabled"), "irc");
|
||||
}
|
||||
}
|
||||
|
||||
if (irc_debug)
|
||||
weechat_printf (NULL, _("%s: debug enabled"), "irc");
|
||||
else
|
||||
weechat_printf (NULL, _("%s: debug disabled"), "irc");
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -440,12 +440,12 @@ logger_buffer_open_signal_cb (void *data, char *signal, char *type_data,
|
||||
}
|
||||
|
||||
/*
|
||||
* logger_buffer_close_signal_cb: callback for "buffer_close" signal
|
||||
* logger_buffer_closing_signal_cb: callback for "buffer_closing" signal
|
||||
*/
|
||||
|
||||
int
|
||||
logger_buffer_close_signal_cb (void *data, char *signal, char *type_data,
|
||||
void *signal_data)
|
||||
logger_buffer_closing_signal_cb (void *data, char *signal, char *type_data,
|
||||
void *signal_data)
|
||||
{
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
@@ -652,7 +652,7 @@ weechat_plugin_init (struct t_weechat_plugin *plugin)
|
||||
logger_start_buffer_all ();
|
||||
|
||||
weechat_hook_signal ("buffer_open", &logger_buffer_open_signal_cb, NULL);
|
||||
weechat_hook_signal ("buffer_close", &logger_buffer_close_signal_cb, NULL);
|
||||
weechat_hook_signal ("buffer_closing", &logger_buffer_closing_signal_cb, NULL);
|
||||
weechat_hook_signal ("logger_backlog", &logger_backlog_signal_cb, NULL);
|
||||
weechat_hook_signal ("logger_start", &logger_start_signal_cb, NULL);
|
||||
weechat_hook_signal ("logger_stop", &logger_stop_signal_cb, NULL);
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
#include "../core/wee-string.h"
|
||||
#include "../core/wee-utf8.h"
|
||||
#include "../core/wee-util.h"
|
||||
#include "../gui/gui-bar.h"
|
||||
#include "../gui/gui-bar-item.h"
|
||||
#include "../gui/gui-buffer.h"
|
||||
#include "../gui/gui-chat.h"
|
||||
#include "../gui/gui-nicklist.h"
|
||||
@@ -337,6 +339,15 @@ plugin_load (char *filename)
|
||||
new_plugin->nicklist_remove_nick = &gui_nicklist_remove_nick;
|
||||
new_plugin->nicklist_remove_all = &gui_nicklist_remove_all;
|
||||
|
||||
new_plugin->bar_item_search = &gui_bar_item_search;
|
||||
new_plugin->bar_item_new = &gui_bar_item_new;
|
||||
new_plugin->bar_item_update = &gui_bar_item_update;
|
||||
new_plugin->bar_item_remove = &gui_bar_item_free;
|
||||
new_plugin->bar_search = &gui_bar_search;
|
||||
new_plugin->bar_new = &gui_bar_new;
|
||||
new_plugin->bar_update = &gui_bar_update;
|
||||
new_plugin->bar_remove = &gui_bar_free;
|
||||
|
||||
new_plugin->command = &plugin_api_command;
|
||||
|
||||
new_plugin->info_get = &plugin_api_info_get;
|
||||
@@ -523,6 +534,9 @@ plugin_remove (struct t_weechat_plugin *plugin)
|
||||
/* remove all hooks */
|
||||
unhook_all_plugin (plugin);
|
||||
|
||||
/* remove all bar items */
|
||||
gui_bar_item_free_all_plugin (plugin);
|
||||
|
||||
/* remove pointer to this plugin on buffers */
|
||||
for (ptr_buffer = gui_buffers; ptr_buffer;
|
||||
ptr_buffer = ptr_buffer->next_buffer)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -178,6 +178,7 @@ static XS (XS_weechat_iconv_to_internal)
|
||||
|
||||
result = weechat_iconv_to_internal (SvPV (ST (0), PL_na), /* charset */
|
||||
SvPV (ST (1), PL_na)); /* string */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -208,6 +209,7 @@ static XS (XS_weechat_iconv_from_internal)
|
||||
|
||||
result = weechat_iconv_from_internal (SvPV (ST (0), PL_na), /* charset */
|
||||
SvPV (ST (1), PL_na)); /* string */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -236,6 +238,7 @@ static XS (XS_weechat_gettext)
|
||||
}
|
||||
|
||||
result = weechat_gettext (SvPV (ST (0), PL_na)); /* string */
|
||||
|
||||
PERL_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -266,6 +269,7 @@ static XS (XS_weechat_ngettext)
|
||||
result = weechat_ngettext (SvPV (ST (0), PL_na), /* single */
|
||||
SvPV (ST (1), PL_na), /* plural */
|
||||
SvIV (ST (2))); /* count */
|
||||
|
||||
PERL_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -349,6 +353,7 @@ static XS (XS_weechat_list_new)
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_list_new ());
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -379,6 +384,7 @@ static XS (XS_weechat_list_add)
|
||||
result = script_ptr2str (weechat_list_add (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
|
||||
SvPV (ST (1), PL_na), /* data */
|
||||
SvPV (ST (2), PL_na))); /* where */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -408,6 +414,7 @@ static XS (XS_weechat_list_search)
|
||||
|
||||
result = script_ptr2str (weechat_list_search (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
|
||||
SvPV (ST (1), PL_na))); /* data */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -437,6 +444,7 @@ static XS (XS_weechat_list_casesearch)
|
||||
|
||||
result = script_ptr2str (weechat_list_casesearch (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
|
||||
SvPV (ST (1), PL_na))); /* data */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -466,6 +474,7 @@ static XS (XS_weechat_list_get)
|
||||
|
||||
result = script_ptr2str (weechat_list_get (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
|
||||
SvIV (ST (1)))); /* position */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -523,6 +532,7 @@ static XS (XS_weechat_list_next)
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_list_next (script_str2ptr (SvPV (ST (0), PL_na)))); /* item */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -551,6 +561,7 @@ static XS (XS_weechat_list_prev)
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_list_prev (script_str2ptr (SvPV (ST (0), PL_na)))); /* item */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -579,6 +590,7 @@ static XS (XS_weechat_list_string)
|
||||
}
|
||||
|
||||
result = weechat_list_string (script_str2ptr (SvPV (ST (0), PL_na))); /* item */
|
||||
|
||||
PERL_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -607,6 +619,7 @@ static XS (XS_weechat_list_size)
|
||||
}
|
||||
|
||||
size = weechat_list_size (script_str2ptr (SvPV (ST (0), PL_na))); /* weelist */
|
||||
|
||||
PERL_RETURN_INT(size);
|
||||
}
|
||||
|
||||
@@ -764,6 +777,7 @@ static XS (XS_weechat_config_new)
|
||||
SvPV (ST (0), PL_na), /* filename */
|
||||
&weechat_perl_api_config_reload_cb,
|
||||
SvPV (ST (1), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -902,6 +916,7 @@ static XS (XS_weechat_config_new_section)
|
||||
SvPV (ST (3), PL_na), /* perl function (write cb) */
|
||||
&weechat_perl_api_config_section_write_default_cb,
|
||||
SvPV (ST (4), PL_na))); /* perl function (write default cb) */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -931,6 +946,7 @@ static XS (XS_weechat_config_search_section)
|
||||
|
||||
result = script_ptr2str (weechat_config_search_section (script_str2ptr (SvPV (ST (0), PL_na)), /* config_file */
|
||||
SvPV (ST (1), PL_na))); /* section_name */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -998,6 +1014,7 @@ static XS (XS_weechat_config_new_option)
|
||||
SvPV (ST (8), PL_na), /* default_value */
|
||||
&weechat_perl_api_config_option_change_cb,
|
||||
SvPV (ST (9), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1028,6 +1045,7 @@ static XS (XS_weechat_config_search_option)
|
||||
result = script_ptr2str (weechat_config_search_option (script_str2ptr (SvPV (ST (0), PL_na)), /* config_file */
|
||||
script_str2ptr (SvPV (ST (1), PL_na)), /* section */
|
||||
SvPV (ST (2), PL_na))); /* option_name */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1056,6 +1074,7 @@ static XS (XS_weechat_config_string_to_boolean)
|
||||
}
|
||||
|
||||
value = weechat_config_string_to_boolean (SvPV (ST (0), PL_na)); /* text */
|
||||
|
||||
PERL_RETURN_INT(value);
|
||||
}
|
||||
|
||||
@@ -1086,6 +1105,7 @@ static XS (XS_weechat_config_option_set)
|
||||
rc = weechat_config_option_set (script_str2ptr (SvPV (ST (0), PL_na)), /* option */
|
||||
SvPV (ST (1), PL_na), /* new_value */
|
||||
SvIV (ST (2))); /* run_callback */
|
||||
|
||||
PERL_RETURN_INT(rc);
|
||||
}
|
||||
|
||||
@@ -1114,6 +1134,7 @@ static XS (XS_weechat_config_boolean)
|
||||
}
|
||||
|
||||
value = weechat_config_boolean (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
|
||||
|
||||
PERL_RETURN_INT(value);
|
||||
}
|
||||
|
||||
@@ -1142,6 +1163,7 @@ static XS (XS_weechat_config_integer)
|
||||
}
|
||||
|
||||
value = weechat_config_integer (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
|
||||
|
||||
PERL_RETURN_INT(value);
|
||||
}
|
||||
|
||||
@@ -1170,6 +1192,7 @@ static XS (XS_weechat_config_string)
|
||||
}
|
||||
|
||||
value = weechat_config_string (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
|
||||
|
||||
PERL_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
@@ -1198,6 +1221,7 @@ static XS (XS_weechat_config_color)
|
||||
}
|
||||
|
||||
value = weechat_config_color (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
|
||||
|
||||
PERL_RETURN_INT(value);
|
||||
}
|
||||
|
||||
@@ -1257,6 +1281,7 @@ static XS (XS_weechat_config_write)
|
||||
}
|
||||
|
||||
rc = weechat_config_write (script_str2ptr (SvPV (ST (0), PL_na))); /* config_file */
|
||||
|
||||
PERL_RETURN_INT(rc);
|
||||
}
|
||||
|
||||
@@ -1285,6 +1310,7 @@ static XS (XS_weechat_config_read)
|
||||
}
|
||||
|
||||
rc = weechat_config_read (script_str2ptr (SvPV (ST (0), PL_na))); /* config_file */
|
||||
|
||||
PERL_RETURN_INT(rc);
|
||||
}
|
||||
|
||||
@@ -1313,6 +1339,7 @@ static XS (XS_weechat_config_reload)
|
||||
}
|
||||
|
||||
rc = weechat_config_reload (script_str2ptr (SvPV (ST (0), PL_na))); /* config_file */
|
||||
|
||||
PERL_RETURN_INT(rc);
|
||||
}
|
||||
|
||||
@@ -1371,6 +1398,7 @@ static XS (XS_weechat_prefix)
|
||||
}
|
||||
|
||||
result = weechat_prefix (SvPV (ST (0), PL_na));
|
||||
|
||||
PERL_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -1399,6 +1427,7 @@ static XS (XS_weechat_color)
|
||||
}
|
||||
|
||||
result = weechat_color (SvPV (ST (0), PL_na));
|
||||
|
||||
PERL_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -1590,6 +1619,7 @@ static XS (XS_weechat_hook_command)
|
||||
SvPV (ST (4), PL_na), /* completion */
|
||||
&weechat_perl_api_hook_command_cb,
|
||||
SvPV (ST (5), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1655,6 +1685,7 @@ static XS (XS_weechat_hook_timer)
|
||||
SvIV (ST (2)), /* max_calls */
|
||||
&weechat_perl_api_hook_timer_cb,
|
||||
SvPV (ST (3), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1721,6 +1752,7 @@ static XS (XS_weechat_hook_fd)
|
||||
SvIV (ST (3)), /* exception */
|
||||
&weechat_perl_api_hook_fd_cb,
|
||||
SvPV (ST (4), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1796,6 +1828,7 @@ static XS (XS_weechat_hook_print)
|
||||
SvIV (ST (2)), /* strip_colors */
|
||||
&weechat_perl_api_hook_print_cb,
|
||||
SvPV (ST (3), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1882,6 +1915,7 @@ static XS (XS_weechat_hook_signal)
|
||||
SvPV (ST (0), PL_na), /* signal */
|
||||
&weechat_perl_api_hook_signal_cb,
|
||||
SvPV (ST (1), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2002,6 +2036,7 @@ static XS (XS_weechat_hook_config)
|
||||
SvPV (ST (1), PL_na), /* option */
|
||||
&weechat_perl_api_hook_config_cb,
|
||||
SvPV (ST (2), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2074,6 +2109,7 @@ static XS (XS_weechat_hook_completion)
|
||||
SvPV (ST (0), PL_na), /* completion */
|
||||
&weechat_perl_api_hook_completion_cb,
|
||||
SvPV (ST (1), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2130,6 +2166,7 @@ static XS (XS_weechat_hook_modifier)
|
||||
SvPV (ST (0), PL_na), /* modifier */
|
||||
&weechat_perl_api_hook_modifier_cb,
|
||||
SvPV (ST (1), PL_na))); /* perl function */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2160,6 +2197,7 @@ static XS (XS_weechat_hook_modifier_exec)
|
||||
result = weechat_hook_modifier_exec (SvPV (ST (0), PL_na), /* modifier */
|
||||
SvPV (ST (1), PL_na), /* modifier_data */
|
||||
SvPV (ST (2), PL_na)); /* string */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2316,6 +2354,7 @@ static XS (XS_weechat_buffer_new)
|
||||
SvPV (ST (2), PL_na), /* function input */
|
||||
&weechat_perl_api_close_cb,
|
||||
SvPV (ST (3), PL_na))); /* function close */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2345,6 +2384,7 @@ static XS (XS_weechat_buffer_search)
|
||||
|
||||
result = script_ptr2str (weechat_buffer_search (SvPV (ST (0), PL_na), /* category */
|
||||
SvPV (ST (1), PL_na))); /* name */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2405,6 +2445,7 @@ static XS (XS_weechat_buffer_get)
|
||||
|
||||
value = weechat_buffer_get (script_str2ptr (SvPV (ST (0), PL_na)), /* buffer */
|
||||
SvPV (ST (1), PL_na)); /* property */
|
||||
|
||||
PERL_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
@@ -2467,6 +2508,7 @@ static XS (XS_weechat_nicklist_add_group)
|
||||
SvPV (ST (2), PL_na), /* name */
|
||||
SvPV (ST (3), PL_na), /* color */
|
||||
SvIV (ST (4)))); /* visible */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2497,6 +2539,7 @@ static XS (XS_weechat_nicklist_search_group)
|
||||
result = script_ptr2str (weechat_nicklist_search_group (script_str2ptr (SvPV (ST (0), PL_na)), /* buffer */
|
||||
script_str2ptr (SvPV (ST (1), PL_na)), /* from_group */
|
||||
SvPV (ST (2), PL_na))); /* name */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2537,6 +2580,7 @@ static XS (XS_weechat_nicklist_add_nick)
|
||||
char_prefix,
|
||||
SvPV (ST (5), PL_na), /* prefix_color */
|
||||
SvIV (ST (6)))); /* visible */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2567,6 +2611,7 @@ static XS (XS_weechat_nicklist_search_nick)
|
||||
result = script_ptr2str (weechat_nicklist_search_nick (script_str2ptr (SvPV (ST (0), PL_na)), /* buffer */
|
||||
script_str2ptr (SvPV (ST (1), PL_na)), /* from_group */
|
||||
SvPV (ST (2), PL_na))); /* name */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2656,6 +2701,280 @@ static XS (XS_weechat_nicklist_remove_all)
|
||||
PERL_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::bar_item_search: search a bar item
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_bar_item_search)
|
||||
{
|
||||
char *result;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_search");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_search");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_bar_item_search (SvPV (ST (0), PL_na))); /* name */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_perl_api_bar_item_build_cb: callback for building bar item
|
||||
*/
|
||||
|
||||
char *
|
||||
weechat_perl_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width)
|
||||
{
|
||||
struct t_script_callback *script_callback;
|
||||
char *perl_argv[4], *ret;
|
||||
static char buf[32];
|
||||
|
||||
script_callback = (struct t_script_callback *)data;
|
||||
|
||||
snprintf (buf, sizeof (buf) - 1, "%d", max_width);
|
||||
|
||||
perl_argv[0] = script_ptr2str (item);
|
||||
perl_argv[1] = script_ptr2str (window);
|
||||
perl_argv[2] = buf;
|
||||
perl_argv[3] = NULL;
|
||||
|
||||
ret = (char *)weechat_perl_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
perl_argv);
|
||||
|
||||
if (perl_argv[0])
|
||||
free (perl_argv[0]);
|
||||
if (perl_argv[1])
|
||||
free (perl_argv[1]);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::bar_item_new: add a new bar item
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_bar_item_new)
|
||||
{
|
||||
char *result;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_new");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
if (items < 2)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_new");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
result = script_ptr2str (script_api_bar_item_new (weechat_perl_plugin,
|
||||
perl_current_script,
|
||||
SvPV (ST (0), PL_na), /* name */
|
||||
&weechat_perl_api_bar_item_build_cb,
|
||||
SvPV (ST (1), PL_na))); /* function build */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::bar_item_update: update a bar item on screen
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_bar_item_update)
|
||||
{
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_update");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_update");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
weechat_bar_item_update (SvPV (ST (0), PL_na)); /* name */
|
||||
|
||||
PERL_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::bar_item_remove: remove a bar item
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_bar_item_remove)
|
||||
{
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_remove");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_remove");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
script_api_bar_item_remove (weechat_perl_plugin,
|
||||
perl_current_script,
|
||||
script_str2ptr (SvPV (ST (0), PL_na))); /* item */
|
||||
|
||||
PERL_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::bar_search: search a bar
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_bar_search)
|
||||
{
|
||||
char *result;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_search");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_search");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_bar_search (SvPV (ST (0), PL_na))); /* name */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::bar_new: add a new bar
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_bar_new)
|
||||
{
|
||||
char *result;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_new");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
if (items < 6)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_new");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_bar_new (SvPV (ST (0), PL_na), /* name */
|
||||
SvPV (ST (1), PL_na), /* type */
|
||||
SvPV (ST (2), PL_na), /* position */
|
||||
SvIV (ST (3)), /* size */
|
||||
SvIV (ST (4)), /* separator */
|
||||
SvPV (ST (5), PL_na))); /* items */
|
||||
|
||||
PERL_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::bar_update: update a bar on screen
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_bar_update)
|
||||
{
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_update");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_update");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
weechat_bar_update (SvPV (ST (0), PL_na)); /* name */
|
||||
|
||||
PERL_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::bar_remove: remove a bar
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_bar_remove)
|
||||
{
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_remove");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_remove");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
weechat_bar_remove (script_str2ptr (SvPV (ST (0), PL_na))); /* bar */
|
||||
|
||||
PERL_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::command: execute a command on a buffer
|
||||
*/
|
||||
@@ -2712,9 +3031,278 @@ static XS (XS_weechat_info_get)
|
||||
}
|
||||
|
||||
value = weechat_info_get (SvPV (ST (0), PL_na));
|
||||
|
||||
PERL_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::infolist_get: get list with infos
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_infolist_get)
|
||||
{
|
||||
char *value;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_get");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
if (items < 2)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
value = script_ptr2str (weechat_infolist_get (SvPV (ST (0), PL_na), /* name */
|
||||
script_str2ptr (SvPV (ST (1), PL_na)))); /* pointer */
|
||||
|
||||
PERL_RETURN_STRING_FREE(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::infolist_next: move item pointer to next item in infolist
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_infolist_next)
|
||||
{
|
||||
int value;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_next");
|
||||
PERL_RETURN_INT(0);
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_next");
|
||||
PERL_RETURN_INT(0);
|
||||
}
|
||||
|
||||
value = weechat_infolist_next (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
|
||||
|
||||
PERL_RETURN_INT(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::infolist_prev: move item pointer to previous item in infolist
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_infolist_prev)
|
||||
{
|
||||
int value;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_prev");
|
||||
PERL_RETURN_INT(0);
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_prev");
|
||||
PERL_RETURN_INT(0);
|
||||
}
|
||||
|
||||
value = weechat_infolist_prev (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
|
||||
|
||||
PERL_RETURN_INT(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::infolist_fields: get list of fields for current item of infolist
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_infolist_fields)
|
||||
{
|
||||
char *value;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_fields");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_fields");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
value = weechat_infolist_fields (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
|
||||
|
||||
PERL_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::infolist_integer: get integer value of a variable in infolist
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_infolist_integer)
|
||||
{
|
||||
int value;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_integer");
|
||||
PERL_RETURN_INT(0);
|
||||
}
|
||||
|
||||
if (items < 2)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_integer");
|
||||
PERL_RETURN_INT(0);
|
||||
}
|
||||
|
||||
value = weechat_infolist_integer (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
|
||||
SvPV (ST (1), PL_na)); /* variable */
|
||||
|
||||
PERL_RETURN_INT(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::infolist_string: get string value of a variable in infolist
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_infolist_string)
|
||||
{
|
||||
char *value;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_string");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
if (items < 2)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_string");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
value = weechat_infolist_string (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
|
||||
SvPV (ST (1), PL_na)); /* variable */
|
||||
|
||||
PERL_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::infolist_pointer: get pointer value of a variable in infolist
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_infolist_pointer)
|
||||
{
|
||||
char *value;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_pointer");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
if (items < 2)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_pointer");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
value = script_ptr2str (weechat_infolist_pointer (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
|
||||
SvPV (ST (1), PL_na))); /* variable */
|
||||
|
||||
PERL_RETURN_STRING_FREE(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::infolist_time: get time value of a variable in infolist
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_infolist_time)
|
||||
{
|
||||
time_t time;
|
||||
char timebuffer[64], *value;
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_time");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
if (items < 2)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_time");
|
||||
PERL_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
time = weechat_infolist_time (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
|
||||
SvPV (ST (1), PL_na)); /* variable */
|
||||
strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
|
||||
value = strdup (timebuffer);
|
||||
|
||||
PERL_RETURN_STRING_FREE(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat::infolist_free: free infolist
|
||||
*/
|
||||
|
||||
static XS (XS_weechat_infolist_free)
|
||||
{
|
||||
dXSARGS;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) cv;
|
||||
|
||||
if (!perl_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_free");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
if (items < 1)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_free");
|
||||
PERL_RETURN_ERROR;
|
||||
}
|
||||
|
||||
weechat_infolist_free (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
|
||||
|
||||
PERL_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_perl_api_init: initialize subroutines
|
||||
*/
|
||||
@@ -2794,8 +3382,25 @@ weechat_perl_api_init (pTHX)
|
||||
newXS ("weechat::nicklist_remove_group", XS_weechat_nicklist_remove_group, "weechat");
|
||||
newXS ("weechat::nicklist_remove_nick", XS_weechat_nicklist_remove_nick, "weechat");
|
||||
newXS ("weechat::nicklist_remove_all", XS_weechat_nicklist_remove_all, "weechat");
|
||||
newXS ("weechat::bar_item_search", XS_weechat_bar_item_search, "weechat");
|
||||
newXS ("weechat::bar_item_new", XS_weechat_bar_item_new, "weechat");
|
||||
newXS ("weechat::bar_item_update", XS_weechat_bar_item_update, "weechat");
|
||||
newXS ("weechat::bar_item_remove", XS_weechat_bar_item_remove, "weechat");
|
||||
newXS ("weechat::bar_search", XS_weechat_bar_search, "weechat");
|
||||
newXS ("weechat::bar_new", XS_weechat_bar_new, "weechat");
|
||||
newXS ("weechat::bar_update", XS_weechat_bar_update, "weechat");
|
||||
newXS ("weechat::bar_remove", XS_weechat_bar_remove, "weechat");
|
||||
newXS ("weechat::command", XS_weechat_command, "weechat");
|
||||
newXS ("weechat::info_get", XS_weechat_info_get, "weechat");
|
||||
newXS ("weechat::infolist_get", XS_weechat_infolist_get, "weechat");
|
||||
newXS ("weechat::infolist_next", XS_weechat_infolist_next, "weechat");
|
||||
newXS ("weechat::infolist_prev", XS_weechat_infolist_prev, "weechat");
|
||||
newXS ("weechat::infolist_fields", XS_weechat_infolist_fields, "weechat");
|
||||
newXS ("weechat::infolist_integer", XS_weechat_infolist_integer, "weechat");
|
||||
newXS ("weechat::infolist_string", XS_weechat_infolist_string, "weechat");
|
||||
newXS ("weechat::infolist_pointer", XS_weechat_infolist_pointer, "weechat");
|
||||
newXS ("weechat::infolist_time", XS_weechat_infolist_time, "weechat");
|
||||
newXS ("weechat::infolist_free", XS_weechat_infolist_free, "weechat");
|
||||
|
||||
/* interface constants */
|
||||
stash = gv_stashpv ("weechat", TRUE);
|
||||
|
||||
@@ -175,6 +175,7 @@ weechat_python_api_iconv_to_internal (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = weechat_iconv_to_internal (charset, string);
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -208,6 +209,7 @@ weechat_python_api_iconv_from_internal (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = weechat_iconv_from_internal (charset, string);
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -238,6 +240,7 @@ weechat_python_api_gettext (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = weechat_gettext (string);
|
||||
|
||||
PYTHON_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -271,6 +274,7 @@ weechat_python_api_ngettext (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = weechat_ngettext (single, plural, count);
|
||||
|
||||
PYTHON_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -363,6 +367,7 @@ weechat_python_api_list_new (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_list_new ());
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -398,6 +403,7 @@ weechat_python_api_list_add (PyObject *self, PyObject *args)
|
||||
result = script_ptr2str (weechat_list_add (script_str2ptr (weelist),
|
||||
data,
|
||||
where));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -431,6 +437,7 @@ weechat_python_api_list_search (PyObject *self, PyObject *args)
|
||||
|
||||
result = script_ptr2str (weechat_list_search (script_str2ptr (weelist),
|
||||
data));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -464,6 +471,7 @@ weechat_python_api_list_casesearch (PyObject *self, PyObject *args)
|
||||
|
||||
result = script_ptr2str (weechat_list_casesearch (script_str2ptr (weelist),
|
||||
data));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -562,6 +570,7 @@ weechat_python_api_list_next (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_list_next (script_str2ptr (item)));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -593,6 +602,7 @@ weechat_python_api_list_prev (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_list_prev (script_str2ptr (item)));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -623,6 +633,7 @@ weechat_python_api_list_string (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = weechat_list_string (script_str2ptr (item));
|
||||
|
||||
PYTHON_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -654,6 +665,7 @@ weechat_python_api_list_size (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
size = weechat_list_size (script_str2ptr (weelist));
|
||||
|
||||
PYTHON_RETURN_INT(size);
|
||||
}
|
||||
|
||||
@@ -825,6 +837,7 @@ weechat_python_api_config_new (PyObject *self, PyObject *args)
|
||||
filename,
|
||||
&weechat_python_api_config_reload_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -972,6 +985,7 @@ weechat_python_api_config_new_section (PyObject *self, PyObject *args)
|
||||
function_write,
|
||||
&weechat_python_api_config_section_write_default_cb,
|
||||
function_write_default));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1005,6 +1019,7 @@ weechat_python_api_config_search_section (PyObject *self, PyObject *args)
|
||||
|
||||
result = script_ptr2str (weechat_config_search_section (script_str2ptr (config_file),
|
||||
section_name));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1086,6 +1101,7 @@ weechat_python_api_config_new_option (PyObject *self, PyObject *args)
|
||||
default_value,
|
||||
&weechat_python_api_config_option_change_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1121,6 +1137,7 @@ weechat_python_api_config_search_option (PyObject *self, PyObject *args)
|
||||
result = script_ptr2str (weechat_config_search_option (script_str2ptr (config_file),
|
||||
script_str2ptr (section),
|
||||
option_name));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1152,6 +1169,7 @@ weechat_python_api_config_string_to_boolean (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
value = weechat_config_string_to_boolean (text);
|
||||
|
||||
PYTHON_RETURN_INT(value);
|
||||
}
|
||||
|
||||
@@ -1187,6 +1205,7 @@ weechat_python_api_config_option_set (PyObject *self, PyObject *args)
|
||||
rc = weechat_config_option_set (script_str2ptr (option),
|
||||
new_value,
|
||||
run_callback);
|
||||
|
||||
PYTHON_RETURN_INT(rc);
|
||||
}
|
||||
|
||||
@@ -1218,6 +1237,7 @@ weechat_python_api_config_boolean (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
value = weechat_config_boolean (script_str2ptr (option));
|
||||
|
||||
PYTHON_RETURN_INT(value);
|
||||
}
|
||||
|
||||
@@ -1249,6 +1269,7 @@ weechat_python_api_config_integer (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
value = weechat_config_integer (script_str2ptr (option));
|
||||
|
||||
PYTHON_RETURN_INT(value);
|
||||
}
|
||||
|
||||
@@ -1279,6 +1300,7 @@ weechat_python_api_config_string (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
value = weechat_config_string (script_str2ptr (option));
|
||||
|
||||
PYTHON_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
@@ -1310,6 +1332,7 @@ weechat_python_api_config_color (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
value = weechat_config_color (script_str2ptr (option));
|
||||
|
||||
PYTHON_RETURN_INT(value);
|
||||
}
|
||||
|
||||
@@ -1377,6 +1400,7 @@ weechat_python_api_config_write (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
rc = weechat_config_write (script_str2ptr (config_file));
|
||||
|
||||
PYTHON_RETURN_INT(rc);
|
||||
}
|
||||
|
||||
@@ -1408,6 +1432,7 @@ weechat_python_api_config_read (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
rc = weechat_config_read (script_str2ptr (config_file));
|
||||
|
||||
PYTHON_RETURN_INT(rc);
|
||||
}
|
||||
|
||||
@@ -1439,6 +1464,7 @@ weechat_python_api_config_reload (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
rc = weechat_config_reload (script_str2ptr (config_file));
|
||||
|
||||
PYTHON_RETURN_INT(rc);
|
||||
}
|
||||
|
||||
@@ -1502,6 +1528,7 @@ weechat_python_api_prefix (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = weechat_prefix (prefix);
|
||||
|
||||
PYTHON_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -1532,6 +1559,7 @@ weechat_python_api_color (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = weechat_color (color);
|
||||
|
||||
PYTHON_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
@@ -1751,6 +1779,7 @@ weechat_python_api_hook_command (PyObject *self, PyObject *args)
|
||||
completion,
|
||||
&weechat_python_api_hook_command_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1824,6 +1853,7 @@ weechat_python_api_hook_timer (PyObject *self, PyObject *args)
|
||||
max_calls,
|
||||
&weechat_python_api_hook_timer_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1899,6 +1929,7 @@ weechat_python_api_hook_fd (PyObject *self, PyObject *args)
|
||||
exception,
|
||||
&weechat_python_api_hook_fd_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -1982,6 +2013,7 @@ weechat_python_api_hook_print (PyObject *self, PyObject *args)
|
||||
strip_colors,
|
||||
&weechat_python_api_hook_print_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2072,6 +2104,7 @@ weechat_python_api_hook_signal (PyObject *self, PyObject *args)
|
||||
signal,
|
||||
&weechat_python_api_hook_signal_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2199,6 +2232,7 @@ weechat_python_api_hook_config (PyObject *self, PyObject *args)
|
||||
option,
|
||||
&weechat_python_api_hook_config_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2275,6 +2309,7 @@ weechat_python_api_hook_completion (PyObject *self, PyObject *args)
|
||||
completion,
|
||||
&weechat_python_api_hook_completion_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2335,6 +2370,7 @@ weechat_python_api_hook_modifier (PyObject *self, PyObject *args)
|
||||
modifier,
|
||||
&weechat_python_api_hook_modifier_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2368,6 +2404,7 @@ weechat_python_api_hook_modifier_exec (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = weechat_hook_modifier_exec (modifier, modifier_data, string);
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2533,6 +2570,7 @@ weechat_python_api_buffer_new (PyObject *self, PyObject *args)
|
||||
function_input,
|
||||
&weechat_python_api_close_cb,
|
||||
function_close));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2566,6 +2604,7 @@ weechat_python_api_buffer_search (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_buffer_search (category, name));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2633,6 +2672,7 @@ weechat_python_api_buffer_get (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
value = weechat_buffer_get (script_str2ptr (buffer), property);
|
||||
|
||||
PYTHON_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
@@ -2709,6 +2749,7 @@ weechat_python_api_nicklist_add_group (PyObject *self, PyObject *args)
|
||||
name,
|
||||
color,
|
||||
visible));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2744,6 +2785,7 @@ weechat_python_api_nicklist_search_group (PyObject *self, PyObject *args)
|
||||
result = script_ptr2str (weechat_nicklist_search_group (script_str2ptr (buffer),
|
||||
script_str2ptr (from_group),
|
||||
name));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2795,6 +2837,7 @@ weechat_python_api_nicklist_add_nick (PyObject *self, PyObject *args)
|
||||
char_prefix,
|
||||
prefix_color,
|
||||
visible));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2830,6 +2873,7 @@ weechat_python_api_nicklist_search_nick (PyObject *self, PyObject *args)
|
||||
result = script_ptr2str (weechat_nicklist_search_nick (script_str2ptr (buffer),
|
||||
script_str2ptr (from_group),
|
||||
name));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
@@ -2930,6 +2974,312 @@ weechat_python_api_nicklist_remove_all (PyObject *self, PyObject *args)
|
||||
PYTHON_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_bar_item_search: search a bar item
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_bar_item_search (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *name, *result;
|
||||
PyObject *object;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_search");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
name = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &name))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_search");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_bar_item_search (name));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_bar_item_build_cb: callback for building bar item
|
||||
*/
|
||||
|
||||
char *
|
||||
weechat_python_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width)
|
||||
{
|
||||
struct t_script_callback *script_callback;
|
||||
char *python_argv[4], *ret;
|
||||
static char buf[32];
|
||||
|
||||
script_callback = (struct t_script_callback *)data;
|
||||
|
||||
snprintf (buf, sizeof (buf) - 1, "%d", max_width);
|
||||
|
||||
python_argv[0] = script_ptr2str (item);
|
||||
python_argv[1] = script_ptr2str (window);
|
||||
python_argv[2] = buf;
|
||||
python_argv[3] = NULL;
|
||||
|
||||
ret = (char *)weechat_python_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
python_argv);
|
||||
|
||||
if (python_argv[0])
|
||||
free (python_argv[0]);
|
||||
if (python_argv[1])
|
||||
free (python_argv[1]);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_bar_item_new: add a new bar item
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_bar_item_new (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *name, *function, *result;
|
||||
PyObject *object;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_new");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
name = NULL;
|
||||
function = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "ss", &name, &function))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_new");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
result = script_ptr2str (script_api_bar_item_new (weechat_python_plugin,
|
||||
python_current_script,
|
||||
name,
|
||||
&weechat_python_api_bar_item_build_cb,
|
||||
function));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_bar_item_update: update a bar item on screen
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_bar_item_update (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *name;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_update");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
name = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &name))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_update");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
weechat_bar_item_update (name);
|
||||
|
||||
PYTHON_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_bar_item_remove: remove a bar item
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_bar_item_remove (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *item;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_remove");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
item = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &item))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_remove");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
script_api_bar_item_remove (weechat_python_plugin,
|
||||
python_current_script,
|
||||
script_str2ptr (item));
|
||||
|
||||
PYTHON_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_bar_search: search a bar
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_bar_search (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *name, *result;
|
||||
PyObject *object;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_search");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
name = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &name))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_search");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_bar_search (name));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_bar_new: add a new bar
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_bar_new (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *name, *type, *position, *items, *result;
|
||||
int size, separator;
|
||||
PyObject *object;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_new");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
name = NULL;
|
||||
type = NULL;
|
||||
position = NULL;
|
||||
size = 0;
|
||||
separator = 0;
|
||||
items = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "sssiis", &name, &type, &position, &size,
|
||||
&separator, &items))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_new");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
result = script_ptr2str (weechat_bar_new (name,
|
||||
type,
|
||||
position,
|
||||
size,
|
||||
separator,
|
||||
items));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(result);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_bar_update: update a bar on screen
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_bar_update (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *name;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
name = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &name))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
weechat_bar_update (name);
|
||||
|
||||
PYTHON_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_bar_remove: remove a bar
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_bar_remove (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *bar;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_remove");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
bar = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &bar))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_remove");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
weechat_bar_remove (script_str2ptr (bar));
|
||||
|
||||
PYTHON_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_command: send command to server
|
||||
*/
|
||||
@@ -2992,9 +3342,308 @@ weechat_python_api_info_get (PyObject *self, PyObject *args)
|
||||
}
|
||||
|
||||
value = weechat_info_get (info);
|
||||
|
||||
PYTHON_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_infolist_get: get list with infos
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_infolist_get (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *name, *pointer, *value;
|
||||
PyObject *object;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_get");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
name = NULL;
|
||||
pointer = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "ss", &name, &pointer))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
value = script_ptr2str (weechat_infolist_get (name,
|
||||
script_str2ptr (pointer)));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_infolist_next: move item pointer to next item in infolist
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_infolist_next (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *infolist;
|
||||
int value;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_next");
|
||||
PYTHON_RETURN_INT(0);
|
||||
}
|
||||
|
||||
infolist = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &infolist))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_next");
|
||||
PYTHON_RETURN_INT(0);
|
||||
}
|
||||
|
||||
value = weechat_infolist_next (script_str2ptr (infolist));
|
||||
|
||||
PYTHON_RETURN_INT(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_infolist_prev: move item pointer to previous item in infolist
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_infolist_prev (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *infolist;
|
||||
int value;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_prev");
|
||||
PYTHON_RETURN_INT(0);
|
||||
}
|
||||
|
||||
infolist = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &infolist))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_prev");
|
||||
PYTHON_RETURN_INT(0);
|
||||
}
|
||||
|
||||
value = weechat_infolist_prev (script_str2ptr (infolist));
|
||||
|
||||
PYTHON_RETURN_INT(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_infolist_fields: get list of fields for current item of infolist
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_infolist_fields (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *infolist, *value;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_fields");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
infolist = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &infolist))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_fields");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
value = weechat_infolist_fields (script_str2ptr (infolist));
|
||||
|
||||
PYTHON_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_infolist_integer: get integer value of a variable in infolist
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_infolist_integer (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *infolist, *variable;
|
||||
int value;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_integer");
|
||||
PYTHON_RETURN_INT(0);
|
||||
}
|
||||
|
||||
infolist = NULL;
|
||||
variable = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s&", &infolist, &variable))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_integer");
|
||||
PYTHON_RETURN_INT(0);
|
||||
}
|
||||
|
||||
value = weechat_infolist_integer (script_str2ptr (infolist),
|
||||
variable);
|
||||
|
||||
PYTHON_RETURN_INT(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_infolist_string: get string value of a variable in infolist
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_infolist_string (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *infolist, *variable, *value;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_string");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
infolist = NULL;
|
||||
variable = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "ss", &infolist, &variable))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_string");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
value = weechat_infolist_string (script_str2ptr (infolist),
|
||||
variable);
|
||||
|
||||
PYTHON_RETURN_STRING(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_infolist_pointer: get pointer value of a variable in infolist
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_infolist_pointer (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *infolist, *variable, *value;
|
||||
PyObject *object;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_pointer");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
infolist = NULL;
|
||||
variable = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "ss", &infolist, &variable))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_pointer");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
value = script_ptr2str (weechat_infolist_string (script_str2ptr (infolist),
|
||||
variable));
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_infolist_time: get time value of a variable in infolist
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_infolist_time (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *infolist, *variable, timebuffer[64], *value;
|
||||
time_t time;
|
||||
PyObject *object;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_time");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
infolist = NULL;
|
||||
variable = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "ss", &infolist, &variable))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_time");
|
||||
PYTHON_RETURN_EMPTY;
|
||||
}
|
||||
|
||||
time = weechat_infolist_time (script_str2ptr (infolist),
|
||||
variable);
|
||||
strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
|
||||
value = strdup (timebuffer);
|
||||
|
||||
PYTHON_RETURN_STRING_FREE(value);
|
||||
}
|
||||
|
||||
/*
|
||||
* weechat_python_api_infolist_free: free infolist
|
||||
*/
|
||||
|
||||
static PyObject *
|
||||
weechat_python_api_infolist_free (PyObject *self, PyObject *args)
|
||||
{
|
||||
char *infolist;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) self;
|
||||
|
||||
if (!python_current_script)
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_free");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
infolist = NULL;
|
||||
|
||||
if (!PyArg_ParseTuple (args, "s", &infolist))
|
||||
{
|
||||
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_free");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
weechat_infolist_free (script_str2ptr (infolist));
|
||||
|
||||
PYTHON_RETURN_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Python subroutines
|
||||
*/
|
||||
@@ -3068,7 +3717,24 @@ PyMethodDef weechat_python_funcs[] =
|
||||
{ "nicklist_remove_group", &weechat_python_api_nicklist_remove_group, METH_VARARGS, "" },
|
||||
{ "nicklist_remove_nick", &weechat_python_api_nicklist_remove_nick, METH_VARARGS, "" },
|
||||
{ "nicklist_remove_all", &weechat_python_api_nicklist_remove_all, METH_VARARGS, "" },
|
||||
{ "bar_item_search", &weechat_python_api_bar_item_search, METH_VARARGS, "" },
|
||||
{ "bar_item_new", &weechat_python_api_bar_item_new, METH_VARARGS, "" },
|
||||
{ "bar_item_update", &weechat_python_api_bar_item_update, METH_VARARGS, "" },
|
||||
{ "bar_item_remove", &weechat_python_api_bar_item_remove, METH_VARARGS, "" },
|
||||
{ "bar_search", &weechat_python_api_bar_search, METH_VARARGS, "" },
|
||||
{ "bar_new", &weechat_python_api_bar_new, METH_VARARGS, "" },
|
||||
{ "bar_update", &weechat_python_api_bar_update, METH_VARARGS, "" },
|
||||
{ "bar_remove", &weechat_python_api_bar_remove, METH_VARARGS, "" },
|
||||
{ "command", &weechat_python_api_command, METH_VARARGS, "" },
|
||||
{ "info_get", &weechat_python_api_info_get, METH_VARARGS, "" },
|
||||
{ "infolist_get", &weechat_python_api_infolist_get, METH_VARARGS, "" },
|
||||
{ "infolist_next", &weechat_python_api_infolist_next, METH_VARARGS, "" },
|
||||
{ "infolist_prev", &weechat_python_api_infolist_prev, METH_VARARGS, "" },
|
||||
{ "infolist_fields", &weechat_python_api_infolist_fields, METH_VARARGS, "" },
|
||||
{ "infolist_integer", &weechat_python_api_infolist_integer, METH_VARARGS, "" },
|
||||
{ "infolist_string", &weechat_python_api_infolist_string, METH_VARARGS, "" },
|
||||
{ "infolist_pointer", &weechat_python_api_infolist_pointer, METH_VARARGS, "" },
|
||||
{ "infolist_time", &weechat_python_api_infolist_time, METH_VARARGS, "" },
|
||||
{ "infolist_free", &weechat_python_api_infolist_free, METH_VARARGS, "" },
|
||||
{ NULL, NULL, 0, NULL }
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -814,6 +814,71 @@ script_api_buffer_close (struct t_weechat_plugin *weechat_plugin,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* script_api_bar_item_new: add a new bar item
|
||||
*/
|
||||
|
||||
struct t_gui_bar_item *
|
||||
script_api_bar_item_new (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
char *name,
|
||||
char *(*build_callback)(void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int remaining_space),
|
||||
char *function_build)
|
||||
{
|
||||
struct t_script_callback *new_script_callback;
|
||||
struct t_gui_bar_item *new_item;
|
||||
|
||||
new_script_callback = script_callback_alloc ();
|
||||
if (!new_script_callback)
|
||||
return NULL;
|
||||
|
||||
new_item = weechat_bar_item_new (name,
|
||||
(function_build && function_build[0]) ?
|
||||
build_callback : NULL,
|
||||
(function_build && function_build[0]) ?
|
||||
new_script_callback : NULL);
|
||||
if (!new_item)
|
||||
{
|
||||
free (new_script_callback);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
new_script_callback->script = script;
|
||||
new_script_callback->function = (function_build && function_build[0]) ?
|
||||
strdup (function_build) : NULL;
|
||||
new_script_callback->bar_item = new_item;
|
||||
script_callback_add (script, new_script_callback);
|
||||
|
||||
return new_item;
|
||||
}
|
||||
|
||||
/*
|
||||
* script_api_bar_item_remove: remove a bar item
|
||||
*/
|
||||
|
||||
void
|
||||
script_api_bar_item_remove (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
struct t_gui_bar_item *item)
|
||||
{
|
||||
struct t_script_callback *ptr_script_callback;
|
||||
|
||||
if (!weechat_plugin || !script || !item)
|
||||
return;
|
||||
|
||||
weechat_bar_item_remove (item);
|
||||
|
||||
for (ptr_script_callback = script->callbacks; ptr_script_callback;
|
||||
ptr_script_callback = ptr_script_callback->next_callback)
|
||||
{
|
||||
if (ptr_script_callback->bar_item == item)
|
||||
script_callback_remove (script, ptr_script_callback);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* script_api_command: execute a command (simulate user entry)
|
||||
*/
|
||||
|
||||
@@ -151,6 +151,17 @@ extern void script_api_buffer_close (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
struct t_gui_buffer *buffer,
|
||||
int switch_to_another);
|
||||
extern struct t_gui_bar_item *script_api_bar_item_new (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
char *name,
|
||||
char *(*build_callback)(void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int remaining_space),
|
||||
char *function_build);
|
||||
extern void script_api_bar_item_remove (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
struct t_gui_bar_item *item);
|
||||
extern void script_api_command (struct t_weechat_plugin *weechat_plugin,
|
||||
struct t_plugin_script *script,
|
||||
struct t_gui_buffer *buffer,
|
||||
|
||||
@@ -46,6 +46,7 @@ script_callback_alloc ()
|
||||
new_script_callback->config_option = NULL;
|
||||
new_script_callback->hook = NULL;
|
||||
new_script_callback->buffer = NULL;
|
||||
new_script_callback->bar_item = NULL;
|
||||
return new_script_callback;
|
||||
}
|
||||
|
||||
@@ -85,7 +86,7 @@ script_callback_remove (struct t_plugin_script *script,
|
||||
if (script->callbacks == script_callback)
|
||||
script->callbacks = script_callback->next_callback;
|
||||
|
||||
/* unhook and free data */
|
||||
/* free data */
|
||||
if (script_callback->function)
|
||||
free (script_callback->function);
|
||||
|
||||
@@ -117,8 +118,12 @@ script_callback_print_log (struct t_weechat_plugin *weechat_plugin,
|
||||
weechat_log_printf ("[callback (addr:0x%x)]", script_callback);
|
||||
weechat_log_printf (" script. . . . . . . : 0x%x", script_callback->script);
|
||||
weechat_log_printf (" function. . . . . . : '%s'", script_callback->function);
|
||||
weechat_log_printf (" config_file . . . . : '%s'", script_callback->config_file);
|
||||
weechat_log_printf (" config_section. . . : '%s'", script_callback->config_section);
|
||||
weechat_log_printf (" config_option . . . : '%s'", script_callback->config_option);
|
||||
weechat_log_printf (" hook. . . . . . . . : 0x%x", script_callback->hook);
|
||||
weechat_log_printf (" buffer. . . . . . . : 0x%x", script_callback->buffer);
|
||||
weechat_log_printf (" bar_item. . . . . . : 0x%x", script_callback->bar_item);
|
||||
weechat_log_printf (" prev_callback . . . : 0x%x", script_callback->prev_callback);
|
||||
weechat_log_printf (" next_callback . . . : 0x%x", script_callback->next_callback);
|
||||
}
|
||||
|
||||
@@ -27,7 +27,8 @@ struct t_script_callback
|
||||
struct t_config_section *config_section; /* not NULL for config section */
|
||||
struct t_config_option *config_option; /* not NULL for config option */
|
||||
struct t_hook *hook; /* not NULL for hook */
|
||||
struct t_gui_buffer *buffer; /* not NULL for buffer callback*/
|
||||
struct t_gui_buffer *buffer; /* not NULL for buffer */
|
||||
struct t_gui_bar_item *bar_item; /* not NULL for bar item */
|
||||
struct t_script_callback *prev_callback; /* link to next callback */
|
||||
struct t_script_callback *next_callback; /* link to previous callback */
|
||||
};
|
||||
|
||||
@@ -416,10 +416,12 @@ script_remove (struct t_weechat_plugin *weechat_plugin,
|
||||
for (ptr_script_callback = script->callbacks; ptr_script_callback;
|
||||
ptr_script_callback = ptr_script_callback->next_callback)
|
||||
{
|
||||
/* unhook */
|
||||
if (ptr_script_callback->hook)
|
||||
{
|
||||
weechat_unhook (ptr_script_callback->hook);
|
||||
}
|
||||
/* free config file */
|
||||
if (ptr_script_callback->config_file
|
||||
&& !ptr_script_callback->config_section
|
||||
&& !ptr_script_callback->config_option)
|
||||
@@ -428,6 +430,9 @@ script_remove (struct t_weechat_plugin *weechat_plugin,
|
||||
weechat_config_write (ptr_script_callback->config_file);
|
||||
weechat_config_free (ptr_script_callback->config_file);
|
||||
}
|
||||
/* remove bar item */
|
||||
if (ptr_script_callback->bar_item)
|
||||
weechat_bar_item_remove (ptr_script_callback->bar_item);
|
||||
}
|
||||
|
||||
/* remove all callbacks created by this script */
|
||||
|
||||
@@ -23,7 +23,10 @@
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
struct t_gui_window;
|
||||
struct t_gui_buffer;
|
||||
struct t_gui_bar;
|
||||
struct t_gui_bar_item;
|
||||
struct t_weelist;
|
||||
|
||||
/* macros for defining plugin infos */
|
||||
@@ -319,6 +322,24 @@ struct t_weechat_plugin
|
||||
struct t_gui_nick *nick);
|
||||
void (*nicklist_remove_all) (struct t_gui_buffer *buffer);
|
||||
|
||||
/* bars */
|
||||
struct t_gui_bar_item *(*bar_item_search) (char *name);
|
||||
struct t_gui_bar_item *(*bar_item_new) (struct t_weechat_plugin *plugin,
|
||||
char *name,
|
||||
char *(*build_callback)(void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
int max_width),
|
||||
void *build_callback_data);
|
||||
void (*bar_item_update) (char *name);
|
||||
void (*bar_item_remove) (struct t_gui_bar_item *item);
|
||||
struct t_gui_bar *(*bar_search) (char *name);
|
||||
struct t_gui_bar *(*bar_new) (struct t_weechat_plugin *plugin, char *name,
|
||||
char *type, char *position, int size,
|
||||
int separator, char *items);
|
||||
void (*bar_update) (char *name);
|
||||
void (*bar_remove) (struct t_gui_bar *bar);
|
||||
|
||||
/* command */
|
||||
void (*command) (struct t_weechat_plugin *plugin,
|
||||
struct t_gui_buffer *buffer, char *command);
|
||||
@@ -629,6 +650,27 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
|
||||
#define weechat_nicklist_remove_all(__buffer) \
|
||||
weechat_plugin->nicklist_remove_all(__buffer)
|
||||
|
||||
/* bars */
|
||||
#define weechat_bar_item_search(__name) \
|
||||
weechat_plugin->bar_item_search(__name)
|
||||
#define weechat_bar_item_new(__name, __build_callback, __data) \
|
||||
weechat_plugin->bar_item_new(weechat_plugin, __name, \
|
||||
__build_callback, __data)
|
||||
#define weechat_bar_item_update(__name) \
|
||||
weechat_plugin->bar_item_update(__name)
|
||||
#define weechat_bar_item_remove(__item) \
|
||||
weechat_plugin->bar_item_remove(__item)
|
||||
#define weechat_bar_search(__name) \
|
||||
weechat_plugin->bar_search(__name)
|
||||
#define weechat_bar_new(__name, __type, __position, __size, \
|
||||
__separator, __items) \
|
||||
weechat_plugin->bar_new(weechat_plugin, __name, __type, __position, \
|
||||
__size, __separator, __items)
|
||||
#define weechat_bar_update(__name) \
|
||||
weechat_plugin->bar_update(__name)
|
||||
#define weechat_bar_remove(__bar) \
|
||||
weechat_plugin->bar_remove(__bar)
|
||||
|
||||
/* command */
|
||||
#define weechat_command(__buffer, __command) \
|
||||
weechat_plugin->command(weechat_plugin, __buffer, __command)
|
||||
|
||||
Reference in New Issue
Block a user