summaryrefslogtreecommitdiff
path: root/mini-commander/src/mc-install-default-macros.c
diff options
context:
space:
mode:
Diffstat (limited to 'mini-commander/src/mc-install-default-macros.c')
-rw-r--r--mini-commander/src/mc-install-default-macros.c179
1 files changed, 179 insertions, 0 deletions
diff --git a/mini-commander/src/mc-install-default-macros.c b/mini-commander/src/mc-install-default-macros.c
new file mode 100644
index 00000000..51750173
--- /dev/null
+++ b/mini-commander/src/mc-install-default-macros.c
@@ -0,0 +1,179 @@
+/*
+ * mc-install-default-macros.c:
+ * Copyright (C) 2002 Sun Microsystems Inc.
+ *
+ * Authors: Mark McLoughlin <[email protected]>
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/* This reads the macro patterns and commands lists
+ * schemas and sets the default values to be our
+ * default list of macros.
+ *
+ * This is easier than trying to have this stuff
+ * in the .schemas file - you would believe the
+ * kind of escaping and hackery needed to get
+ * it into the .schemas, and even then its impossible
+ * to tell which pattern is for which macro ...
+ */
+
+/* This is to have access to mateconf_engine_get_local() */
+#define MATECONF_ENABLE_INTERNALS 1
+
+#include <config.h>
+#include <stdio.h>
+
+#include <glib/gi18n.h>
+#include <mateconf/mateconf.h>
+#include <mateconf/mateconf-client.h>
+#include <mateconf/mateconf-engine.h>
+
+/* Okay, I'm VERY bold. I deserve to be spanked.
+ *
+ * But this isn't installed, its only used at build time,
+ * so I don't feel too bad. If these disappear from the
+ * ABI or their signature changes, the build will break
+ * and someone will have to figure out how to fix it.
+ * Too bad, whoever you are :/
+ */
+void mateconf_shutdown_daemon (GError **err);
+
+#include "mc-default-macros.h"
+
+#define MC_PATTERNS_SHEMA_KEY "/schemas/apps/mini-commander-global/macro_patterns"
+#define MC_COMMANDS_SHEMA_KEY "/schemas/apps/mini-commander-global/macro_commands"
+
+/*
+ * Keep these old schemas around in order to keep
+ * old configurations from breaking. See bug #91194
+ */
+#define MC_DEPRECATED_PATTERNS_SHEMA_KEY "/schemas/apps/mini-commander/prefs/macro_patterns"
+#define MC_DEPRECATED_COMMANDS_SHEMA_KEY "/schemas/apps/mini-commander/prefs/macro_commands"
+
+static void
+install_default_macros_list (MateConfClient *client,
+ const char *key,
+ int offset)
+{
+ MateConfSchema *schema;
+ MateConfValue *value;
+ GSList *list = NULL;
+ GError *error;
+ int i;
+
+ error = NULL;
+ schema = mateconf_client_get_schema (client, key, &error);
+ if (error) {
+ g_warning (_("Cannot get schema for %s: %s"), key, error->message);
+ g_error_free (error);
+ return;
+ }
+
+ /* mateconf has started to return NULL with no error set. */
+ g_return_if_fail (schema != NULL);
+
+ /* Some sanity checks */
+ g_assert (mateconf_schema_get_type (schema) == MATECONF_VALUE_LIST);
+ g_assert (mateconf_schema_get_list_type (schema) == MATECONF_VALUE_STRING);
+
+ value = mateconf_value_new (MATECONF_VALUE_LIST);
+ mateconf_value_set_list_type (value, MATECONF_VALUE_STRING);
+
+ for (i = 0; i < G_N_ELEMENTS (mc_default_macros); i++)
+ list = g_slist_prepend (list,
+ mateconf_value_new_from_string (MATECONF_VALUE_STRING,
+ G_STRUCT_MEMBER (char *, &mc_default_macros [i], offset),
+ NULL));
+ list = g_slist_reverse (list);
+
+ mateconf_value_set_list_nocopy (value, list);
+ list = NULL;
+
+ mateconf_schema_set_default_value_nocopy (schema, value);
+ value = NULL;
+
+ error = NULL;
+ mateconf_client_set_schema (client, key, schema, &error);
+ if (error) {
+ g_warning (_("Cannot set schema for %s: %s"), key, error->message);
+ g_error_free (error);
+ }
+
+ mateconf_schema_free (schema);
+
+ printf (_("Set default list value for %s\n"), key);
+}
+
+int
+main (int argc, char **argv)
+{
+ MateConfClient *client;
+ MateConfEngine *conf;
+ GError *error = NULL;
+ const char *config_source;
+
+ if (g_getenv ("MATECONF_DISABLE_MAKEFILE_SCHEMA_INSTALL")) {
+ fprintf (stderr, _("MATECONF_DISABLE_MAKEFILE_SCHEMA_INSTALL is set, not installing schemas\n"));
+ return 0;
+ }
+
+ g_type_init ();
+
+ config_source = g_getenv ("MATECONF_CONFIG_SOURCE");
+ if (!config_source) {
+ fprintf (stderr, _("Must set the MATECONF_CONFIG_SOURCE environment variable\n"));
+ return -1;
+ }
+
+ if (*config_source == '\0')
+ config_source = NULL;
+
+ /* shut down daemon, this is a race condition, but will usually work. */
+ mateconf_shutdown_daemon (NULL);
+
+ if (!config_source)
+ conf = mateconf_engine_get_default ();
+ else
+ conf = mateconf_engine_get_local (config_source, &error);
+
+ if (!conf) {
+ g_assert (error != NULL);
+ fprintf (stderr, _("Failed to access configuration source(s): %s\n"), error->message);
+ g_error_free (error);
+ return -1;
+ }
+
+ client = mateconf_client_get_for_engine (conf);
+
+ install_default_macros_list (client, MC_PATTERNS_SHEMA_KEY, G_STRUCT_OFFSET (MCDefaultMacro, pattern));
+ install_default_macros_list (client, MC_COMMANDS_SHEMA_KEY, G_STRUCT_OFFSET (MCDefaultMacro, command));
+
+ install_default_macros_list (client, MC_DEPRECATED_PATTERNS_SHEMA_KEY, G_STRUCT_OFFSET (MCDefaultMacro, pattern));
+ install_default_macros_list (client, MC_DEPRECATED_COMMANDS_SHEMA_KEY, G_STRUCT_OFFSET (MCDefaultMacro, command));
+
+ mateconf_client_suggest_sync (client, &error);
+ if (error) {
+ fprintf (stderr, _("Error syncing config data: %s"),
+ error->message);
+ g_error_free (error);
+ return 1;
+ }
+
+ mateconf_engine_unref (conf);
+ g_object_unref (client);
+
+ return 0;
+}