| | 72 | keys=['<Control>h', '<Control>i', '<Control><Shift>Tab', |
| | 73 | '<Control>Tab', '<Control>F4', '<Control>w', |
| | 74 | '<Alt>Right', '<Alt>Left', '<Alt>c', 'Escape'] +\ |
| | 75 | ['<Alt>'+str(i) for i in xrange(10)] |
| | 76 | accel_group = gtk.AccelGroup() |
| | 77 | for key in keys: |
| | 78 | keyval, mod = gtk.accelerator_parse(key) |
| | 79 | accel_group.connect_group(keyval, mod, gtk.ACCEL_VISIBLE, |
| | 80 | self.accel_group_func) |
| | 81 | self.window.add_accel_group(accel_group) |
| | 82 | |
| | 247 | def accel_group_func(self, accel_group, acceleratable, keyval, modifier): |
| | 248 | st = '1234567890' # alt+1 means the first tab (tab 0) |
| | 249 | control = self.get_active_control() |
| | 250 | if not control: |
| | 251 | # No more control in this window |
| | 252 | return |
| | 253 | |
| | 254 | # CTRL mask |
| | 255 | if modifier & gtk.gdk.CONTROL_MASK: |
| | 256 | if keyval == gtk.keysyms.h: |
| | 257 | control._on_history_menuitem_activate() |
| | 258 | elif control.type_id == message_control.TYPE_CHAT and \ |
| | 259 | keyval == gtk.keysyms.i: |
| | 260 | control._on_contact_information_menuitem_activate(None) |
| | 261 | # Tab switch bindings |
| | 262 | elif keyval == gtk.keysyms.ISO_Left_Tab: # CTRL + SHIFT + TAB |
| | 263 | self.move_to_next_unread_tab(False) |
| | 264 | elif keyval == gtk.keysyms.Tab: # CTRL + TAB |
| | 265 | self.move_to_next_unread_tab(True) |
| | 266 | elif keyval == gtk.keysyms.F4: # CTRL + F4 |
| | 267 | self.remove_tab(control, self.CLOSE_CTRL_KEY) |
| | 268 | elif keyval == gtk.keysyms.w: # CTRL + W |
| | 269 | self.remove_tab(control, self.CLOSE_CTRL_KEY) |
| | 270 | |
| | 271 | # MOD1 (ALT) mask |
| | 272 | elif modifier & gtk.gdk.MOD1_MASK: |
| | 273 | # Tab switch bindings |
| | 274 | if keyval == gtk.keysyms.Right: # ALT + RIGHT |
| | 275 | new = self.notebook.get_current_page() + 1 |
| | 276 | if new >= self.notebook.get_n_pages(): |
| | 277 | new = 0 |
| | 278 | self.notebook.set_current_page(new) |
| | 279 | elif keyval == gtk.keysyms.Left: # ALT + LEFT |
| | 280 | new = self.notebook.get_current_page() - 1 |
| | 281 | if new < 0: |
| | 282 | new = self.notebook.get_n_pages() - 1 |
| | 283 | self.notebook.set_current_page(new) |
| | 284 | elif chr(keyval) in st: # ALT + 1,2,3.. |
| | 285 | self.notebook.set_current_page(st.index(chr(keyval))) |
| | 286 | elif keyval == gtk.keysyms.c: # ALT + C toggles chat buttons |
| | 287 | control.chat_buttons_set_visible(not control.hide_chat_buttons) |
| | 288 | # Close tab bindings |
| | 289 | elif keyval == gtk.keysyms.Escape and \ |
| | 290 | gajim.config.get('escape_key_closes'): # Escape |
| | 291 | self.remove_tab(control, self.CLOSE_ESC) |
| | 292 | |
| 518 | | st = '1234567890' # alt+1 means the first tab (tab 0) |
| 519 | | ctrl = self.get_active_control() |
| 520 | | |
| 521 | | # CTRL mask |
| 522 | | if event.state & gtk.gdk.CONTROL_MASK: |
| 523 | | # Tab switch bindings |
| 524 | | if event.keyval == gtk.keysyms.ISO_Left_Tab: # CTRL + SHIFT + TAB |
| 525 | | self.move_to_next_unread_tab(False) |
| 526 | | elif event.keyval == gtk.keysyms.Tab: # CTRL + TAB |
| 527 | | self.move_to_next_unread_tab(True) |
| 528 | | elif event.keyval == gtk.keysyms.F4: # CTRL + F4 |
| 529 | | self.remove_tab(ctrl, self.CLOSE_CTRL_KEY) |
| 530 | | elif event.keyval == gtk.keysyms.w: # CTRL + W |
| 531 | | self.remove_tab(ctrl, self.CLOSE_CTRL_KEY) |
| 532 | | |
| 533 | | # MOD1 (ALT) mask |
| 534 | | elif event.state & gtk.gdk.MOD1_MASK: |
| 535 | | # Tab switch bindings |
| 536 | | if event.keyval == gtk.keysyms.Right: # ALT + RIGHT |
| 537 | | new = self.notebook.get_current_page() + 1 |
| 538 | | if new >= self.notebook.get_n_pages(): |
| 539 | | new = 0 |
| 540 | | self.notebook.set_current_page(new) |
| 541 | | elif event.keyval == gtk.keysyms.Left: # ALT + LEFT |
| 542 | | new = self.notebook.get_current_page() - 1 |
| 543 | | if new < 0: |
| 544 | | new = self.notebook.get_n_pages() - 1 |
| 545 | | self.notebook.set_current_page(new) |
| 546 | | elif event.string and event.string in st and \ |
| 547 | | (event.state & gtk.gdk.MOD1_MASK): # ALT + 1,2,3.. |
| 548 | | self.notebook.set_current_page(st.index(event.string)) |
| 549 | | elif event.keyval == gtk.keysyms.c: # ALT + C toggles chat buttons |
| 550 | | ctrl.chat_buttons_set_visible(not ctrl.hide_chat_buttons_current) |
| 551 | | # Close tab bindings |
| 552 | | elif event.keyval == gtk.keysyms.Escape and \ |
| 553 | | gajim.config.get('escape_key_closes'): # Escape |
| 554 | | self.remove_tab(ctrl, self.CLOSE_ESC) |
| 555 | | else: |
| 556 | | # If the active control has a message_textview pass the event to it |
| 557 | | active_ctrl = self.get_active_control() |
| 558 | | if isinstance(active_ctrl, ChatControlBase): |
| 559 | | active_ctrl.msg_textview.emit('key_press_event', event) |
| 560 | | active_ctrl.msg_textview.grab_focus() |
| | 574 | control = self.get_active_control() |
| | 575 | #when we get a key press event in conversation textview, |
| | 576 | if isinstance(control, ChatControlBase): |
| | 577 | #we forwarded it to message textview |
| | 578 | control.msg_textview.emit('key_press_event', event) |
| | 579 | control.msg_textview.grab_focus() |