Skip to content

macOS: Fix bug that entry cannot press and hold a key to input accented character.

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 (closed)

Merge request reports