Implement "-c" or "--config" to specify a different config folder

If this option is specified the folder is used in place of the
default ~/.config/midori including extension settings.
This commit is contained in:
Christian Dywan 2009-04-09 19:28:36 +02:00
parent 0ffda1fe27
commit ddf2f60e3f
4 changed files with 45 additions and 5 deletions

View file

@ -65,10 +65,7 @@ typedef enum
static gchar* static gchar*
build_config_filename (const gchar* filename) build_config_filename (const gchar* filename)
{ {
static gchar* path = NULL; const gchar* path = sokoke_set_config_dir (NULL);
if (!path)
path = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL);
g_mkdir_with_parents (path, 0700); g_mkdir_with_parents (path, 0700);
return g_build_filename (path, filename, NULL); return g_build_filename (path, filename, NULL);
} }
@ -1325,6 +1322,7 @@ int
main (int argc, main (int argc,
char** argv) char** argv)
{ {
gchar* config;
gboolean run; gboolean run;
gboolean version; gboolean version;
gchar** uris; gchar** uris;
@ -1333,6 +1331,8 @@ main (int argc,
GError* error; GError* error;
GOptionEntry entries[] = GOptionEntry entries[] =
{ {
{ "config", 'c', 0, G_OPTION_ARG_FILENAME, &config,
N_("Use FOLDER as configuration folder"), N_("FOLDER") },
{ "run", 'r', 0, G_OPTION_ARG_NONE, &run, { "run", 'r', 0, G_OPTION_ARG_NONE, &run,
N_("Run the specified filename as javascript"), NULL }, N_("Run the specified filename as javascript"), NULL },
{ "version", 'V', 0, G_OPTION_ARG_NONE, &version, { "version", 'V', 0, G_OPTION_ARG_NONE, &version,
@ -1373,6 +1373,7 @@ main (int argc,
#endif #endif
/* Parse cli options */ /* Parse cli options */
config = NULL;
run = FALSE; run = FALSE;
version = FALSE; version = FALSE;
uris = NULL; uris = NULL;
@ -1411,6 +1412,14 @@ main (int argc,
if (run) if (run)
return midori_run_script (uris ? *uris : NULL); return midori_run_script (uris ? *uris : NULL);
if (config && !g_path_is_absolute (config))
{
g_critical (_("The specified configuration folder is invalid."));
return 1;
}
sokoke_set_config_dir (config);
g_free (config);
#if HAVE_HILDON #if HAVE_HILDON
osso_context = osso_initialize (PACKAGE_NAME, PACKAGE_VERSION, FALSE, NULL); osso_context = osso_initialize (PACKAGE_NAME, PACKAGE_VERSION, FALSE, NULL);

View file

@ -474,7 +474,7 @@ midori_extension_get_config_dir (MidoriExtension* extension)
if (!extension->priv->config_dir) if (!extension->priv->config_dir)
extension->priv->config_dir = g_build_filename ( extension->priv->config_dir = g_build_filename (
g_get_user_config_dir (), PACKAGE_NAME, "extensions", sokoke_set_config_dir (NULL), "extensions",
extension->priv->name, NULL); extension->priv->name, NULL);
return extension->priv->config_dir; return extension->priv->config_dir;

View file

@ -801,3 +801,31 @@ sokoke_register_stock_items (void)
gtk_icon_factory_add_default (factory); gtk_icon_factory_add_default (factory);
g_object_unref (factory); g_object_unref (factory);
} }
/**
* sokoke_set_config_dir:
* @new_config_dir: an absolute path, or %NULL
*
* Retrieves and/ or sets the base configuration folder.
*
* Return value: the configuration folder, or %NULL
**/
const gchar*
sokoke_set_config_dir (const gchar* new_config_dir)
{
static gchar* config_dir = NULL;
if (config_dir)
return config_dir;
if (!new_config_dir)
config_dir = g_build_filename (g_get_user_config_dir (),
PACKAGE_NAME, NULL);
else
{
g_return_val_if_fail (g_path_is_absolute (new_config_dir), NULL);
katze_assign (config_dir, g_strdup (new_config_dir));
}
return config_dir;
}

View file

@ -127,4 +127,7 @@ sokoke_time_t_to_julian (const time_t* timestamp);
void void
sokoke_register_stock_items (void); sokoke_register_stock_items (void);
const gchar*
sokoke_set_config_dir (const gchar* new_config_dir);
#endif /* !__SOKOKE_H__ */ #endif /* !__SOKOKE_H__ */