Changeset 10240
- Timestamp:
- 08/14/08 18:17:32 (3 months ago)
- Location:
- trunk/src
- Files:
-
- 2 modified
-
chat_control.py (modified) (2 diffs)
-
message_window.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/chat_control.py
r10209 r10240 159 159 id = widget.connect('clicked', self.on_emoticons_button_clicked) 160 160 self.handlers[id] = widget 161 162 id = self.widget.connect('key_press_event', self._on_keypress_event)163 self.handlers[id] = self.widget164 161 165 162 # Create banner and connect signals … … 431 428 self.parent_win.notebook.emit('key_press_event', event) 432 429 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) 500 463 501 464 def _on_message_textview_key_press_event(self, widget, event): -
trunk/src/message_window.py
r10169 r10240 29 29 import gtk 30 30 import gobject 31 import time 31 32 32 33 import common … … 91 92 self.handlers[id] = self.window 92 93 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)] 99 100 accel_group = gtk.AccelGroup() 100 101 for key in keys: … … 312 313 # CTRL mask 313 314 if modifier & gtk.gdk.CONTROL_MASK: 314 if keyval == gtk.keysyms.h: 315 if keyval == gtk.keysyms.h: # CTRL + h 315 316 control._on_history_menuitem_activate() 316 317 elif control.type_id == message_control.TYPE_CHAT and \ 317 keyval == gtk.keysyms.f: 318 keyval == gtk.keysyms.f: # CTRL + f 318 319 control._on_send_file_menuitem_activate(None) 319 320 elif control.type_id == message_control.TYPE_CHAT and \ 320 keyval == gtk.keysyms.g: 321 keyval == gtk.keysyms.g: # CTRL + g 321 322 control._on_convert_to_gc_menuitem_activate(None) 322 323 elif control.type_id == message_control.TYPE_CHAT and \ 323 keyval == gtk.keysyms.i: 324 keyval == gtk.keysyms.i: # CTRL + i 324 325 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() 325 328 elif control.type_id == message_control.TYPE_GC and \ 326 keyval == gtk.keysyms.n: 329 keyval == gtk.keysyms.n: # CTRL + n 327 330 control._on_change_nick_menuitem_activate(None) 328 331 elif control.type_id == message_control.TYPE_GC and \ 329 keyval == gtk.keysyms.t: 332 keyval == gtk.keysyms.t: # CTRL + t 330 333 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) 331 346 elif control.type_id == message_control.TYPE_GC and \ 332 keyval == gtk.keysyms.b: 347 keyval == gtk.keysyms.b: # CTRL + b 333 348 control._on_bookmark_room_menuitem_activate(None) 334 349 # Tab switch bindings … … 339 354 elif keyval == gtk.keysyms.F4: # CTRL + F4 340 355 self.remove_tab(control, self.CLOSE_CTRL_KEY) 341 elif keyval == gtk.keysyms.w: # CTRL + W342 # CTRL + Wremoves latest word before sursor when User uses emacs356 elif keyval == gtk.keysyms.w: # CTRL + w 357 # CTRL + w removes latest word before sursor when User uses emacs 343 358 # theme 344 359 if not gtk.settings_get_default().get_property( 345 360 'gtk-key-theme-name') == 'Emacs': 346 361 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) 347 371 348 372 # MOD1 (ALT) mask … … 363 387 elif keyval == gtk.keysyms.c: # ALT + C toggles chat buttons 364 388 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) 365 393 # Close tab bindings 366 394 elif keyval == gtk.keysyms.Escape and \
