@@ -117,7 +117,7 @@ mpl.figure.prototype._init_canvas = function() {
117117 }
118118
119119 canvas_div . keydown ( 'key_press' , canvas_keyboard_event ) ;
120- canvas_div . keydown ( 'key_release' , canvas_keyboard_event ) ;
120+ canvas_div . keyup ( 'key_release' , canvas_keyboard_event ) ;
121121 this . canvas_div = canvas_div
122122 this . _canvas_extra_style ( canvas_div )
123123 this . root . append ( canvas_div ) ;
@@ -473,21 +473,35 @@ mpl.figure.prototype.mouse_event = function(event, name) {
473473 return false ;
474474}
475475
476+ mpl . figure . prototype . _key_event_extra = function ( event , name ) {
477+ // Handle any extra behaviour associated with a key event
478+ }
479+
476480mpl . figure . prototype . key_event = function ( event , name ) {
477- /* Don't fire events just when a modifier is changed. Modifiers are
478- sent along with other keys. */
479- if ( event . keyCode >= 16 && event . keyCode <= 20 ) {
480- return ;
481+
482+ // Prevent repeat events
483+ if ( name == 'key_press' )
484+ {
485+ if ( event . which === this . _key )
486+ return ;
487+ else
488+ this . _key = event . which ;
481489 }
490+ if ( name == 'key_release' )
491+ this . _key = null ;
482492
483493 var value = '' ;
484- if ( event . ctrlKey ) {
494+ if ( event . ctrlKey && event . which != 17 )
485495 value += "ctrl+" ;
486- }
487- if ( event . altKey ) {
496+ if ( event . altKey && event . which != 18 )
488497 value += "alt+" ;
489- }
490- value += String . fromCharCode ( event . keyCode ) . toLowerCase ( ) ;
498+ if ( event . shiftKey && event . which != 16 )
499+ value += "shift+" ;
500+
501+ value += 'k' ;
502+ value += event . which . toString ( ) ;
503+
504+ this . _key_event_extra ( event , name ) ;
491505
492506 this . send_message ( name , { key : value } ) ;
493507 return false ;
0 commit comments