mirror of
https://github.com/profanity-im/profanity.git
synced 2024-12-04 14:46:46 -05:00
Plugins: Added callbacks init and close functions
Included destroy function in PluginWindowCallback
This commit is contained in:
parent
4094b75ccc
commit
5cabcf9b79
@ -239,12 +239,16 @@ api_win_exists(const char *tag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
api_win_create(const char *tag, void *callback,
|
api_win_create(
|
||||||
|
const char *tag,
|
||||||
|
void *callback,
|
||||||
|
void(*destroy)(void *callback),
|
||||||
void(*callback_func)(PluginWindowCallback *window_callback, const char *tag, const char * const line))
|
void(*callback_func)(PluginWindowCallback *window_callback, const char *tag, const char * const line))
|
||||||
{
|
{
|
||||||
PluginWindowCallback *window = malloc(sizeof(PluginWindowCallback));
|
PluginWindowCallback *window = malloc(sizeof(PluginWindowCallback));
|
||||||
window->callback = callback;
|
window->callback = callback;
|
||||||
window->callback_func = callback_func;
|
window->callback_func = callback_func;
|
||||||
|
window->destroy = destroy;
|
||||||
callbacks_add_window_handler(tag, window);
|
callbacks_add_window_handler(tag, window);
|
||||||
wins_new_plugin(tag);
|
wins_new_plugin(tag);
|
||||||
|
|
||||||
|
@ -61,7 +61,10 @@ void api_log_warning(const char *message);
|
|||||||
void api_log_error(const char *message);
|
void api_log_error(const char *message);
|
||||||
|
|
||||||
int api_win_exists(const char *tag);
|
int api_win_exists(const char *tag);
|
||||||
void api_win_create(const char *tag, void *callback,
|
void api_win_create(
|
||||||
|
const char *tag,
|
||||||
|
void *callback,
|
||||||
|
void(*destroy)(void *callback),
|
||||||
void(*callback_func)(PluginWindowCallback *window_callback, char *tag, char *line));
|
void(*callback_func)(PluginWindowCallback *window_callback, char *tag, char *line));
|
||||||
int api_win_focus(const char *tag);
|
int api_win_focus(const char *tag);
|
||||||
int api_win_show(const char *tag, const char *line);
|
int api_win_show(const char *tag, const char *line);
|
||||||
|
@ -167,7 +167,7 @@ c_api_win_create(char *tag, void(*callback)(char *tag, char *line))
|
|||||||
{
|
{
|
||||||
WindowWrapper *wrapper = malloc(sizeof(WindowWrapper));
|
WindowWrapper *wrapper = malloc(sizeof(WindowWrapper));
|
||||||
wrapper->func = callback;
|
wrapper->func = callback;
|
||||||
api_win_create(tag, wrapper, c_window_callback);
|
api_win_create(tag, wrapper, free, c_window_callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -46,6 +46,27 @@ static GSList *p_commands = NULL;
|
|||||||
static GSList *p_timed_functions = NULL;
|
static GSList *p_timed_functions = NULL;
|
||||||
static GHashTable *p_window_callbacks = NULL;
|
static GHashTable *p_window_callbacks = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
_free_window_callback(PluginWindowCallback *window_callback)
|
||||||
|
{
|
||||||
|
if (window_callback->destroy) {
|
||||||
|
window_callback->destroy(window_callback->callback);
|
||||||
|
}
|
||||||
|
free(window_callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
callbacks_init(void)
|
||||||
|
{
|
||||||
|
p_window_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, free, (GDestroyNotify)_free_window_callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
callbacks_close(void)
|
||||||
|
{
|
||||||
|
g_hash_table_destroy(p_window_callbacks);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
callbacks_add_command(PluginCommand *command)
|
callbacks_add_command(PluginCommand *command)
|
||||||
{
|
{
|
||||||
@ -64,10 +85,6 @@ callbacks_add_timed(PluginTimedFunction *timed_function)
|
|||||||
void
|
void
|
||||||
callbacks_add_window_handler(const char *tag, PluginWindowCallback *window_callback)
|
callbacks_add_window_handler(const char *tag, PluginWindowCallback *window_callback)
|
||||||
{
|
{
|
||||||
if (p_window_callbacks == NULL) {
|
|
||||||
p_window_callbacks = g_hash_table_new(g_str_hash, g_str_equal);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_hash_table_insert(p_window_callbacks, strdup(tag), window_callback);
|
g_hash_table_insert(p_window_callbacks, strdup(tag), window_callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,9 +57,13 @@ typedef struct p_timed_function {
|
|||||||
|
|
||||||
typedef struct p_window_input_callback {
|
typedef struct p_window_input_callback {
|
||||||
void *callback;
|
void *callback;
|
||||||
|
void (*destroy)(void *callback);
|
||||||
void (*callback_func)(struct p_window_input_callback *window_callback, const char *tag, const char * const line);
|
void (*callback_func)(struct p_window_input_callback *window_callback, const char *tag, const char * const line);
|
||||||
} PluginWindowCallback;
|
} PluginWindowCallback;
|
||||||
|
|
||||||
|
void callbacks_init(void);
|
||||||
|
void callbacks_close(void);
|
||||||
|
|
||||||
void callbacks_add_command(PluginCommand *command);
|
void callbacks_add_command(PluginCommand *command);
|
||||||
void callbacks_add_timed(PluginTimedFunction *timed_function);
|
void callbacks_add_timed(PluginTimedFunction *timed_function);
|
||||||
void callbacks_add_window_handler(const char *tag, PluginWindowCallback *window_callback);
|
void callbacks_add_window_handler(const char *tag, PluginWindowCallback *window_callback);
|
||||||
|
@ -57,6 +57,7 @@ void
|
|||||||
plugins_init(void)
|
plugins_init(void)
|
||||||
{
|
{
|
||||||
plugins = NULL;
|
plugins = NULL;
|
||||||
|
callbacks_init();
|
||||||
autocompleters_init();
|
autocompleters_init();
|
||||||
plugin_themes_init();
|
plugin_themes_init();
|
||||||
|
|
||||||
@ -404,6 +405,7 @@ plugins_shutdown(void)
|
|||||||
|
|
||||||
autocompleters_destroy();
|
autocompleters_destroy();
|
||||||
plugin_themes_close();
|
plugin_themes_close();
|
||||||
|
callbacks_close();
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar *
|
gchar *
|
||||||
|
Loading…
Reference in New Issue
Block a user