Allow Browser plug-ins access the configuration
This commit is contained in:
parent
499db79bc7
commit
368ef36c28
|
@ -34,6 +34,10 @@ typedef struct _BrowserPlugin BrowserPlugin;
|
||||||
typedef struct _BrowserPluginHelper
|
typedef struct _BrowserPluginHelper
|
||||||
{
|
{
|
||||||
Browser * browser;
|
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);
|
int (*error)(Browser * browser, char const * message, int ret);
|
||||||
GdkPixbuf * (*get_icon)(Browser * browser, char const * filename,
|
GdkPixbuf * (*get_icon)(Browser * browser, char const * filename,
|
||||||
char const * type, struct stat * lst, struct stat * st,
|
char const * type, struct stat * lst, struct stat * st,
|
||||||
|
|
171
src/browser.c
171
src/browser.c
|
@ -224,6 +224,10 @@ unsigned int browser_cnt = 0;
|
||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
/* accessors */
|
/* 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,
|
static gboolean _browser_plugin_is_enabled(Browser * browser,
|
||||||
char const * plugin);
|
char const * plugin);
|
||||||
static GdkPixbuf * _browser_get_icon(Browser * browser, char const * filename,
|
static GdkPixbuf * _browser_get_icon(Browser * browser, char const * filename,
|
||||||
|
@ -323,6 +327,8 @@ Browser * browser_new(char const * directory)
|
||||||
|
|
||||||
/* plug-ins */
|
/* plug-ins */
|
||||||
browser->pl_helper.browser = browser;
|
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.error = browser_error;
|
||||||
browser->pl_helper.get_icon = _browser_get_icon;
|
browser->pl_helper.get_icon = _browser_get_icon;
|
||||||
browser->pl_helper.get_mime = _browser_get_mime;
|
browser->pl_helper.get_mime = _browser_get_mime;
|
||||||
|
@ -2696,6 +2702,111 @@ void browser_unselect_all(Browser * browser)
|
||||||
|
|
||||||
/* private */
|
/* private */
|
||||||
/* functions */
|
/* 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 */
|
/* browser_plugin_refresh */
|
||||||
static void _plugin_refresh_do(Browser * browser, char const * path);
|
static void _plugin_refresh_do(Browser * browser, char const * path);
|
||||||
static void _plugin_refresh_do_list(Browser * browser, GList * list);
|
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 */
|
/* config_load_boolean */
|
||||||
static int _config_load_boolean(Config * config, char const * variable,
|
static int _config_load_boolean(Config * config, char const * variable,
|
||||||
gboolean * value)
|
gboolean * value)
|
||||||
|
|
|
@ -82,6 +82,10 @@ static Properties * _properties_new(Mime * mime, char const * plugin,
|
||||||
static void _properties_delete(Properties * properties);
|
static void _properties_delete(Properties * properties);
|
||||||
|
|
||||||
/* accessors */
|
/* 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,
|
static GdkPixbuf * _properties_get_icon(Properties * properties,
|
||||||
char const * filename, char const * type, struct stat * lst,
|
char const * filename, char const * type, struct stat * lst,
|
||||||
struct stat * st, int size);
|
struct stat * st, int size);
|
||||||
|
@ -152,6 +156,8 @@ static Properties * _properties_new(Mime * mime, char const * plugin,
|
||||||
properties->mime = mime;
|
properties->mime = mime;
|
||||||
properties->filename = strdup(filename);
|
properties->filename = strdup(filename);
|
||||||
properties->helper.browser = properties;
|
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.error = _properties_error;
|
||||||
properties->helper.get_icon = _properties_get_icon;
|
properties->helper.get_icon = _properties_get_icon;
|
||||||
properties->helper.get_mime = _properties_get_mime;
|
properties->helper.get_mime = _properties_get_mime;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user