X-Git-Url: https://git.stderr.nl/gitweb?p=projects%2Fchimara%2Fchimara.git;a=blobdiff_plain;f=player%2Fplayer.py;h=8437458880fae3ae0886774fbdc094aaf123c78a;hp=82a619546b3c91ccb600ae5d4c27bd2a7e0200f7;hb=402276613364c89057260e6fdda315c78dcecba2;hpb=b071c27096d3c99182a38086e93d1e42f27437c8 diff --git a/player/player.py b/player/player.py index 82a6195..8437458 100644 --- a/player/player.py +++ b/player/player.py @@ -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"""