Skip to content
  • Suyuan Chang's avatar
    macOS: Fix bug that entry cannot press and hold a key to input accented character. · cfad43b8
    Suyuan Chang authored
    There're two issues in GdkQuartzView's NSTextInputClient implementation
    causes this bug.
    
    1. The -(NSRange)selectedRange should not return [NSNotFound, 0] if
       there's no selection. The accented character window will not show
       if returned NSRange's location is NSNotFound. Instead of that, the
       NSRange's location should be the caret position in the text input
       buffer.
    
    2. The accented character window will invoke
       -(void)insertText:replacementRange: with non-empty replacement
       range, to replace non-accented character with accented character
       after user select it from accented character window. This case is
       not implemented in original code. Here I use another gobject data
       to pass the information to input module and convert it into
       'delete-surrounding' event.
    
    Besides these, there's another bug cause gtk_im_context_filter_keypress()
    return wrong value while user press and hold a key. When user press
    and hold a key, the accented character window will consume the
    repeating key down event. Is this case, gtk_im_context_filter_keypress()
    should return TRUE, indicate the key press is filtered by input
    method module. But it will return FALSE because
    gtk_im_context_filter_keypress() assume that every key press event
    will generate some text from input method module.
    
    Fixes #1618
    cfad43b8