From 368ef36c280eda0281def8f4156f32c9a0414f61 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Wed, 6 Aug 2014 01:11:13 +0200 Subject: [PATCH] Allow Browser plug-ins access the configuration --- include/Browser/plugin.h | 4 + src/browser.c | 171 +++++++++++++++++++++++++-------------- src/properties.c | 6 ++ 3 files changed, 121 insertions(+), 60 deletions(-) diff --git a/include/Browser/plugin.h b/include/Browser/plugin.h index 82d1f9d..c545be8 100644 --- a/include/Browser/plugin.h +++ b/include/Browser/plugin.h @@ -34,6 +34,10 @@ typedef struct _BrowserPlugin BrowserPlugin; typedef struct _BrowserPluginHelper { Browser * browser; + char const * (*config_get)(Browser * browser, char const * section, + char const * variable); + int (*config_set)(Browser * browser, char const * section, + char const * variable, char const * value); int (*error)(Browser * browser, char const * message, int ret); GdkPixbuf * (*get_icon)(Browser * browser, char const * filename, char const * type, struct stat * lst, struct stat * st, diff --git a/src/browser.c b/src/browser.c index fdbed2d..d8a72ad 100644 --- a/src/browser.c +++ b/src/browser.c @@ -224,6 +224,10 @@ unsigned int browser_cnt = 0; /* prototypes */ /* accessors */ +static char const * _browser_config_get(Browser * browser, char const * section, + char const * variable); +static int _browser_config_set(Browser * browser, char const * section, + char const * variable, char const * value); static gboolean _browser_plugin_is_enabled(Browser * browser, char const * plugin); static GdkPixbuf * _browser_get_icon(Browser * browser, char const * filename, @@ -323,6 +327,8 @@ Browser * browser_new(char const * directory) /* plug-ins */ browser->pl_helper.browser = browser; + browser->pl_helper.config_get = _browser_config_get; + browser->pl_helper.config_set = _browser_config_set; browser->pl_helper.error = browser_error; browser->pl_helper.get_icon = _browser_get_icon; browser->pl_helper.get_mime = _browser_get_mime; @@ -2696,6 +2702,111 @@ void browser_unselect_all(Browser * browser) /* private */ /* functions */ +/* accessors */ +/* browser_config_get */ +static char const * _browser_config_get(Browser * browser, char const * section, + char const * variable) +{ + char const * ret; + String * s = NULL; + + if(section != NULL && (s = string_new_append("plugin::", section, NULL)) + == NULL) + { + browser_error(NULL, error_get(), 1); + return NULL; + } + ret = config_get(browser->config, s, variable); + string_delete(s); + return ret; +} + + +/* browser_config_set */ +static int _browser_config_set(Browser * browser, char const * section, + char const * variable, char const * value) +{ + int ret; + String * s = NULL; + char * filename; + + if(section != NULL && (s = string_new_append("plugin::", section, NULL)) + == NULL) + return -browser_error(NULL, error_get(), 1); + if((ret = config_set(browser->config, s, variable, value)) == 0 + && (filename = _common_config_filename( + BROWSER_CONFIG_FILE)) != NULL) + { + if(config_save(browser->config, filename) != 0) + browser_error(NULL, error_get(), 1); + free(filename); + } + string_delete(s); + return ret; +} + + +/* browser_plugin_is_enabled */ +static gboolean _browser_plugin_is_enabled(Browser * browser, + char const * plugin) +{ + GtkTreeModel * model = GTK_TREE_MODEL(browser->pl_store); + GtkTreeIter iter; + gchar * p; + gboolean valid; + int res; + + for(valid = gtk_tree_model_get_iter_first(model, &iter); valid == TRUE; + valid = gtk_tree_model_iter_next(model, &iter)) + { + gtk_tree_model_get(model, &iter, BPC_NAME, &p, -1); + res = strcmp(p, plugin); + g_free(p); + if(res == 0) + return TRUE; + } + return FALSE; +} + + +/* browser_get_icon */ +static GdkPixbuf * _browser_get_icon(Browser * browser, char const * filename, + char const * type, struct stat * lst, struct stat * st, + int size) +{ + return browser_vfs_mime_icon(browser->mime, filename, type, lst, st, size); +} + + +/* browser_get_mime */ +static Mime * _browser_get_mime(Browser * browser) +{ + return browser->mime; +} + + +/* browser_get_type */ +static char const * _browser_get_type(Browser * browser, char const * filename, + mode_t mode) +{ + return browser_vfs_mime_type(browser->mime, filename, mode); +} + + +/* browser_set_status */ +static void _browser_set_status(Browser * browser, char const * status) +{ + GtkStatusbar * sb = GTK_STATUSBAR(browser->statusbar); + + if(browser->statusbar_id != 0) + gtk_statusbar_remove(sb, gtk_statusbar_get_context_id(sb, ""), + browser->statusbar_id); + browser->statusbar_id = gtk_statusbar_push(sb, + gtk_statusbar_get_context_id(sb, ""), status); +} + + +/* useful */ /* browser_plugin_refresh */ static void _plugin_refresh_do(Browser * browser, char const * path); static void _plugin_refresh_do_list(Browser * browser, GList * list); @@ -2894,66 +3005,6 @@ static void _refresh_path(Browser * browser) } -/* browser_plugin_is_enabled */ -static gboolean _browser_plugin_is_enabled(Browser * browser, - char const * plugin) -{ - GtkTreeModel * model = GTK_TREE_MODEL(browser->pl_store); - GtkTreeIter iter; - gchar * p; - gboolean valid; - int res; - - for(valid = gtk_tree_model_get_iter_first(model, &iter); valid == TRUE; - valid = gtk_tree_model_iter_next(model, &iter)) - { - gtk_tree_model_get(model, &iter, BPC_NAME, &p, -1); - res = strcmp(p, plugin); - g_free(p); - if(res == 0) - return TRUE; - } - return FALSE; -} - - -/* browser_get_icon */ -static GdkPixbuf * _browser_get_icon(Browser * browser, char const * filename, - char const * type, struct stat * lst, struct stat * st, - int size) -{ - return vfs_mime_icon(browser->mime, filename, type, lst, st, size); -} - - -/* browser_get_mime */ -static Mime * _browser_get_mime(Browser * browser) -{ - return browser->mime; -} - - -/* browser_get_type */ -static char const * _browser_get_type(Browser * browser, char const * filename, - mode_t mode) -{ - return vfs_mime_type(browser->mime, filename, mode); -} - - -/* browser_set_status */ -static void _browser_set_status(Browser * browser, char const * status) -{ - GtkStatusbar * sb = GTK_STATUSBAR(browser->statusbar); - - if(browser->statusbar_id != 0) - gtk_statusbar_remove(sb, gtk_statusbar_get_context_id(sb, ""), - browser->statusbar_id); - browser->statusbar_id = gtk_statusbar_push(sb, - gtk_statusbar_get_context_id(sb, ""), status); -} - - /* config_load_boolean */ static int _config_load_boolean(Config * config, char const * variable, gboolean * value) diff --git a/src/properties.c b/src/properties.c index b7016a0..e3aa44c 100644 --- a/src/properties.c +++ b/src/properties.c @@ -82,6 +82,10 @@ static Properties * _properties_new(Mime * mime, char const * plugin, static void _properties_delete(Properties * properties); /* accessors */ +static char const * _properties_config_get(Properties * properties, + char const * section, char const * variable); +static int _properties_config_set(Properties * properties, char const * section, + char const * variable, char const * value); static GdkPixbuf * _properties_get_icon(Properties * properties, char const * filename, char const * type, struct stat * lst, struct stat * st, int size); @@ -152,6 +156,8 @@ static Properties * _properties_new(Mime * mime, char const * plugin, properties->mime = mime; properties->filename = strdup(filename); properties->helper.browser = properties; + properties->helper.config_get = _properties_config_get; + properties->helper.config_set = _properties_config_set; properties->helper.error = _properties_error; properties->helper.get_icon = _properties_get_icon; properties->helper.get_mime = _properties_get_mime;