r23473 - gnucash/trunk/src - GSettings: only load backend when installed

Geert Janssens gjanssens at code.gnucash.org
Mon Dec 2 11:05:32 EST 2013


Author: gjanssens
Date: 2013-12-02 11:05:32 -0500 (Mon, 02 Dec 2013)
New Revision: 23473
Trac: http://svn.gnucash.org/trac/changeset/23473

Modified:
   gnucash/trunk/src/app-utils/gnc-gsettings.c
   gnucash/trunk/src/app-utils/gnc-prefs-utils.c
   gnucash/trunk/src/core-utils/gnc-prefs-p.h
   gnucash/trunk/src/core-utils/gnc-prefs.c
   gnucash/trunk/src/core-utils/gnc-prefs.h
Log:
GSettings: only load backend when installed

The preferences backend can't work from the source environment because
it's schemas won't be compiled. This situation is only relevant for testing,
which is done from the source (or build) tree.
Note that a few preferences are needed by the xml backend. If no preferences
backend is loaded, some sane defaults will be used instead. Again this should
only matter for testing, in which case the real preferences are not relevant
anyway.

Modified: gnucash/trunk/src/app-utils/gnc-gsettings.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-gsettings.c	2013-12-01 04:53:05 UTC (rev 23472)
+++ gnucash/trunk/src/app-utils/gnc-gsettings.c	2013-12-02 16:05:32 UTC (rev 23473)
@@ -533,28 +533,39 @@
 void gnc_gsettings_load_backend (void)
 {
     ENTER("");
-    prefsbackend.register_cb = gnc_gsettings_register_cb;
-    prefsbackend.remove_cb_by_func = gnc_gsettings_remove_cb_by_func;
-    prefsbackend.remove_cb_by_id = gnc_gsettings_remove_cb_by_id;
-    prefsbackend.register_group_cb = gnc_gsettings_register_any_cb;
-    prefsbackend.remove_group_cb_by_func = gnc_gsettings_remove_any_cb_by_func;
-    prefsbackend.bind = gnc_gsettings_bind;
-    prefsbackend.get_bool = gnc_gsettings_get_bool;
-    prefsbackend.get_int = gnc_gsettings_get_int;
-    prefsbackend.get_float = gnc_gsettings_get_float;
-    prefsbackend.get_string = gnc_gsettings_get_string;
-    prefsbackend.get_enum = gnc_gsettings_get_enum;
-    prefsbackend.get_value = gnc_gsettings_get_value;
-    prefsbackend.set_bool = gnc_gsettings_set_bool;
-    prefsbackend.set_int = gnc_gsettings_set_int;
-    prefsbackend.set_float = gnc_gsettings_set_float;
-    prefsbackend.set_string = gnc_gsettings_set_string;
-    prefsbackend.set_enum = gnc_gsettings_set_enum;
-    prefsbackend.set_value = gnc_gsettings_set_value;
-    prefsbackend.reset = gnc_gsettings_reset;
-    prefsbackend.reset_group = gnc_gsettings_reset_schema;
 
-    LEAVE("Prefsbackend bind = %p", prefsbackend.bind);
+    /* The gsettings backend only works in an installed environment.
+     * When called from the source environment (for testing purposes)
+     * simply return.
+     */
+    if (g_strcmp0 (g_getenv ("GNC_UNINSTALLED"), "1") == 0)
+        return;
+
+    if (!prefsbackend)
+        prefsbackend = g_new0 (PrefsBackend, 1);
+
+    prefsbackend->register_cb = gnc_gsettings_register_cb;
+    prefsbackend->remove_cb_by_func = gnc_gsettings_remove_cb_by_func;
+    prefsbackend->remove_cb_by_id = gnc_gsettings_remove_cb_by_id;
+    prefsbackend->register_group_cb = gnc_gsettings_register_any_cb;
+    prefsbackend->remove_group_cb_by_func = gnc_gsettings_remove_any_cb_by_func;
+    prefsbackend->bind = gnc_gsettings_bind;
+    prefsbackend->get_bool = gnc_gsettings_get_bool;
+    prefsbackend->get_int = gnc_gsettings_get_int;
+    prefsbackend->get_float = gnc_gsettings_get_float;
+    prefsbackend->get_string = gnc_gsettings_get_string;
+    prefsbackend->get_enum = gnc_gsettings_get_enum;
+    prefsbackend->get_value = gnc_gsettings_get_value;
+    prefsbackend->set_bool = gnc_gsettings_set_bool;
+    prefsbackend->set_int = gnc_gsettings_set_int;
+    prefsbackend->set_float = gnc_gsettings_set_float;
+    prefsbackend->set_string = gnc_gsettings_set_string;
+    prefsbackend->set_enum = gnc_gsettings_set_enum;
+    prefsbackend->set_value = gnc_gsettings_set_value;
+    prefsbackend->reset = gnc_gsettings_reset;
+    prefsbackend->reset_group = gnc_gsettings_reset_schema;
+
+    LEAVE("Prefsbackend bind = %p", prefsbackend->bind);
 }
 
 /* Attempt to migrate preferences from gconf files

Modified: gnucash/trunk/src/app-utils/gnc-prefs-utils.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-prefs-utils.c	2013-12-01 04:53:05 UTC (rev 23472)
+++ gnucash/trunk/src/app-utils/gnc-prefs-utils.c	2013-12-02 16:05:32 UTC (rev 23473)
@@ -43,8 +43,11 @@
 static void
 file_retain_changed_cb(gpointer gsettings, gchar *key, gpointer user_data)
 {
-    gint days = (int)gnc_prefs_get_float(GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_DAYS);
-    gnc_prefs_set_file_retention_days (days);
+    if (gnc_prefs_is_set_up())
+    {
+        gint days = (int)gnc_prefs_get_float(GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_DAYS);
+        gnc_prefs_set_file_retention_days (days);
+    }
 }
 
 static void
@@ -52,21 +55,27 @@
 {
     XMLFileRetentionType type = XML_RETAIN_ALL;
 
-    if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_TYPE_NEVER))
-        type = XML_RETAIN_NONE;
-    else if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_TYPE_DAYS))
-        type = XML_RETAIN_DAYS;
-    else if (!gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_TYPE_FOREVER))
-        PWARN("no file retention policy was set, assuming conservative policy 'forever'");
+    if (gnc_prefs_is_set_up())
+    {
+        if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_TYPE_NEVER))
+            type = XML_RETAIN_NONE;
+        else if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_TYPE_DAYS))
+            type = XML_RETAIN_DAYS;
+        else if (!gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_TYPE_FOREVER))
+            PWARN("no file retention policy was set, assuming conservative policy 'forever'");
 
-    gnc_prefs_set_file_retention_policy (type);
+        gnc_prefs_set_file_retention_policy (type);
+    }
 }
 
 static void
 file_compression_changed_cb(gpointer gsettings, gchar *key, gpointer user_data)
 {
-    gboolean file_compression = gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL, GNC_PREF_FILE_COMPRESSION);
-    gnc_prefs_set_file_save_compressed (file_compression);
+    if (gnc_prefs_is_set_up())
+    {
+        gboolean file_compression = gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL, GNC_PREF_FILE_COMPRESSION);
+        gnc_prefs_set_file_save_compressed (file_compression);
+    }
 }
 
 
@@ -74,7 +83,9 @@
 {
     gnc_gsettings_load_backend();
 
-    /* Initialize the core preferences by reading their values from the loaded backend */
+    /* Initialize the core preferences by reading their values from the loaded backend.
+     * Note: of no backend was loaded, these functions will return sane default values.
+     */
     file_retain_changed_cb (NULL, NULL, NULL);
     file_retain_type_changed_cb (NULL, NULL, NULL);
     file_compression_changed_cb (NULL, NULL, NULL);
