summaryrefslogtreecommitdiffstats
path: root/linux.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux.c')
-rw-r--r--linux.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/linux.c b/linux.c
new file mode 100644
index 000000000..2edcf85a1
--- /dev/null
+++ b/linux.c
@@ -0,0 +1,48 @@
+/* linux.c */
+/* implements Linux specific functions */
+#include "display-gtk.h"
+#include <gconf/gconf-client.h>
+
+GConfClient *gconf;
+
+static char *gconf_name(char *name)
+{
+ static char buf[255] = "/apps/subsurface/";
+
+ snprintf(buf, 255, "/apps/subsurface/%s", name);
+
+ return buf;
+}
+
+void subsurface_open_conf(void)
+{
+ gconf = gconf_client_get_default();
+}
+
+void subsurface_set_conf(char *name, pref_type_t type, const void *value)
+{
+ switch (type) {
+ case PREF_BOOL:
+ gconf_client_set_bool(gconf, gconf_name(name), value != NULL, NULL);
+ break;
+ case PREF_STRING:
+ gconf_client_set_string(gconf, gconf_name(name), value, NULL);
+ }
+}
+
+const void *subsurface_get_conf(char *name, pref_type_t type)
+{
+ switch (type) {
+ case PREF_BOOL:
+ return gconf_client_get_bool(gconf, gconf_name(name), NULL) ? (void *) 1 : NULL;
+ case PREF_STRING:
+ return gconf_client_get_string(gconf, gconf_name(name), NULL);
+ }
+ /* we shouldn't get here */
+ return NULL;
+}
+
+void subsurface_close_conf(void)
+{
+ /* this is a no-op */
+}