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.
-
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.
-
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)