mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Add some initialization code for GSettings
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@23217 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
14208cbfb0
commit
a51380fa5e
@ -54,6 +54,7 @@ libgncmod_app_utils_la_SOURCES = \
|
|||||||
gnc-exp-parser.c \
|
gnc-exp-parser.c \
|
||||||
gnc-gconf-utils.c \
|
gnc-gconf-utils.c \
|
||||||
gnc-gettext-util.c \
|
gnc-gettext-util.c \
|
||||||
|
gnc-gsettings.c \
|
||||||
gnc-helpers.c \
|
gnc-helpers.c \
|
||||||
gnc-prefs.c \
|
gnc-prefs.c \
|
||||||
gnc-sx-instance-model.c \
|
gnc-sx-instance-model.c \
|
||||||
@ -80,6 +81,7 @@ gncinclude_HEADERS = \
|
|||||||
gnc-exp-parser.h \
|
gnc-exp-parser.h \
|
||||||
gnc-gconf-utils.h \
|
gnc-gconf-utils.h \
|
||||||
gnc-gettext-util.h \
|
gnc-gettext-util.h \
|
||||||
|
gnc-gsettings.h \
|
||||||
gnc-help-utils.h \
|
gnc-help-utils.h \
|
||||||
gnc-helpers.h \
|
gnc-helpers.h \
|
||||||
gnc-prefs.h \
|
gnc-prefs.h \
|
||||||
|
124
src/app-utils/gnc-gsettings.c
Normal file
124
src/app-utils/gnc-gsettings.c
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
/********************************************************************\
|
||||||
|
* gnc-gsettings.c -- utility functions for storing/retrieving *
|
||||||
|
* data in the GSettings database for GnuCash *
|
||||||
|
* Copyright (C) 2013 Geert Janssens <geert@kobaltwit.be> *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License as *
|
||||||
|
* published by the Free Software Foundation; either version 2 of *
|
||||||
|
* the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License*
|
||||||
|
* along with this program; if not, contact: *
|
||||||
|
* *
|
||||||
|
* Free Software Foundation Voice: +1-617-542-5942 *
|
||||||
|
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
|
||||||
|
* Boston, MA 02110-1301, USA gnu@gnu.org *
|
||||||
|
* *
|
||||||
|
\********************************************************************/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "gnc-gsettings.h"
|
||||||
|
|
||||||
|
#define CLIENT_TAG "%s-%s-client"
|
||||||
|
#define NOTIFY_TAG "%s-%s-notify_id"
|
||||||
|
|
||||||
|
static GHashTable *schema_hash = NULL;
|
||||||
|
static const gchar *gsettings_prefix;
|
||||||
|
|
||||||
|
/************************************************************/
|
||||||
|
/* Internal helper functions */
|
||||||
|
/************************************************************/
|
||||||
|
static gboolean gnc_gsettings_is_valid_key(GSettings *settings, const gchar *key)
|
||||||
|
{
|
||||||
|
gchar **keys = NULL;
|
||||||
|
gint i = 0;
|
||||||
|
gboolean found = FALSE;
|
||||||
|
|
||||||
|
// Check if the key is valid key within settings
|
||||||
|
if (!G_IS_SETTINGS(settings))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
// Get list of keys
|
||||||
|
keys = g_settings_list_keys(settings);
|
||||||
|
|
||||||
|
while (keys && keys[i])
|
||||||
|
{
|
||||||
|
if (!g_strcmp0(key, keys[i]))
|
||||||
|
{
|
||||||
|
found = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Free keys
|
||||||
|
g_strfreev(keys);
|
||||||
|
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GSettings * gnc_gsettings_get_schema_ptr (const gchar *schema_str)
|
||||||
|
{
|
||||||
|
GSettings *gset = NULL;
|
||||||
|
gchar *full_name = gnc_gsettings_normalize_schema_name (schema_str);
|
||||||
|
|
||||||
|
if (!schema_hash)
|
||||||
|
schema_hash = g_hash_table_new (g_str_hash, g_str_equal);
|
||||||
|
|
||||||
|
gset = g_hash_table_lookup (schema_hash, full_name);
|
||||||
|
if (!gset)
|
||||||
|
{
|
||||||
|
gset = g_settings_new (full_name);
|
||||||
|
if (G_IS_SETTINGS(gset))
|
||||||
|
g_hash_table_insert (schema_hash, full_name, gset);
|
||||||
|
else
|
||||||
|
PWARN ("Ignoring attempt to access unknown gsettings schema %s", full_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (full_name);
|
||||||
|
return gset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************/
|
||||||
|
/* GSettings Utilities */
|
||||||
|
/************************************************************/
|
||||||
|
|
||||||
|
void
|
||||||
|
gnc_gsettings_set_prefix (const gchar *prefix)
|
||||||
|
{
|
||||||
|
gsettings_prefix = prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
const gchar *
|
||||||
|
gnc_gsettings_get_prefix (void)
|
||||||
|
{
|
||||||
|
return gsettings_prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
gchar *
|
||||||
|
gnc_gsettings_normalize_schema_name (const gchar *name)
|
||||||
|
{
|
||||||
|
if (name == NULL)
|
||||||
|
{
|
||||||
|
/* Need to return a newly allocated string */
|
||||||
|
return g_strdup(gnc_gsettings_get_prefix());
|
||||||
|
}
|
||||||
|
if (g_str_has_prefix (name, gnc_gsettings_get_prefix ()))
|
||||||
|
{
|
||||||
|
/* Need to return a newly allocated string */
|
||||||
|
return g_strdup(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_strjoin(".", gnc_gsettings_get_prefix(), name, NULL);
|
||||||
|
}
|
113
src/app-utils/gnc-gsettings.h
Normal file
113
src/app-utils/gnc-gsettings.h
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
/********************************************************************\
|
||||||
|
* gnc-gsettings.h -- utility functions for storing/retrieving *
|
||||||
|
* data in the GSettings database for GnuCash *
|
||||||
|
* Copyright (C) 2013 Geert Janssens <geert@kobaltwit.be> *
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License as *
|
||||||
|
* published by the Free Software Foundation; either version 2 of *
|
||||||
|
* the License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License*
|
||||||
|
* along with this program; if not, contact: *
|
||||||
|
* *
|
||||||
|
* Free Software Foundation Voice: +1-617-542-5942 *
|
||||||
|
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
|
||||||
|
* Boston, MA 02110-1301, USA gnu@gnu.org *
|
||||||
|
* *
|
||||||
|
\********************************************************************/
|
||||||
|
|
||||||
|
/** @addtogroup GLib
|
||||||
|
@{ */
|
||||||
|
/** @addtogroup GSettings GSettings Utilities
|
||||||
|
|
||||||
|
The API in this file is designed to make it easy to use the GSettings
|
||||||
|
system from within Gnucash. GSettings is a shared key/value storage
|
||||||
|
system.
|
||||||
|
|
||||||
|
The main benefits of these routines are that they
|
||||||
|
-# maintain a list of GSettings objects (one per schema),
|
||||||
|
-# convert gnucash internal schema names into full gsettings schema id's, and
|
||||||
|
-# optionally take care of error checking on return values.
|
||||||
|
|
||||||
|
@{ */
|
||||||
|
/** @file gnc-gsettings.h
|
||||||
|
* @brief GSettings helper routines.
|
||||||
|
* @author Copyright (C) 2013 Geert Janssens <geert@kobaltwit.be>
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef GNC_GSETIINGS_H
|
||||||
|
#define GNC_GSETTINGS_H
|
||||||
|
|
||||||
|
#include <gio/gio.h>
|
||||||
|
|
||||||
|
/* Schema ids used across multiple modules */
|
||||||
|
#define GSET_SCHEMA_PREFIX "org.gnucash"
|
||||||
|
#define GSET_SCHEMA_GENERAL "general"
|
||||||
|
#define GSET_SCHEMA_GENERAL_REGISTER "general.register"
|
||||||
|
#define GSET_SCHEMA_GENERAL_REPORT "general.report"
|
||||||
|
#define GSET_SCHEMA_WARNINGS "general.warnings"
|
||||||
|
#define GSET_SCHEMA_WARNINGS_TEMP "general.warnings.temporary"
|
||||||
|
#define GSET_SCHEMA_WARNINGS_PERM "general.warnings.permanent"
|
||||||
|
|
||||||
|
/* Keys used across multiple modules */
|
||||||
|
/* Currently the first one conflicts with same definition in gnc-gconf-utils.h
|
||||||
|
* Only load it if gnc-gconf-utils.h isn't loaded yet.
|
||||||
|
*/
|
||||||
|
#ifndef GNC_GCONF_UTILS_H
|
||||||
|
#define DESKTOP_GNOME_INTERFACE "/desktop/gnome/interface"
|
||||||
|
#endif /* GNC_GCONF_UTILS_H */
|
||||||
|
#define GSET_KEY_TOOLBAR_STYLE "toolbar_style"
|
||||||
|
#define GSET_KEY_SAVE_GEOMETRY "save_window_geometry"
|
||||||
|
#define GSET_KEY_LAST_PATH "last_path"
|
||||||
|
#define GSET_KEY_USE_NEW "use_new_window"
|
||||||
|
#define GSET_KEY_ACCOUNTING_LABELS "use_accounting_labels"
|
||||||
|
#define GSET_KEY_ACCOUNT_SEPARATOR "account_separator"
|
||||||
|
#define GSET_KEY_NEGATIVE_IN_RED "negative_in_red"
|
||||||
|
#define GSET_KEY_NUM_SOURCE "num_source"
|
||||||
|
#define GSET_KEY_ENABLE_EURO "enable_euro"
|
||||||
|
#define GSET_KEY_DATE_FORMAT "date_format"
|
||||||
|
#define GSET_KEY_DATE_COMPLETION "date_completion"
|
||||||
|
#define GSET_KEY_DATE_BACKMONTHS "date_backmonths"
|
||||||
|
#define GSET_KEY_SHOW_LEAF_ACCT_NAMES "show_leaf_account_names"
|
||||||
|
|
||||||
|
/** Convert a partial schema name into a complete gsettings schema name.
|
||||||
|
*
|
||||||
|
* This function takes a partial gsettings schema name and converts
|
||||||
|
* it into a fully qualified gsettings schema name. It does this
|
||||||
|
* by prepending the standard prefix for all gnucash schemas.
|
||||||
|
* If the schema is already fully qualified (i.e. begins with the
|
||||||
|
* default schema prefix, this routine will not change it.
|
||||||
|
*
|
||||||
|
* @param name A partial schema name. The default prefix is
|
||||||
|
* prepended to this name to produce a fully qualified schema
|
||||||
|
* name.
|
||||||
|
*
|
||||||
|
* @return This function returns a string pointer to the fully
|
||||||
|
* qualified schema name. It is the caller's responsibility to
|
||||||
|
* free this string.
|
||||||
|
*/
|
||||||
|
gchar *gnc_gsettings_normalize_schema_name (const gchar *name);
|
||||||
|
|
||||||
|
|
||||||
|
/** Set the default gsettings schema prefix. This is
|
||||||
|
* used to generate complete schema id's if only
|
||||||
|
* partial id's are passed.
|
||||||
|
*/
|
||||||
|
void gnc_gsettings_set_prefix (const gchar *prefix);
|
||||||
|
|
||||||
|
/** Get the default gsettings schema prefix.
|
||||||
|
* If none was set explicitly, this defaults to
|
||||||
|
* "org.gnucash"
|
||||||
|
*/
|
||||||
|
const gchar *gnc_gsettings_get_prefix (void);
|
||||||
|
|
||||||
|
#endif /* GNC_GSETTINGS_H */
|
||||||
|
/** @} */
|
||||||
|
/** @} */
|
@ -43,6 +43,7 @@
|
|||||||
#include "gfec.h"
|
#include "gfec.h"
|
||||||
#include "gnc-commodity.h"
|
#include "gnc-commodity.h"
|
||||||
#include "gnc-core-prefs.h"
|
#include "gnc-core-prefs.h"
|
||||||
|
#include "gnc-gsettings.h"
|
||||||
#include "gnc-main-window.h"
|
#include "gnc-main-window.h"
|
||||||
#include "gnc-splash.h"
|
#include "gnc-splash.h"
|
||||||
#include "gnc-gnome-utils.h"
|
#include "gnc-gnome-utils.h"
|
||||||
@ -81,6 +82,7 @@ static gchar **log_flags = NULL;
|
|||||||
static gchar *log_to_filename = NULL;
|
static gchar *log_to_filename = NULL;
|
||||||
static int nofile = 0;
|
static int nofile = 0;
|
||||||
static const gchar *gconf_path = NULL;
|
static const gchar *gconf_path = NULL;
|
||||||
|
static const gchar *gsettings_prefix = NULL;
|
||||||
static const char *add_quotes_file = NULL;
|
static const char *add_quotes_file = NULL;
|
||||||
static char *namespace_regexp = NULL;
|
static char *namespace_regexp = NULL;
|
||||||
static const char *file_to_load = NULL;
|
static const char *file_to_load = NULL;
|
||||||
@ -126,6 +128,13 @@ static GOptionEntry options[] =
|
|||||||
http://developer.gnome.org/doc/API/2.0/glib/glib-Commandline-option-parser.html */
|
http://developer.gnome.org/doc/API/2.0/glib/glib-Commandline-option-parser.html */
|
||||||
N_("GCONFPATH")
|
N_("GCONFPATH")
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"gsettings-prefix", '\0', 0, G_OPTION_ARG_STRING, &gsettings_prefix,
|
||||||
|
N_("Set the prefix for gsettings schemas for gsettings queries. This can be useful to have a different settings tree while debugging."),
|
||||||
|
/* Translators: Argument description for autohelp; see
|
||||||
|
http://developer.gnome.org/doc/API/2.0/glib/glib-Commandline-option-parser.html */
|
||||||
|
N_("GSETTINGSPREFIX")
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"add-price-quotes", '\0', 0, G_OPTION_ARG_STRING, &add_quotes_file,
|
"add-price-quotes", '\0', 0, G_OPTION_ARG_STRING, &add_quotes_file,
|
||||||
N_("Add price quotes to given GnuCash datafile"),
|
N_("Add price quotes to given GnuCash datafile"),
|
||||||
@ -575,6 +584,16 @@ gnc_parse_command_line(int *argc, char ***argv)
|
|||||||
}
|
}
|
||||||
gnc_gconf_set_path_prefix(g_strdup(gconf_path));
|
gnc_gconf_set_path_prefix(g_strdup(gconf_path));
|
||||||
|
|
||||||
|
if (!gsettings_prefix)
|
||||||
|
{
|
||||||
|
const char *prefix = g_getenv("GNC_GSETTINGS_PREFIX");
|
||||||
|
if (prefix)
|
||||||
|
gsettings_prefix = prefix;
|
||||||
|
else
|
||||||
|
gsettings_prefix = GSET_SCHEMA_PREFIX;
|
||||||
|
}
|
||||||
|
gnc_gsettings_set_prefix(g_strdup(gsettings_prefix));
|
||||||
|
|
||||||
if (namespace_regexp)
|
if (namespace_regexp)
|
||||||
gnc_core_prefs_set_namespace_regexp(namespace_regexp);
|
gnc_core_prefs_set_namespace_regexp(namespace_regexp);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user