Ticket #1503: message_window_accels.2.patch

File message_window_accels.2.patch, 5.6 kB (added by anonymous, 14 months ago)

patch against current svn [v.02]

  • 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 
     
    8890                id = self.notebook.connect('switch-page', 
    8991                        self._on_notebook_switch_page) 
    9092                self.handlers[id] = self.notebook 
    91                 id = self.notebook.connect('key-press-event', 
    92                         self._on_notebook_key_press) 
    93                 self.handlers[id] = self.notebook 
    94  
     93                 
    9594                # Remove the glade pages 
    9695                while self.notebook.get_n_pages(): 
    9796                        self.notebook.remove_page(0) 
     
    251250                                self.notebook.emit('key_press_event', event) 
    252251 
    253252        def accel_group_func(self, accel_group, acceleratable, keyval, modifier): 
     253                st = '1234567890' # alt+1 means the first tab (tab 0) 
    254254                control = self.get_active_control() 
    255255                if not control: 
    256256                        # No more control in this window 
    257257                        return 
     258                 
     259                # CTRL mask 
    258260                if modifier & gtk.gdk.CONTROL_MASK: 
    259261                        if keyval == gtk.keysyms.h: 
    260262                                control._on_history_menuitem_activate() 
    261                         if control.type_id == message_control.TYPE_CHAT and \ 
     263                        elif control.type_id == message_control.TYPE_CHAT and \ 
    262264                        keyval == gtk.keysyms.i: 
    263265                                control._on_contact_information_menuitem_activate(None) 
     266                        # Tab switch bindings 
     267                        elif keyval == gtk.keysyms.ISO_Left_Tab: # CTRL + SHIFT + TAB 
     268                                self.move_to_next_unread_tab(False) 
     269                        elif keyval == gtk.keysyms.Tab: # CTRL + TAB 
     270                                self.move_to_next_unread_tab(True) 
     271                        elif keyval == gtk.keysyms.F4: # CTRL + F4 
     272                                self.remove_tab(control, self.CLOSE_CTRL_KEY) 
     273                        elif keyval == gtk.keysyms.w: # CTRL + W 
     274                                self.remove_tab(control, self.CLOSE_CTRL_KEY) 
    264275 
     276                # MOD1 (ALT) mask 
     277                elif modifier & gtk.gdk.MOD1_MASK: 
     278                        # Tab switch bindings 
     279                        if keyval == gtk.keysyms.Right: # ALT + RIGHT 
     280                                new = self.notebook.get_current_page() + 1 
     281                                if new >= self.notebook.get_n_pages():  
     282                                        new = 0 
     283                                self.notebook.set_current_page(new) 
     284                        elif keyval == gtk.keysyms.Left: # ALT + LEFT 
     285                                new = self.notebook.get_current_page() - 1 
     286                                if new < 0: 
     287                                        new = self.notebook.get_n_pages() - 1 
     288                                self.notebook.set_current_page(new) 
     289                        elif chr(keyval) in st: # ALT + 1,2,3.. 
     290                                self.notebook.set_current_page(st.index(chr(keyval))) 
     291                        elif keyval == gtk.keysyms.c: # ALT + C toggles chat buttons 
     292                                control.chat_buttons_set_visible(not control.hide_chat_buttons) 
     293                # Close tab bindings 
     294                elif keyval == gtk.keysyms.Escape and \ 
     295                                gajim.config.get('escape_key_closes'): # Escape 
     296                        self.remove_tab(control, self.CLOSE_ESC) 
     297 
    265298        def _on_close_button_clicked(self, button, control): 
    266299                '''When close button is pressed: close a tab''' 
    267300                self.remove_tab(control, self.CLOSE_CLOSE_BUTTON) 
     
    540573                new_ctrl.set_control_active(True) 
    541574                self.show_title(control = new_ctrl) 
    542575 
    543         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() 
    546  
    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  
    588576        def setup_tab_dnd(self, child): 
    589577                '''Set tab label as drag source and connect the drag_data_get signal''' 
    590578                tab_label = self.notebook.get_tab_label(child)