@@ -92,6 +103,8 @@
     if ( (gnc_prefs_get_file_retention_policy () == XML_RETAIN_DAYS) &&
             (gnc_prefs_get_file_retention_days () == 0 ) )
     {
+        gnc_prefs_set_file_retention_policy (XML_RETAIN_ALL);
+        gnc_prefs_set_file_retention_days (30);
         gnc_prefs_set_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_TYPE_FOREVER, TRUE);
         gnc_prefs_set_float (GNC_PREFS_GROUP_GENERAL, GNC_PREF_RETAIN_DAYS, 30);
         PWARN("retain 0 days policy was set, but this is probably not what the user wanted,\n"

Modified: gnucash/trunk/src/core-utils/gnc-prefs-p.h
===================================================================
--- gnucash/trunk/src/core-utils/gnc-prefs-p.h	2013-12-01 04:53:05 UTC (rev 23472)
+++ gnucash/trunk/src/core-utils/gnc-prefs-p.h	2013-12-02 16:05:32 UTC (rev 23473)
@@ -106,6 +106,6 @@
 
 } PrefsBackend;
 
-extern PrefsBackend prefsbackend;
+extern PrefsBackend *prefsbackend;
 
 #endif /* GNC_PREFS_P_H_ */

Modified: gnucash/trunk/src/core-utils/gnc-prefs.c
===================================================================
--- gnucash/trunk/src/core-utils/gnc-prefs.c	2013-12-01 04:53:05 UTC (rev 23472)
+++ gnucash/trunk/src/core-utils/gnc-prefs.c	2013-12-02 16:05:32 UTC (rev 23473)
@@ -35,7 +35,7 @@
 static gint file_retention_policy = 1;    // 1 = "days", the default in the prefs backend
 static gint file_retention_days   = 30;   // This is also the default in the prefs backend
 
