Changeset 8956

Show
Ignore:
Timestamp:
11/09/07 21:42:47 (10 months ago)
Author:
asterix
Message:

use accel groups

Location:
branches/gajim_0.11.2/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/gajim_0.11.2/src/chat_control.py

    r8955 r8956  
    138138                # Create textviews and connect signals 
    139139                self.conv_textview = ConversationTextview(self.account) 
     140                id = self.conv_textview.tv.connect('key_press_event', 
     141                        self._conv_textview_key_press_event) 
     142                self.handlers[id] = self.conv_textview.tv 
    140143 
    141144                self.conv_scrolledwindow = self.xml.get_widget( 
     
    336339                self.connect_style_event(widget, opts[0], opts[1]) 
    337340         
     341        def _conv_textview_key_press_event(self, widget, event): 
     342                if gtk.gtk_version < (2, 12, 0): 
     343                        return 
     344                if event.state & (gtk.gdk.SHIFT_MASK | gtk.gdk.CONTROL_MASK): 
     345                        return False 
     346                self.parent_win.notebook.emit('key_press_event', event) 
     347 
    338348        def _on_keypress_event(self, widget, event): 
    339349                if event.state & gtk.gdk.CONTROL_MASK: 
  • branches/gajim_0.11.2/src/message_window.py

    r8955 r8956  
    7070                self.handlers[id] = self.window 
    7171 
     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 
    7283                # gtk+ doesn't make use of the motion notify on gtkwindow by default 
    7384                # so this line adds that 
     
    234245                                self.notebook.emit('key_press_event', event) 
    235246 
     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 
    236293        def _on_close_button_clicked(self, button, control): 
    237294                '''When close button is pressed: close a tab''' 
     
    334391                        gajim.interface.msg_win_mgr._on_window_destroy(self.window) 
    335392                        # dnd clean up 
    336                         self.notebook.disconnect(self.hid) 
    337393                        self.notebook.drag_dest_unset() 
    338394                        self.window.destroy() 
     
    516572 
    517573        def _on_notebook_key_press(self, widget, event): 
    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() 
    561580 
    562581        def setup_tab_dnd(self, child):