1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Merge remote-tracking branch 'origin/osx-functional' into osx-functional

This commit is contained in:
James Booth 2016-03-10 22:23:08 +00:00
commit f2bb867934
15 changed files with 109 additions and 23 deletions

View File

@ -12,9 +12,7 @@
otrl_init
Memcheck:Leak
...
fun:_otr_init
fun:_init
fun:prof_run
fun:otrl_init
...
}

View File

@ -398,7 +398,7 @@ static struct cmd_t command_defs[] =
CMD_SYN(
"/group",
"/group show <group>",
"/group add <group> <contat>"
"/group add <group> <contat>",
"/group remove <group> <contact>")
CMD_DESC(
"View, add to, and remove from roster groups. "

View File

@ -5160,7 +5160,7 @@ cmd_log(ProfWin *window, const char *const command, gchar **args)
gboolean res = strtoi_range(value, &intval, PREFS_MIN_LOG_SIZE, INT_MAX, &err_msg);
if (res) {
prefs_set_max_log_size(intval);
cons_show("Log maxinum size set to %d bytes", intval);
cons_show("Log maximum size set to %d bytes", intval);
} else {
cons_show(err_msg);
free(err_msg);

View File

@ -411,6 +411,8 @@ tlscerts_free(TLSCertificate *cert)
free(cert->key_alg);
free(cert->signature_alg);
free(cert);
}
}

View File

@ -197,6 +197,17 @@ api_get_current_muc(void)
}
}
int
api_current_win_is_console(void)
{
ProfWin *current = wins_get_current();
if (current && current->type == WIN_CONSOLE) {
return 1;
} else {
return 0;
}
}
void
api_log_debug(const char *message)
{
@ -228,12 +239,16 @@ api_win_exists(const char *tag)
}
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))
{
PluginWindowCallback *window = malloc(sizeof(PluginWindowCallback));
window->callback = callback;
window->callback_func = callback_func;
window->destroy = destroy;
callbacks_add_window_handler(tag, window);
wins_new_plugin(tag);

View File

@ -43,8 +43,10 @@ int api_cons_show_themed(const char *const group, const char *const item, const
int api_cons_bad_cmd_usage(const char *const cmd);
void api_notify(const char *message, const char *category, int timeout_ms);
void api_send_line(char *line);
char * api_get_current_recipient(void);
char * api_get_current_muc(void);
gboolean api_current_win_is_console(void);
void api_register_command(const char *command_name, int min_args, int max_args,
const char **synopsis, const char *description, const char *arguments[][2], const char **examples,
@ -59,7 +61,10 @@ void api_log_warning(const char *message);
void api_log_error(const char *message);
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));
int api_win_focus(const char *tag);
int api_win_show(const char *tag, const char *line);

View File

@ -67,10 +67,12 @@ autocompleters_complete(const char * const input)
while (curr) {
result = autocomplete_param_with_ac(input, curr->data, g_hash_table_lookup(autocompleters, curr->data), TRUE);
if (result) {
g_list_free(keys);
return result;
}
curr = g_list_next(curr);
}
g_list_free(keys);
return NULL;
}
@ -84,6 +86,8 @@ autocompleters_reset(void)
autocomplete_reset(curr->data);
curr = g_list_next(curr);
}
g_list_free(acs);
}
void autocompleters_destroy(void)

View File

@ -126,6 +126,12 @@ c_api_get_current_muc(void)
return api_get_current_muc();
}
static int
c_api_current_win_is_console()
{
return api_current_win_is_console();
}
static void
c_api_log_debug(const char *message)
{
@ -161,7 +167,7 @@ c_api_win_create(char *tag, void(*callback)(char *tag, char *line))
{
WindowWrapper *wrapper = malloc(sizeof(WindowWrapper));
wrapper->func = callback;
api_win_create(tag, wrapper, c_window_callback);
api_win_create(tag, wrapper, free, c_window_callback);
}
static int
@ -220,6 +226,7 @@ c_api_init(void)
prof_send_line = c_api_send_line;
prof_get_current_recipient = c_api_get_current_recipient;
prof_get_current_muc = c_api_get_current_muc;
prof_current_win_is_console = c_api_current_win_is_console;
prof_log_debug = c_api_log_debug;
prof_log_info = c_api_log_info;
prof_log_warning = c_api_log_warning;

View File

@ -46,6 +46,27 @@ static GSList *p_commands = NULL;
static GSList *p_timed_functions = 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
callbacks_add_command(PluginCommand *command)
{
@ -64,10 +85,6 @@ callbacks_add_timed(PluginTimedFunction *timed_function)
void
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);
}

View File