-PrefsBackend prefsbackend;
+PrefsBackend *prefsbackend = NULL;
 
 /* This static indicates the debugging module that this .o belongs to.  */
 static QofLogModule log_module = G_LOG_DOMAIN;
@@ -130,15 +130,16 @@
                               gpointer func,
                               gpointer user_data)
 {
-    ENTER("group %s; pref_name %s, prefsbackend.register_cb %p", group, pref_name, prefsbackend.register_cb);
-    if (prefsbackend.register_cb)
+    ENTER("group %s; pref_name %s, prefsbackend->register_cb %p", group, pref_name,
+            prefsbackend ? prefsbackend->register_cb : NULL);
+    if (prefsbackend && prefsbackend->register_cb)
     {
         LEAVE("");
-        return (prefsbackend.register_cb) (group, pref_name, func, user_data);
+        return (prefsbackend->register_cb) (group, pref_name, func, user_data);
     }
     else
     {
-        LEAVE("");
+        LEAVE("no backend loaded, or the backend doesn't define register_cb, returning 0");
         return 0;
     }
 }
@@ -149,16 +150,16 @@
                                   gpointer func,
                                   gpointer user_data)
 {
-    if (prefsbackend.remove_cb_by_func)
-        (prefsbackend.remove_cb_by_func) (group, pref_name, func, user_data);
+    if (prefsbackend && prefsbackend->remove_cb_by_func)
+        (prefsbackend->remove_cb_by_func) (group, pref_name, func, user_data);
 }
 
 
 void gnc_prefs_remove_cb_by_id (const gchar *group,
                                 guint id)
 {
-    if (prefsbackend.remove_cb_by_id)
-        (prefsbackend.remove_cb_by_id) (group, id);
+    if (prefsbackend && prefsbackend->remove_cb_by_id)
+        (prefsbackend->remove_cb_by_id) (group, id);
 }
 
 
@@ -166,8 +167,8 @@
                                    gpointer func,
                                    gpointer user_data)
 {
-    if (prefsbackend.register_group_cb)
-        return (prefsbackend.register_group_cb) (group, func, user_data);
+    if (prefsbackend && prefsbackend->register_group_cb)
+        return (prefsbackend->register_group_cb) (group, func, user_data);
     else
         return 0;
 }
@@ -177,8 +178,8 @@
                                         gpointer func,
                                         gpointer user_data)
 {
-    if (prefsbackend.remove_group_cb_by_func)
-        (prefsbackend.remove_group_cb_by_func) (group, func, user_data);
+    if (prefsbackend && prefsbackend->remove_group_cb_by_func)
+        (prefsbackend->remove_group_cb_by_func) (group, func, user_data);
 }
 
 
@@ -187,16 +188,16 @@
                      gpointer object,
                      const gchar *property)
 {
-    if (prefsbackend.bind)
-        (prefsbackend.bind) (group, pref_name, object, property);
+    if (prefsbackend && prefsbackend->bind)
+        (prefsbackend->bind) (group, pref_name, object, property);
 }
 
 
 gboolean gnc_prefs_get_bool (const gchar *group,
                              /*@ null @*/ const gchar *pref_name)
 {
-    if (prefsbackend.get_bool)
-        return (prefsbackend.get_bool) (group, pref_name);
+    if (prefsbackend && prefsbackend->get_bool)
+        return (prefsbackend->get_bool) (group, pref_name);
     else
         return FALSE;
 }
@@ -205,8 +206,8 @@
 gint gnc_prefs_get_int (const gchar *group,
                         const gchar *pref_name)
 {
-    if (prefsbackend.get_int)
-        return (prefsbackend.get_int) (group, pref_name);
+    if (prefsbackend && prefsbackend->get_int)
+        return (prefsbackend->get_int) (group, pref_name);
     else
         return 0;
 }
@@ -226,8 +227,8 @@
 gdouble gnc_prefs_get_float (const gchar *group,
                              const gchar *pref_name)
 {
-    if (prefsbackend.get_float)
-        return (prefsbackend.get_float) (group, pref_name);
+    if (prefsbackend && prefsbackend->get_float)
+        return (prefsbackend->get_float) (group, pref_name);
     else
         return 0.0;
 }
