Various PyGObject fixes
[projects/chimara/chimara.git] / player / player.py
index 82a619546b3c91ccb600ae5d4c27bd2a7e0200f7..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,39 +66,18 @@ 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)
         vbox.pack_start(menubar, False, False, 0)
         vbox.pack_start(toolbar, False, False, 0)
 
-        #builder.connect_signals(self)  # FIXME Segfaults?!
-        builder.get_object('open').connect('activate', self.on_open_activate)
-        builder.get_object('restore').connect('activate',
-            self.on_restore_activate)
-        builder.get_object('save').connect('activate', self.on_save_activate)
-        builder.get_object('stop').connect('activate', self.on_stop_activate)
-        builder.get_object('recent').connect('item-activated',
-            self.on_recent_item_activated)
-        builder.get_object('undo').connect('activate', self.on_undo_activate)
-        builder.get_object('quit').connect('activate', self.on_quit_activate)
-        builder.get_object('copy').connect('activate', self.on_copy_activate)
-        builder.get_object('paste').connect('activate', self.on_paste_activate)
-        builder.get_object('preferences').connect('activate',
-            self.on_preferences_activate)
-        builder.get_object('about').connect('activate', self.on_about_activate)
-        toolbar_action.connect('toggled', self.on_toolbar_toggled)
-        self.aboutwindow.connect('response', lambda x, *args: x.hide())
-        self.aboutwindow.connect('delete-event',
-            lambda x, *args: x.hide_on_delete())
-        self.window.connect('delete-event', self.on_window_delete_event)
-        self.prefswindow.connect('response', lambda x, *args: x.hide())
-        self.prefswindow.connect('delete-event',
-            lambda x, *args: x.hide_on_delete())
-        # FIXME Delete to here when above bug is fixed
+        builder.connect_signals(self)
 
         self.glk.connect('notify::program-name', self.change_window_title)
         self.glk.connect('notify::story-name', self.change_window_title)
@@ -267,6 +254,30 @@ class Player(GObject.GObject):
         if os.path.exists(blorbfile):
             self.glk.graphics_file = blorbfile
 
+    # Various signal handlers for GtkBuilder file
+    def gtk_widget_hide(self, widget, *args):
+        return Gtk.Widget.hide(widget)
+
+    def gtk_widget_hide_on_delete(self, widget, *args):
+        return Gtk.Widget.hide_on_delete(widget)
+
+    def dummy_handler(self, *args):
+        pass
+
+    on_resource_file_set = dummy_handler
+    on_interpreter_cell_changed = dummy_handler
+    on_toggle_underline = dummy_handler
+    on_toggle_italic = dummy_handler
+    on_toggle_bold = dummy_handler
+    on_toggle_justify = dummy_handler
+    on_toggle_right = dummy_handler
+    on_toggle_center = dummy_handler
+    on_toggle_left = dummy_handler
+    on_background_color_set = dummy_handler
+    on_foreground_color_set = dummy_handler
+    on_font_set = dummy_handler
+    on_css_filechooser_file_set = dummy_handler
+
 
 def _maybe(variant):
     """Gets a maybe value from a GVariant - not handled in PyGI"""