def initialize(self): Triggers.instance = self keybindings.GetKeyboundObject().connect("keybinding", self.keybinding_callback) for target, (keystr, name, id_) in self.trigger_table.iteritems(): keybindings.bind_key(keystr, target) self.output_debug("Loaded triggers, count:", len(self.trigger_table))
def _add_trigger(self, leaf, keystr): for target in xrange(*keybindings.KEYRANGE_TRIGGERS): if target not in self.trigger_table: break keybindings.bind_key(keystr, target) name = unicode(leaf) self.trigger_table[target] = (keystr, name, puid.get_unique_id(leaf)) self.mark_for_update()
def on_buttonkeybinding_clicked(self, widget): keystr = getkey_dialog.ask_for_key(keybindings.bind_key, screen=widget.get_screen()) if keystr: self.entrykeybinding.set_text(keystr) self.output_debug("Try set keybinding with", keystr) keybindings.bind_key(keystr) setctl = settings.GetSettingsController() setctl.set_keybinding(keystr)
def try_bind_key(keystr): label = gtk.accelerator_get_label(*gtk.accelerator_parse(keystr)) ulabel = kupferstring.tounicode(label) if len(ulabel) == 1 and ulabel.isalnum(): return False target = keybindings.KEYRANGE_TRIGGERS[-1] - 1 succ = keybindings.bind_key(keystr, target) if succ: keybindings.bind_key(None, target) return succ
def main(self, quiet=False): """Start WindowController, present its window (if not @quiet)""" signal.signal(signal.SIGINT, self._on_early_interrupt) try: kserv = listen.Service() except listen.AlreadyRunningError: self.output_info("An instance is already running, exiting...") self.quit_now() except listen.NoConnectionError: kserv = None else: kserv.connect("present", self.activate) kserv.connect("show-hide", self.show_hide) kserv.connect("put-text", self._put_text_received) kserv.connect("put-files", self._put_files_received) kserv.connect("execute-file", self._execute_file_received) kserv.connect("quit", self.quit) # Load data and present UI sch = scheduler.GetScheduler() sch.load() self._load_window_position() if not quiet: self.activate() gobject.idle_add(self.lazy_setup) def do_main_iterations(max_events=0): # use sentinel form of iter for idx, pending in enumerate(iter(gtk.events_pending, False)): if max_events and idx > max_events: break gtk.main_iteration() try: gtk.main() # put away window *before exiting further* self.put_away() do_main_iterations(10) finally: self.save_data() # tear down but keep hanging if kserv: kserv.unregister() keybindings.bind_key(None, keybindings.KEYBINDING_DEFAULT) keybindings.bind_key(None, keybindings.KEYBINDING_MAGIC) do_main_iterations(100) # if we are still waiting, print a message if gtk.events_pending(): self.output_info("Waiting for tasks to finish...") do_main_iterations()
def on_button_reset_keys_clicked(self, button): if self.ask_user_for_reset_keybinding(): setctl = settings.GetSettingsController() setctl.reset_keybindings() self._show_keybindings(setctl) # Unbind all before re-binding for keybind_id, target in self.KEYBINDING_TARGETS.iteritems(): keybindings.bind_key(None, target) for keybind_id, target in self.KEYBINDING_TARGETS.iteritems(): keystr = setctl.get_global_keybinding(keybind_id) keybindings.bind_key(keystr, target)
def on_button_reset_keys_clicked(self, button): if self.ask_user_for_reset_keybinding(): setctl = settings.GetSettingsController() setctl.reset_keybindings() self._show_keybindings(setctl) # Unbind all before re-binding for keybind_id, target in self.KEYBINDING_TARGETS.items(): keybindings.bind_key(None, target) for keybind_id, target in self.KEYBINDING_TARGETS.items(): keystr = setctl.get_global_keybinding(keybind_id) keybindings.bind_key(keystr, target)
def on_keybindings_row_activate(self, treeview, path, view_column): def bind_key_func(target): def bind_key(keystr): return keybindings.bind_key(keystr, target) return bind_key it = self.keybind_store.get_iter(path) keybind_id = self.keybind_store.get_value(it, 2) setctl = settings.GetSettingsController() curr_key = setctl.get_global_keybinding(keybind_id) bind_func = bind_key_func(self.KEYBINDING_TARGETS[keybind_id]) keystr = getkey_dialog.ask_for_key(bind_func, curr_key) if keystr == '': keybindings.bind_key(None, self.KEYBINDING_TARGETS[keybind_id]) setctl.set_global_keybinding(keybind_id, keystr) self.keybind_store.set_value(it, 1, '') elif keystr is not None: setctl.set_global_keybinding(keybind_id, keystr) label = gtk.accelerator_get_label(*gtk.accelerator_parse(keystr)) self.keybind_store.set_value(it, 1, label)
def lazy_setup(self): """Do all setup that can be done after showing main interface. Connect to desktop services (keybinding callback, session logout callbacks etc). """ import signal from kupfer.ui import session from kupfer.core import settings self.output_debug("in lazy_setup") setctl = settings.GetSettingsController() if setctl.get_show_status_icon(): self.show_statusicon() setctl.connect("value-changed", self._settings_changed) keystr = setctl.get_keybinding() magickeystr = setctl.get_magic_keybinding() if keystr: succ = keybindings.bind_key(keystr) self.output_info("Trying to register %s to spawn kupfer.. %s" % (keystr, "success" if succ else "failed")) if magickeystr: succ = keybindings.bind_key(magickeystr, keybindings.KEYBINDING_MAGIC) self.output_debug("Trying to register %s to spawn kupfer.. %s" % (magickeystr, "success" if succ else "failed")) keyobj = keybindings.GetKeyboundObject() keyobj.connect("keybinding", self._key_binding) signal.signal(signal.SIGINT, self._sigterm) signal.signal(signal.SIGTERM, self._sigterm) signal.signal(signal.SIGHUP, self._sigterm) client = session.SessionClient() client.connect("save-yourself", self._session_save) client.connect("die", self._session_die) self.output_debug("finished lazy_setup")
def on_keybindings_row_activate(self, treeview, path, view_column): def bind_key_func(target): def bind_key(keystr): return keybindings.bind_key(keystr, target) return bind_key it = self.keybind_store.get_iter(path) keybind_id = self.keybind_store.get_value(it, 2) setctl = settings.GetSettingsController() curr_key = setctl.get_global_keybinding(keybind_id) bind_func = bind_key_func(self.KEYBINDING_TARGETS[keybind_id]) keystr = getkey_dialog.ask_for_key(bind_func, curr_key, screen=treeview.get_screen()) if keystr == '': keybindings.bind_key(None, self.KEYBINDING_TARGETS[keybind_id]) setctl.set_global_keybinding(keybind_id, keystr) self.keybind_store.set_value(it, 1, '') elif keystr is not None: setctl.set_global_keybinding(keybind_id, keystr) label = gtk.accelerator_get_label(*gtk.accelerator_parse(keystr)) self.keybind_store.set_value(it, 1, label)
def on_buttonkeybinding_clicked(self, widget): keystr = self.entrykeybinding.get_text() self.output_debug("Try set keybinding with", keystr) succ = keybindings.bind_key(keystr) if succ: self.imagekeybindingaux.set_property("stock", gtk.STOCK_APPLY) self.labelkeybindingaux.set_text(_("Applied")) self.buttonkeybinding.set_sensitive(False) else: self.imagekeybindingaux.set_property("stock", gtk.STOCK_DIALOG_WARNING) self.labelkeybindingaux.set_text(_("Keybinding could not be bound")) self.imagekeybindingaux.show() self.labelkeybindingaux.show() if succ: setctl = settings.GetSettingsController() setctl.set_keybinding(keystr)
def bind_key(keystr): return keybindings.bind_key(keystr, target)
def _remove_trigger(self, target): self.trigger_table.pop(target, None) keybindings.bind_key(None, target) self.mark_for_update()
def finalize(self): for target, (keystr, name, id_) in self.trigger_table.iteritems(): keybindings.bind_key(None, target)