Ticket #1503: message_window_accels.3.patch

File message_window_accels.3.patch, 5.5 kB (added by Davidov, 14 months ago)

v.03 (now forwards to message textview)

  • src/message_window.py

     
    7070                id = self.window.connect('focus-in-event', self._on_window_focus) 
    7171                self.handlers[id] = self.window 
    7272 
     73                keys=['<Control>h', '<Control>i', '<Control><Shift>Tab', 
     74                                '<Control>Tab', '<Control>F4', '<Control>w', 
     75                                '<Alt>Right', '<Alt>Left', '<Alt>c', 'Escape'] +\ 
     76                                ['<Alt>'+str(i) for i in xrange(10)] 
    7377                accel_group = gtk.AccelGroup() 
    74                 key, mod = gtk.accelerator_parse('<Control>h') 
    75                 accel_group.connect_group(key, mod, gtk.ACCEL_VISIBLE, 
    76                         self.accel_group_func) 
    77                 key, mod = gtk.accelerator_parse('<Control>i') 
    78                 accel_group.connect_group(key, mod, gtk.ACCEL_VISIBLE, 
    79                         self.accel_group_func) 
     78                for key in keys: 
     79                        keyval, mod = gtk.accelerator_parse(key) 
     80                        accel_group.connect_group(keyval, mod, gtk.ACCEL_VISIBLE, 
     81                                self.accel_group_func) 
    8082                self.window.add_accel_group(accel_group) 
    8183 
    8284                # gtk+ doesn't make use of the motion notify on gtkwindow by default 
     
    251253                                self.notebook.emit('key_press_event', event) 
    252254 
    253255        def accel_group_func(self, accel_group, acceleratable, keyval, modifier): 
     256                st = '1234567890' # alt+1 means the first tab (tab 0) 
    254257                control = self.get_active_control() 
    255258                if not control: 
    256259                        # No more control in this window 
    257260                        return 
     261                 
     262                # CTRL mask 
    258263                if modifier & gtk.gdk.CONTROL_MASK: 
    259264                        if keyval == gtk.keysyms.h: 
    260265                                control._on_history_menuitem_activate() 
    261                         if control.type_id == message_control.TYPE_CHAT and \ 
     266                        elif control.type_id == message_control.TYPE_CHAT and \ 
    262267                        keyval == gtk.keysyms.i: 
    263268                                control._on_contact_information_menuitem_activate(None) 
     269                        # Tab switch bindings 
     270                        elif keyval == gtk.keysyms.ISO_Left_Tab: # CTRL + SHIFT + TAB 
     271                                self.move_to_next_unread_tab(False) 
     272                        elif keyval == gtk.keysyms.Tab: # CTRL + TAB 
     273                                self.move_to_next_unread_tab(True) 
     274                        elif keyval == gtk.keysyms.F4: # CTRL + F4 
     275                                self.remove_tab(control, self.CLOSE_CTRL_KEY) 
     276                        elif keyval == gtk.keysyms.w: # CTRL + W 
     277                                self.remove_tab(control, self.CLOSE_CTRL_KEY) 
    264278 
     279                # MOD1 (ALT) mask 
     280                elif modifier & gtk.gdk.MOD1_MASK: 
     281                        # Tab switch bindings 
     282                        if keyval == gtk.keysyms.Right: # ALT + RIGHT 
     283                                new = self.notebook.get_current_page() + 1 
     284                                if new >= self.notebook.get_n_pages():  
     285                                        new = 0 
     286                                self.notebook.set_current_page(new) 
     287                        elif keyval == gtk.keysyms.Left: # ALT + LEFT 
     288                                new = self.notebook.get_current_page() - 1 
     289                                if new < 0: 
     290                                        new = self.notebook.get_n_pages() - 1 
     291                                self.notebook.set_current_page(new) 
     292                        elif chr(keyval) in st: # ALT + 1,2,3.. 
     293                                self.notebook.set_current_page(st.index(chr(keyval))) 
     294                        elif keyval == gtk.keysyms.c: # ALT + C toggles chat buttons 
     295                                control.chat_buttons_set_visible(not control.hide_chat_buttons) 
     296                # Close tab bindings 
     297                elif keyval == gtk.keysyms.Escape and \ 
     298                                gajim.config.get('escape_key_closes'): # Escape 
     299                        self.remove_tab(control, self.CLOSE_ESC) 
     300 
    265301        def _on_close_button_clicked(self, button, control): 
    266302                '''When close button is pressed: close a tab''' 
    267303                self.remove_tab(control, self.CLOSE_CLOSE_BUTTON) 
     
    541577                self.show_title(control = new_ctrl) 
    542578 
    543579        def _on_notebook_key_press(self, widget, event): 
    544                 st = '1234567890' # alt+1 means the first tab (tab 0) 
    545                 ctrl = self.get_active_control() 
     580                control = self.get_active_control() 
     581                #when we get a key press event in conversation textview, 
     582                if isinstance(control, ChatControlBase): 
     583                        #we forwarded it to message textview 
     584                        control.msg_textview.emit('key_press_event', event) 
     585                        control.msg_textview.grab_focus() 
    546586 
    547                 # CTRL mask 
    548                 if event.state & gtk.gdk.CONTROL_MASK: 
    549                         # Tab switch bindings 
    550                         if event.keyval == gtk.keysyms.ISO_Left_Tab: # CTRL + SHIFT + TAB 
    551                                 self.move_to_next_unread_tab(False) 
    552                         elif event.keyval == gtk.keysyms.Tab: # CTRL + TAB 
    553                                 self.move_to_next_unread_tab(True) 
    554                         elif event.keyval == gtk.keysyms.F4: # CTRL + F4 
    555                                 self.remove_tab(ctrl, self.CLOSE_CTRL_KEY) 
    556                         elif event.keyval == gtk.keysyms.w: # CTRL + W 
    557                                 self.remove_tab(ctrl, self.CLOSE_CTRL_KEY) 
    558  
    559                 # MOD1 (ALT) mask 
    560                 elif event.state & gtk.gdk.MOD1_MASK: 
    561                         # Tab switch bindings 
    562                         if event.keyval == gtk.keysyms.Right: # ALT + RIGHT 
    563                                 new = self.notebook.get_current_page() + 1 
    564                                 if new >= self.notebook.get_n_pages():  
    565                                         new = 0 
    566                                 self.notebook.set_current_page(new) 
    567                         elif event.keyval == gtk.keysyms.Left: # ALT + LEFT 
    568                                 new = self.notebook.get_current_page() - 1 
    569                                 if new < 0: 
    570                                         new = self.notebook.get_n_pages() - 1 
    571                                 self.notebook.set_current_page(new) 
    572                         elif event.string and event.string in st and \ 
    573                                         (event.state & gtk.gdk.MOD1_MASK): # ALT + 1,2,3.. 
    574                                 self.notebook.set_current_page(st.index(event.string)) 
    575                         elif event.keyval == gtk.keysyms.c: # ALT + C toggles chat buttons 
    576                                 ctrl.chat_buttons_set_visible(not ctrl.hide_chat_buttons) 
    577                 # Close tab bindings 
    578                 elif event.keyval == gtk.keysyms.Escape and \ 
    579                                 gajim.config.get('escape_key_closes'): # Escape 
    580                         self.remove_tab(ctrl, self.CLOSE_ESC) 
    581                 else: 
    582                         # If the active control has a message_textview pass the event to it 
    583                         active_ctrl = self.get_active_control() 
    584                         if isinstance(active_ctrl, ChatControlBase): 
    585                                 active_ctrl.msg_textview.emit('key_press_event', event) 
    586                                 active_ctrl.msg_textview.grab_focus() 
    587  
    588587        def setup_tab_dnd(self, child): 
    589588                '''Set tab label as drag source and connect the drag_data_get signal''' 
    590589                tab_label = self.notebook.get_tab_label(child)