Add 'state' settings; add last opened path setting
[projects/chimara/chimara.git] / player / main.c
index 85dba4e43e33d03e633abc5a918f8c961cff94c5..70bad3b3941ae4062058548fec4631e0a942cccc 100644 (file)
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 
+/* Use a custom GSettings backend for our preferences file */
+#define G_SETTINGS_ENABLE_BACKEND
+#include <gio/gsettingsbackend.h>
+
 #include "error.h"
 #include <libchimara/chimara-glk.h>
 #include <libchimara/chimara-if.h>
@@ -56,6 +60,8 @@ GtkBuilder *builder = NULL;
 GtkWidget *aboutwindow = NULL;
 GtkWidget *prefswindow = NULL;
 GtkWidget *toolbar = NULL;
+GSettings *prefs_settings = NULL;
+GSettings *state_settings = NULL;
 
 GObject *
 load_object(const gchar *name)
@@ -139,7 +145,7 @@ create_window(void)
                }
 #endif /* DEBUG */
        }
-       
+
        glk = chimara_if_new();
        g_object_set(glk,
            "ignore-errors", TRUE,
@@ -206,7 +212,7 @@ create_window(void)
        g_signal_connect(glk, "notify::story-name", G_CALLBACK(change_window_title), window);
        
        /* Create preferences window */
-       //preferences_create(CHIMARA_GLK(glk));
+       preferences_create(CHIMARA_GLK(glk));
 }
 
 int
@@ -225,11 +231,20 @@ main(int argc, char *argv[])
        gdk_threads_init();
        gtk_init(&argc, &argv);
 
+       /* Initialize settings file */
+       gchar *keyfile = g_build_filename(g_get_home_dir(), ".chimara", NULL);
+       GSettingsBackend *backend = g_keyfile_settings_backend_new(keyfile, "/org/chimara-if/player/", NULL);
+       prefs_settings = g_settings_new_with_backend("org.chimara-if.player.preferences", backend);
+       state_settings = g_settings_new_with_backend("org.chimara-if.player.state", backend);
+
        create_window();
        gtk_widget_show_all(window);
 
        g_object_unref( G_OBJECT(uimanager) );
 
+       if(argc == 3) {
+               g_object_set(glk, "graphics-file", argv[2], NULL);
+       }
        if(argc >= 2) {
                if( !chimara_if_run_game(CHIMARA_IF(glk), argv[1], &error) ) {
                        error_dialog(GTK_WINDOW(window), error, "Error starting Glk library: ");