@@ -236,8 +237,8 @@
 gchar *gnc_prefs_get_string (const gchar *group,
                              const gchar *pref_name)
 {
-    if (prefsbackend.get_string)
-        return (prefsbackend.get_string) (group, pref_name);
+    if (prefsbackend && prefsbackend->get_string)
+        return (prefsbackend->get_string) (group, pref_name);
     else
         return NULL;
 }
@@ -246,8 +247,8 @@
 gint gnc_prefs_get_enum (const gchar *group,
                          const gchar *pref_name)
 {
-    if (prefsbackend.get_enum)
-        return (prefsbackend.get_enum) (group, pref_name);
+    if (prefsbackend && prefsbackend->get_enum)
+        return (prefsbackend->get_enum) (group, pref_name);
     else
         return 0;
 }
@@ -271,8 +272,8 @@
 GVariant *gnc_prefs_get_value (const gchar *group,
                                const gchar *pref_name)
 {
-    if (prefsbackend.get_value)
-        return (prefsbackend.get_value) (group,pref_name);
+    if (prefsbackend && prefsbackend->get_value)
+        return (prefsbackend->get_value) (group,pref_name);
     else
         return NULL;
 }
@@ -282,8 +283,8 @@
                              const gchar *pref_name,
                              gboolean value)
 {
-    if (prefsbackend.set_bool)
-        return (prefsbackend.set_bool) (group, pref_name, value);
+    if (prefsbackend && prefsbackend->set_bool)
+        return (prefsbackend->set_bool) (group, pref_name, value);
     else
         return FALSE;
 }
@@ -293,8 +294,8 @@
                             const gchar *pref_name,
                             gint value)
 {
-    if (prefsbackend.set_int)
-        return (prefsbackend.set_int) (group, pref_name, value);
+    if (prefsbackend && prefsbackend->set_int)
+        return (prefsbackend->set_int) (group, pref_name, value);
     else
         return FALSE;
 }
@@ -313,8 +314,8 @@
                               const gchar *pref_name,
                               gdouble value)
 {
-    if (prefsbackend.set_float)
-        return (prefsbackend.set_float) (group, pref_name, value);
+    if (prefsbackend && prefsbackend->set_float)
+        return (prefsbackend->set_float) (group, pref_name, value);
     else
         return FALSE;
 }
@@ -324,8 +325,8 @@
                                const gchar *pref_name,
                                const gchar *value)
 {
-    if (prefsbackend.set_string)
-        return (prefsbackend.set_string) (group, pref_name, value);
+    if (prefsbackend && prefsbackend->set_string)
+        return (prefsbackend->set_string) (group, pref_name, value);
     else
         return FALSE;
 }
@@ -335,8 +336,8 @@
                              const gchar *pref_name,
                              gint value)
 {
-    if (prefsbackend.set_enum)
-        return (prefsbackend.set_enum) (group, pref_name, value);
+    if (prefsbackend && prefsbackend->set_enum)
+        return (prefsbackend->set_enum) (group, pref_name, value);
     else
         return FALSE;
 }
@@ -355,8 +356,8 @@
                               const gchar *pref_name,
                               GVariant *value)
 {
-    if (prefsbackend.set_value)
-        return (prefsbackend.set_value) (group, pref_name, value);
+    if (prefsbackend && prefsbackend->set_value)
+        return (prefsbackend->set_value) (group, pref_name, value);
     else
         return FALSE;
 }
@@ -365,13 +366,18 @@
 void gnc_prefs_reset (const gchar *group,
                       const gchar *pref_name)
 {
-    if (prefsbackend.reset)
-        (prefsbackend.reset) (group, pref_name);
+    if (prefsbackend && prefsbackend->reset)
+        (prefsbackend->reset) (group, pref_name);
 }
 
 void gnc_prefs_reset_group (const gchar *group)
 {
-    if (prefsbackend.reset_group)
-        (prefsbackend.reset_group) (group);
+    if (prefsbackend && prefsbackend->reset_group)
+        (prefsbackend->reset_group) (group);
 }
 
+gboolean gnc_prefs_is_set_up (void)
+{
+    return (prefsbackend !=NULL);
+}
+

Modified: gnucash/trunk/src/core-utils/gnc-prefs.h
===================================================================
--- gnucash/trunk/src/core-utils/gnc-prefs.h	2013-12-01 04:53:05 UTC (rev 23472)
+++ gnucash/trunk/src/core-utils/gnc-prefs.h	2013-12-02 16:05:32 UTC (rev 23473)
@@ -116,6 +116,11 @@
 
 /** @} */
 
+
+/** Test if preferences backend is set up
+*/
+gboolean gnc_prefs_is_set_up (void);
+
 /** @name Listening for changes
  @{
 */



More information about the gnucash-changes mailing list