@ -57,9 +57,13 @@ typedef struct p_timed_function {
typedef struct p_window_input_callback {
void *callback;
void (*destroy)(void *callback);
void (*callback_func)(struct p_window_input_callback *window_callback, const char *tag, const char * const line);
} PluginWindowCallback;
void callbacks_init(void);
void callbacks_close(void);
void callbacks_add_command(PluginCommand *command);
void callbacks_add_timed(PluginTimedFunction *timed_function);
void callbacks_add_window_handler(const char *tag, PluginWindowCallback *window_callback);

View File

@ -57,6 +57,7 @@ void
plugins_init(void)
{
plugins = NULL;
callbacks_init();
autocompleters_init();
plugin_themes_init();
@ -404,6 +405,7 @@ plugins_shutdown(void)
autocompleters_destroy();
plugin_themes_close();
callbacks_close();
}
gchar *

View File

@ -56,6 +56,7 @@ void (*prof_send_line)(char *line) = NULL;
char* (*prof_get_current_recipient)(void) = NULL;
char* (*prof_get_current_muc)(void) = NULL;
int (*prof_current_win_is_console)(void) = NULL;
void (*prof_log_debug)(const char *message) = NULL;
void (*prof_log_info)(const char *message) = NULL;

View File

@ -56,6 +56,7 @@ void (*prof_send_line)(char *line);
char* (*prof_get_current_recipient)(void);
char* (*prof_get_current_muc)(void);
int (*prof_current_win_is_console)(void);
void (*prof_log_debug)(const char *message);
void (*prof_log_info)(const char *message);

View File

@ -350,7 +350,7 @@ win_get_string(ProfWin *window)
{
ProfPluginWin *pluginwin = (ProfPluginWin*)window;
GString *gstring = g_string_new("");
g_string_append_printf(gstring, "%s plugin", pluginwin->tag);
g_string_append_printf(gstring, "Plugin: %s", pluginwin->tag);
char *res = gstring->str;
g_string_free(gstring, FALSE);
return res;
@ -419,27 +419,42 @@ win_free(ProfWin* window)
}
free(window->layout);
if (window->type == WIN_CHAT) {
switch (window->type) {
case WIN_CHAT:
{
ProfChatWin *chatwin = (ProfChatWin*)window;
free(chatwin->barejid);
free(chatwin->resource_override);
chat_state_free(chatwin->state);
break;
}
if (window->type == WIN_MUC) {
case WIN_MUC:
{
ProfMucWin *mucwin = (ProfMucWin*)window;
free(mucwin->roomjid);
break;
}
if (window->type == WIN_MUC_CONFIG) {
case WIN_MUC_CONFIG:
{
ProfMucConfWin *mucconf = (ProfMucConfWin*)window;
free(mucconf->roomjid);
form_destroy(mucconf->form);
break;
}
if (window->type == WIN_PRIVATE) {
case WIN_PRIVATE:
{
ProfPrivateWin *privatewin = (ProfPrivateWin*)window;
free(privatewin->fulljid);
break;
}
case WIN_PLUGIN:
{
ProfPluginWin *pluginwin = (ProfPluginWin*)window;
free(pluginwin->tag);
break;
}
default:
break;
}
free(window);

View File

@ -212,6 +212,7 @@ wins_get_plugin(const char *const tag)
if (window->type == WIN_PLUGIN) {
ProfPluginWin *pluginwin = (ProfPluginWin*)window;
if (g_strcmp0(pluginwin->tag, tag) == 0) {
g_list_free(values);
return pluginwin;
}
}
@ -389,6 +390,11 @@ wins_get_by_string(char *str)
return (ProfWin*)privwin;
}
ProfPluginWin *pluginwin = wins_get_plugin(str);
if (pluginwin) {
return (ProfWin*)pluginwin;
}
return NULL;
}
@ -539,6 +545,13 @@ wins_close_by_num(int i)
autocomplete_remove(wins_close_ac, "xmlconsole");
break;
}
case WIN_PLUGIN:
{
ProfPluginWin *pluginwin = (ProfPluginWin*)window;
autocomplete_remove(wins_ac, pluginwin->tag);
autocomplete_remove(wins_close_ac, pluginwin->tag);
break;
}
case WIN_MUC_CONFIG:
default:
break;
@ -640,10 +653,12 @@ wins_new_plugin(const char * const tag)
{
GList *keys = g_hash_table_get_keys(windows);
int result = get_next_available_win_num(keys);
ProfWin *new = win_create_plugin(tag);
g_hash_table_insert(windows, GINT_TO_POINTER(result), new);
g_list_free(keys);
return new;
ProfWin *newwin = win_create_plugin(tag);
g_hash_table_insert(windows, GINT_TO_POINTER(result), newwin);
autocomplete_add(wins_ac, tag);
autocomplete_add(wins_close_ac, tag);
return newwin;
}
gboolean