Various PyGObject fixes
[projects/chimara/chimara.git] / player / player.py
index a50433fbbe09d0519b4cadfe86620f0e64f0b3c3..8437458880fae3ae0886774fbdc094aaf123c78a 100644 (file)
@@ -15,10 +15,18 @@ class Player(GObject.GObject):
     def __init__(self):
         super(Player, self).__init__()
 
-        # FIXME: should use the Keyfile backend, but that's not available from
-        # Python
-        self.prefs_settings = Gio.Settings('org.chimara-if.player.preferences')
-        self.state_settings = Gio.Settings('org.chimara-if.player.state')
+        if os.path.exists('chimara-config'):
+            keyfile = 'chimara-config'
+        else:
+            keyfile = os.path.expanduser('~/.chimara/config')
+        try:
+            # This only works on my custom-built gobject-introspection; opened
+            # bug #682702
+            backend = Gio.keyfile_settings_backend_new(keyfile, "/org/chimara-if/player/", None)
+        except AttributeError:
+            backend = None
+        self.prefs_settings = Gio.Settings('org.chimara-if.player.preferences', backend=backend)
+        self.state_settings = Gio.Settings('org.chimara-if.player.state', backend=backend)
 
         builder = Gtk.Builder()
         builder.add_from_file('chimara.ui')
@@ -45,7 +53,7 @@ class Player(GObject.GObject):
 
         uimanager = Gtk.UIManager()
         uimanager.add_ui_from_file('chimara.menus')
-        uimanager.insert_action_group(actiongroup, 0)
+        uimanager.insert_action_group(actiongroup)
         menubar = uimanager.get_widget('/menubar')
         toolbar = uimanager.get_widget('/toolbar')
         toolbar.no_show_all = True
@@ -58,9 +66,11 @@ class Player(GObject.GObject):
         accels = uimanager.get_accel_group()
         self.window.add_accel_group(accels)
 
-        self.glk = Chimara.IF()
-        self.glk.props.ignore_errors = True
-        self.glk.set_css_from_file('style.css')
+        self.glk = Chimara.IF(ignore_errors=True)
+        css_file = _maybe(self.prefs_settings.get_value('css-file'))
+        if css_file is None:
+            css_file = 'style.css'
+        self.glk.set_css_from_file(css_file)
 
         vbox = builder.get_object('vbox')
         vbox.pack_end(self.glk, True, True, 0)
@@ -245,11 +255,11 @@ class Player(GObject.GObject):
             self.glk.graphics_file = blorbfile
 
     # Various signal handlers for GtkBuilder file
-    def gtk_widget_hide(self, *args):
-        return Gtk.Widget.hide(*args)
+    def gtk_widget_hide(self, widget, *args):
+        return Gtk.Widget.hide(widget)
 
-    def gtk_widget_hide_on_delete(self, *args):
-        return Gtk.Widget.hide_on_delete(*args)
+    def gtk_widget_hide_on_delete(self, widget, *args):
+        return Gtk.Widget.hide_on_delete(widget)
 
     def dummy_handler(self, *args):
         pass