Rich,
Alas, no luck with either.
FWIW I was able to find the source code of the go_conf_get_node and go_conf_add_monitor functions. Those functions are called from gnumeric but are actually defined in goffice's source code (in go-conf-settings.c). Maybe it gives some clue as to what we're looking for:
GOConfNode *
go_conf_get_node (GOConfNode *parent, gchar const *key)
{
GOConfNode *node;
char *formatted;
g_return_val_if_fail (parent || key, NULL);
formatted = go_conf_format_id (key);
node = g_new0 (GOConfNode, 1);
node->ref_count = 1;
if (parent) {
if (key && !parent->key) {
node->path = g_strconcat (parent->path, "/", key, NULL);
node->id = g_strconcat (parent->id, ".", formatted, NULL);
} else {
node->path = g_strdup (parent->path);
node->id = g_strdup (parent->id);
node->key = g_strdup (key? key: parent->key);
}
} else {
if (key[0] == '/') {
node->path = g_strdup (key);
node->id = g_strconcat ("org.gnome", formatted, NULL);
} else {
node->path = g_strconcat ("/apps/", key, NULL);
node->id = g_strconcat ("org.gnome.", formatted, NULL);
}
}
node->settings = g_hash_table_lookup (installed_schemas, node->id)? g_settings_new (node->id): NULL;
g_free (formatted);
if (!node->settings) {
char *last_dot = strrchr (node->id, '.');
*last_dot = 0;
node->settings = g_hash_table_lookup (installed_schemas, node->id)? g_settings_new (node->id): NULL;
if (node->settings) {
g_free (node->key);
node->key = g_strdup (last_dot + 1);
} else {
go_conf_free_node (node);
node = NULL;
}
}
return node;
}
guint
go_conf_add_monitor (GOConfNode *node, G_GNUC_UNUSED gchar const *key,
GOConfMonitorFunc monitor, gpointer data)
{
guint ret;
GOConfClosure *cls;
g_return_val_if_fail (node || key, 0);
g_return_val_if_fail (monitor != NULL, 0);
cls = g_new (GOConfClosure, 1);
cls->monitor = monitor;
cls->node = node;
cls->data = data;
cls->key = g_strdup (key? key: node->key);
cls->real_key = (key)? g_strconcat (node->path, '/', key, NULL): g_strdup (node->path);
ret = g_signal_connect
(node->settings,
"changed", G_CALLBACK (cb_key_changed),
cls);
g_hash_table_insert (closures, GUINT_TO_POINTER (ret), cls);
return ret;
}