Changeset 8900

Show
Ignore:
Timestamp:
10/10/07 18:13:16 (14 months ago)
Author:
asterix
Message:

[Davidov] use gtk.AccelGroup? to handle key press. Fixes #1503. also fixes #3466

Location:
trunk/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/chat_control.py

    r8897 r8900  
    176176                # Create textviews and connect signals 
    177177                self.conv_textview = ConversationTextview(self.account) 
     178                id = self.conv_textview.tv.connect('key_press_event', 
     179                        self._conv_textview_key_press_event) 
     180                self.handlers[id] = self.conv_textview.tv 
    178181                # FIXME: DND on non editable TextView, find a better way 
    179182                self.drag_entered = False 
     
    397400                        widget.modify_fg(gtk.STATE_NORMAL, fg_color) 
    398401                self.connect_style_event(widget, opts[0], opts[1]) 
     402 
     403        def _conv_textview_key_press_event(self, widget, event): 
     404                if event.state & (gtk.gdk.SHIFT_MASK | gtk.gdk.CONTROL_MASK): 
     405                        return False 
     406                self.parent_win.notebook.emit('key_press_event', event) 
    399407 
    400408        def _on_keypress_event(self, widget, event): 
  • trunk/src/message_window.py

    r8821 r8900  
    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 
     
    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) 
     278 
     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) 
    264300 
    265301        def _on_close_button_clicked(self, button, control): 
     
    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() 
    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() 
     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() 
    587586 
    588587        def setup_tab_dnd(self, child):