Changeset 10240

Show
Ignore:
Timestamp:
08/14/08 18:17:32 (3 months ago)
Author:
asterix
Message:

use accel func for all key in chat controls. Fixes #1503

Location:
trunk/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/chat_control.py

    r10209 r10240  
    159159                id = widget.connect('clicked', self.on_emoticons_button_clicked) 
    160160                self.handlers[id] = widget 
    161  
    162                 id = self.widget.connect('key_press_event', self._on_keypress_event) 
    163                 self.handlers[id] = self.widget 
    164161 
    165162                # Create banner and connect signals 
     
    431428                self.parent_win.notebook.emit('key_press_event', event) 
    432429 
    433         def _on_keypress_event(self, widget, event): 
    434                 if event.state & gtk.gdk.CONTROL_MASK: 
    435                         # CTRL + l|L: clear conv_textview 
    436                         if event.keyval == gtk.keysyms.l or event.keyval == gtk.keysyms.L: 
    437                                 self.conv_textview.clear() 
    438                                 return True 
    439                         # CTRL + v: Paste into msg_textview 
    440                         elif event.keyval == gtk.keysyms.v: 
    441                                 if not self.msg_textview.is_focus(): 
    442                                         self.msg_textview.grab_focus() 
    443                                 # Paste into the msg textview 
    444                                 self.msg_textview.emit('key_press_event', event) 
    445                         # CTRL + u: emacs style clear line 
    446                         elif event.keyval == gtk.keysyms.u: 
    447                                 self.clear(self.msg_textview) # clear message textview too 
    448                         elif event.keyval == gtk.keysyms.ISO_Left_Tab: # CTRL + SHIFT + TAB 
    449                                 self.parent_win.move_to_next_unread_tab(False) 
    450                                 return True 
    451                         elif event.keyval == gtk.keysyms.Tab: # CTRL + TAB 
    452                                 self.parent_win.move_to_next_unread_tab(True) 
    453                                 return True 
    454                         # CTRL + PAGE_[UP|DOWN]: send to parent notebook 
    455                         elif event.keyval == gtk.keysyms.Page_Down or \ 
    456                                         event.keyval == gtk.keysyms.Page_Up: 
    457                                 self.parent_win.notebook.emit('key_press_event', event) 
    458                                 return True 
    459  
    460                 elif event.keyval == gtk.keysyms.m and \ 
    461                         (event.state & gtk.gdk.MOD1_MASK): # alt + m opens emoticons menu 
    462                         if gajim.config.get('emoticons_theme'): 
    463                                 msg_tv = self.msg_textview 
    464                                 def set_emoticons_menu_position(w, msg_tv = self.msg_textview): 
    465                                         window = msg_tv.get_window(gtk.TEXT_WINDOW_WIDGET) 
    466                                         # get the window position 
    467                                         origin = window.get_origin() 
    468                                         size = window.get_size() 
    469                                         buf = msg_tv.get_buffer() 
    470                                         # get the cursor position 
    471                                         cursor = msg_tv.get_iter_location(buf.get_iter_at_mark( 
    472                                                 buf.get_insert())) 
    473                                         cursor = msg_tv.buffer_to_window_coords(gtk.TEXT_WINDOW_TEXT, 
    474                                                 cursor.x, cursor.y) 
    475                                         x = origin[0] + cursor[0] 
    476                                         y = origin[1] + size[1] 
    477                                         menu_width, menu_height = \ 
    478                                                 gajim.interface.emoticons_menu.size_request() 
    479                                         #FIXME: get_line_count is not so good 
    480                                         #get the iter of cursor, then tv.get_line_yrange 
    481                                         # so we know in which y we are typing (not how many lines we have 
    482                                         # then go show just above the current cursor line for up 
    483                                         # or just below the current cursor line for down 
    484                                         #TEST with having 3 lines and writing in the 2nd 
    485                                         if y + menu_height > gtk.gdk.screen_height(): 
    486                                                 # move menu just above cursor 
    487                                                 y -= menu_height +\ 
    488                                                         (msg_tv.allocation.height / buf.get_line_count()) 
    489                                         #else: # move menu just below cursor 
    490                                         #       y -= (msg_tv.allocation.height / buf.get_line_count()) 
    491                                         return (x, y, True) # push_in True 
    492                                 gajim.interface.emoticon_menuitem_clicked = self.append_emoticon 
    493                                 gajim.interface.emoticons_menu.popup(None, None, 
    494                                         set_emoticons_menu_position, 1, 0) 
    495  
    496                 elif event.keyval == gtk.keysyms.a and \ 
    497                         (event.state & gtk.gdk.MOD1_MASK): # alt + a opens actions menu 
    498                                 self.on_actions_button_clicked(self.actions_button) 
    499                 return False 
     430        def show_emoticons_menu(self): 
     431                if not gajim.config.get('emoticons_theme'): 
     432                        return 
     433                msg_tv = self.msg_textview 
     434                def set_emoticons_menu_position(w, msg_tv = self.msg_textview): 
     435                        window = msg_tv.get_window(gtk.TEXT_WINDOW_WIDGET) 
     436                        # get the window position 
     437                        origin = window.get_origin() 
     438                        size = window.get_size() 
     439                        buf = msg_tv.get_buffer() 
     440                        # get the cursor position 
     441                        cursor = msg_tv.get_iter_location(buf.get_iter_at_mark( 
     442                                buf.get_insert())) 
     443                        cursor = msg_tv.buffer_to_window_coords(gtk.TEXT_WINDOW_TEXT, 
     444                                cursor.x, cursor.y) 
     445                        x = origin[0] + cursor[0] 
     446                        y = origin[1] + size[1] 
     447                        menu_width, menu_height = gajim.interface.emoticons_menu.size_request() 
     448                        #FIXME: get_line_count is not so good 
     449                        #get the iter of cursor, then tv.get_line_yrange 
     450                        # so we know in which y we are typing (not how many lines we have 
     451                        # then go show just above the current cursor line for up 
     452                        # or just below the current cursor line for down 
     453                        #TEST with having 3 lines and writing in the 2nd 
     454                        if y + menu_height > gtk.gdk.screen_height(): 
     455                                # move menu just above cursor 
     456                                y -= menu_height + (msg_tv.allocation.height / buf.get_line_count()) 
     457                        #else: # move menu just below cursor 
     458                        #       y -= (msg_tv.allocation.height / buf.get_line_count()) 
     459                        return (x, y, True) # push_in True 
     460                gajim.interface.emoticon_menuitem_clicked = self.append_emoticon 
     461                gajim.interface.emoticons_menu.popup(None, None, 
     462                        set_emoticons_menu_position, 1, 0) 
    500463 
    501464        def _on_message_textview_key_press_event(self, widget, event): 
  • trunk/src/message_window.py

    r10169 r10240  
    2929import gtk 
    3030import gobject 
     31import time 
    3132 
    3233import common 
     
    9192                self.handlers[id] = self.window 
    9293 
    93                 keys=['<Control>f', '<Control>g', '<Control>h', '<Control>i',  
    94                                 '<Control>n', '<Control>t', '<Control>b', 
    95                                 '<Control><Shift>Tab', '<Control>Tab', 
    96                                 '<Control>F4', '<Control>w', '<Alt>Right', 
    97                                 '<Alt>Left', '<Alt>c', 'Escape'] +\ 
    98                                 ['<Alt>'+str(i) for i in xrange(10)] 
     94                keys=['<Control>f', '<Control>g', '<Control>h', '<Control>i', 
     95                        '<Control>l', '<Control>L', '<Control>n', '<Control>t', '<Control>u', 
     96                        '<Control>v', '<Control>b', '<Control><Shift>Tab', '<Control>Tab', 
     97                        '<Control>F4', '<Control>w', '<Control>Page_Up', '<Control>Page_Down', 
     98                        '<Alt>Right', '<Alt>Left', '<Alt>a', '<Alt>c', '<Alt>m', 'Escape'] + \ 
     99                        ['<Alt>'+str(i) for i in xrange(10)] 
    99100                accel_group = gtk.AccelGroup() 
    100101                for key in keys: 
     
    312313                # CTRL mask 
    313314                if modifier & gtk.gdk.CONTROL_MASK: 
    314                         if keyval == gtk.keysyms.h: 
     315                        if keyval == gtk.keysyms.h: # CTRL + h 
    315316                                control._on_history_menuitem_activate() 
    316317                        elif control.type_id == message_control.TYPE_CHAT and \ 
    317                         keyval == gtk.keysyms.f: 
     318                        keyval == gtk.keysyms.f: # CTRL + f 
    318319                                control._on_send_file_menuitem_activate(None) 
    319320                        elif control.type_id == message_control.TYPE_CHAT and \ 
    320                         keyval == gtk.keysyms.g: 
     321                        keyval == gtk.keysyms.g: # CTRL + g 
    321322                                control._on_convert_to_gc_menuitem_activate(None) 
    322323                        elif control.type_id == message_control.TYPE_CHAT and \ 
    323                         keyval == gtk.keysyms.i: 
     324                        keyval == gtk.keysyms.i: # CTRL + i 
    324325                                control._on_contact_information_menuitem_activate(None) 
     326                        elif keyval == gtk.keysyms.l or keyval == gtk.keysyms.L: # CTRL + l|L 
     327                                control.conv_textview.clear() 
    325328                        elif control.type_id == message_control.TYPE_GC and \ 
    326                         keyval == gtk.keysyms.n: 
     329                        keyval == gtk.keysyms.n: # CTRL + n 
    327330                                control._on_change_nick_menuitem_activate(None) 
    328331                        elif control.type_id == message_control.TYPE_GC and \ 
    329                         keyval == gtk.keysyms.t: 
     332                        keyval == gtk.keysyms.t: # CTRL + t 
    330333                                control._on_change_subject_menuitem_activate(None) 
     334                        elif keyval == gtk.keysyms.u: # CTRL + u: emacs style clear line 
     335                                control.clear(control.msg_textview) 
     336                        elif keyval == gtk.keysyms.v: # CTRL + v: Paste into msg_textview 
     337                                if not control.msg_textview.is_focus(): 
     338                                        control.msg_textview.grab_focus() 
     339                                # Paste into the msg textview 
     340                                event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) 
     341                                event.window = self.window.window 
     342                                event.time = int(time.time()) 
     343                                event.state = gtk.gdk.CONTROL_MASK 
     344                                event.keyval = gtk.keysyms.v 
     345                                control.msg_textview.emit('key_press_event', event) 
    331346                        elif control.type_id == message_control.TYPE_GC and \ 
    332                         keyval == gtk.keysyms.b: 
     347                        keyval == gtk.keysyms.b: # CTRL + b 
    333348                                control._on_bookmark_room_menuitem_activate(None) 
    334349                        # Tab switch bindings 
     
    339354                        elif keyval == gtk.keysyms.F4: # CTRL + F4 
    340355                                self.remove_tab(control, self.CLOSE_CTRL_KEY) 
    341                         elif keyval == gtk.keysyms.w: # CTRL + W 
    342                                 # CTRL + W removes latest word before sursor when User uses emacs 
     356                        elif keyval == gtk.keysyms.w: # CTRL + w 
     357                                # CTRL + w removes latest word before sursor when User uses emacs 
    343358                                # theme 
    344359                                if not gtk.settings_get_default().get_property( 
    345360                                'gtk-key-theme-name') == 'Emacs': 
    346361                                        self.remove_tab(control, self.CLOSE_CTRL_KEY) 
     362                        elif keyval in (gtk.keysyms.Page_Up, gtk.keysyms.Page_Down): 
     363                                # CTRL + PageUp | PageDown 
     364                                # Create event and send it to notebook 
     365                                event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) 
     366                                event.window = self.window.window 
     367                                event.time = int(time.time()) 
     368                                event.state = gtk.gdk.CONTROL_MASK 
     369                                event.keyval = int(keyval) 
     370                                self.notebook.emit('key_press_event', event) 
    347371 
    348372                # MOD1 (ALT) mask 
     
    363387                        elif keyval == gtk.keysyms.c: # ALT + C toggles chat buttons 
    364388                                control.chat_buttons_set_visible(not control.hide_chat_buttons) 
     389                        elif keyval == gtk.keysyms.m: # ALT + M show emoticons menu 
     390                                control.show_emoticons_menu() 
     391                        elif keyval == gtk.keysyms.a: # ALT + A show actions menu 
     392                                control.on_actions_button_clicked(control.actions_button) 
    365393                # Close tab bindings 
    366394                elif keyval == gtk.keysyms.Escape and \