From: Daniel Carl Date: Mon, 16 Apr 2018 20:13:23 +0000 (+0200) Subject: Don not make handler struct public. X-Git-Url: https://git.owens.tech///git?a=commitdiff_plain;h=a339ea6214bd5e2185051d0afbb5496b8d4a5fb7;p=vimb.git Don not make handler struct public. --- diff --git a/src/ex.c b/src/ex.c index 94d3d7d..98da593 100644 --- a/src/ex.c +++ b/src/ex.c @@ -1065,12 +1065,12 @@ static VbCmdResult ex_handlers(Client *c, const ExArg *arg) case EX_HANDADD: if (arg->rhs->len && (p = strchr(arg->rhs->str, '='))) { *p++ = '\0'; - res = handler_add(c, arg->rhs->str, p); + res = handler_add(c->handler, arg->rhs->str, p); } break; case EX_HANDREM: - res = handler_remove(c, arg->rhs->str); + res = handler_remove(c->handler, arg->rhs->str); break; default: @@ -1240,7 +1240,7 @@ static gboolean complete(Client *c, short direction) break; case EX_HANDREM: - found = handler_fill_completion(c, store, token); + found = handler_fill_completion(c->handler, store, token); break; case EX_SAVE: /* Fallthrough */ diff --git a/src/handler.c b/src/handler.c index e114508..fd15d8e 100644 --- a/src/handler.c +++ b/src/handler.c @@ -25,40 +25,48 @@ extern struct Vimb vb; -static char *handler_lookup(Client *c, const char *uri); +struct handler { + GHashTable *table; /* holds the protocol handlers */ +}; -void handler_init(Client *c) +static char *handler_lookup(Handler *h, const char *uri); + +Handler *handler_new(void) { - c->handlers.table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); + Handler *h = g_slice_new(Handler); + h->table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); + + return h; } -void handler_cleanup(Client *c) +void handler_free(Handler *h) { - if (c->handlers.table) { - g_hash_table_destroy(c->handlers.table); - c->handlers.table = NULL; + if (h->table) { + g_hash_table_destroy(h->table); + h->table = NULL; } + g_slice_free(Handler, h); } -gboolean handler_add(Client *c, const char *key, const char *cmd) +gboolean handler_add(Handler *h, const char *key, const char *cmd) { - g_hash_table_insert(c->handlers.table, g_strdup(key), g_strdup(cmd)); + g_hash_table_insert(h->table, g_strdup(key), g_strdup(cmd)); return TRUE; } -gboolean handler_remove(Client *c, const char *key) +gboolean handler_remove(Handler *h, const char *key) { - return g_hash_table_remove(c->handlers.table, key); + return g_hash_table_remove(h->table, key); } -gboolean handler_handle_uri(Client *c, const char *uri) +gboolean handler_handle_uri(Handler *h, const char *uri) { char *handler, *cmd; GError *error = NULL; gboolean res; - if (!(handler = handler_lookup(c, uri))) { + if (!(handler = handler_lookup(h, uri))) { return FALSE; } @@ -75,25 +83,24 @@ gboolean handler_handle_uri(Client *c, const char *uri) return res; } -gboolean handler_fill_completion(Client *c, GtkListStore *store, const char *input) +gboolean handler_fill_completion(Handler *h, GtkListStore *store, const char *input) { - GList *src = g_hash_table_get_keys(c->handlers.table); + GList *src = g_hash_table_get_keys(h->table); gboolean found = util_fill_completion(store, input, src); g_list_free(src); return found; } -static char *handler_lookup(Client *c, const char *uri) +static char *handler_lookup(Handler *h, const char *uri) { char *p, *schema, *handler = NULL; if ((p = strchr(uri, ':'))) { schema = g_strndup(uri, p - uri); - handler = g_hash_table_lookup(c->handlers.table, schema); + handler = g_hash_table_lookup(h->table, schema); g_free(schema); } return handler; } - diff --git a/src/handler.h b/src/handler.h index d5bbbe9..092949b 100644 --- a/src/handler.h +++ b/src/handler.h @@ -20,12 +20,14 @@ #ifndef _HANDLERS_H #define _HANDLERS_H -void handler_init(Client *c); -void handler_cleanup(Client *c); -gboolean handler_add(Client *c, const char *key, const char *cmd); -gboolean handler_remove(Client *c, const char *key); -gboolean handler_handle_uri(Client *c, const char *uri); -gboolean handler_fill_completion(Client *c, GtkListStore *store, const char *input); +typedef struct handler Handler; + +Handler *handler_new(); +void handler_free(Handler *h); +gboolean handler_add(Handler *h, const char *key, const char *cmd); +gboolean handler_remove(Handler *h, const char *key); +gboolean handler_handle_uri(Handler *h, const char *uri); +gboolean handler_fill_completion(Handler *h, GtkListStore *store, const char *input); #endif /* end of include guard: _HANDLERS_H */ diff --git a/src/main.c b/src/main.c index 84c9c9f..e3cfdf6 100644 --- a/src/main.c +++ b/src/main.c @@ -663,10 +663,10 @@ static void client_destroy(Client *c) map_cleanup(c); register_cleanup(c); setting_cleanup(c); - handler_cleanup(c); #ifdef FEATURE_AUTOCMD autocmd_cleanup(c); #endif + handler_free(c->handler); shortcut_free(c->config.shortcuts); g_slice_free(Client, c); @@ -698,7 +698,7 @@ static Client *client_new(WebKitWebView *webview) completion_init(c); map_init(c); - handler_init(c); + c->handler = handler_new(); #ifdef FEATURE_AUTOCMD autocmd_init(c); #endif @@ -1199,7 +1199,7 @@ static gboolean on_webview_decide_policy(WebKitWebView *webview, uri = webkit_uri_request_get_uri(req); /* Try to handle with specific protocol handler. */ - if (handler_handle_uri(c, uri)) { + if (handler_handle_uri(c->handler, uri)) { webkit_policy_decision_ignore(dec); return TRUE; } diff --git a/src/main.h b/src/main.h index b282712..a15d1d0 100644 --- a/src/main.h +++ b/src/main.h @@ -25,6 +25,7 @@ #include #include #include "shortcut.h" +#include "handler.h" #include "config.h" @@ -227,6 +228,7 @@ struct Client { GtkTextBuffer *buffer; GDBusProxy *dbusproxy; GDBusServer *dbusserver; + Handler *handler; /* the protocoll handlers */ struct { /* TODO split in global setting definitions and set values on a per * client base. */ @@ -250,9 +252,6 @@ struct Client { char showcmd[SHOWCMD_LEN + 1]; /* buffer to show ambiguous key sequence */ guint timeoutlen; /* timeout for ambiguous mappings */ } map; - struct { - GHashTable *table; /* holds the protocol handlers */ - } handlers; struct { struct AuGroup *curgroup; GSList *groups;