--- PyRoom/basic_edit.py 2008-07-14 21:16:15.000000000 +0400 +++ PyRoom/basic_edit.py 2008-07-14 22:10:58.000000000 +0400 @@ -92,45 +92,50 @@ "on_button-save2_clicked" : self.save_quit, } self.aTree.signal_autoconnect(dic) - def key_press_event(self, widget, event): - """ key press event dispatcher """ + self.define_bindings() + + def define_bindings(self): + """ define global key bindings, imho there is no need + to do it each time when key is pressed """ + keymap = gtk.gdk.keymap_get_default() - bindings = { + raw_bindings = { gtk.keysyms.Page_Up: self.prev_buffer, gtk.keysyms.Page_Down: self.next_buffer, - gtk.keysyms.h: self.show_help, gtk.keysyms.H: self.show_help, - gtk.keysyms.i: self.show_info, gtk.keysyms.I: self.show_info, - gtk.keysyms.n: self.new_buffer, gtk.keysyms.N: self.new_buffer, - gtk.keysyms.o: self.open_file, gtk.keysyms.O: self.open_file, - gtk.keysyms.p: self.preferences.show, gtk.keysyms.P: self.preferences.show, - gtk.keysyms.q: self.dialog_quit, gtk.keysyms.Q: self.dialog_quit, - gtk.keysyms.s: self.save_file, gtk.keysyms.S: self.save_file, - gtk.keysyms.w: self.close_dialog, gtk.keysyms.W: self.close_dialog, - gtk.keysyms.y: self.redo, gtk.keysyms.Y: self.redo, - gtk.keysyms.z: self.undo, gtk.keysyms.Z: self.undo } + + self.bindings = {} + + for key in raw_bindings.keys(): + hardware_keycode = keymap.get_entries_for_keyval(key)[0][0] + self.bindings[hardware_keycode] = raw_bindings[key] + + if key == gtk.keysyms.S: + self.save_as_binding = hardware_keycode + + def key_press_event(self, widget, event): + """ key press event dispatcher """ + if event.state & gtk.gdk.CONTROL_MASK: # Special case for Control-Shift-s - if event.state & gtk.gdk.SHIFT_MASK: - print event.keyval - if event.state & gtk.gdk.SHIFT_MASK and event.keyval\ - == gtk.keysyms.S: - self.edit.save_file_as() + if event.state & gtk.gdk.SHIFT_MASK and event.hardware_keycode\ + == self.save_as_binding: + self.save_file_as() return True - if bindings.has_key(event.keyval): - bindings[event.keyval]() + if event.hardware_keycode in self.bindings: + self.bindings[event.hardware_keycode]() return True return False