Handle setMarkedText called from the event loop
Also pass through text with zero key
This commit is contained in:
@@ -1375,8 +1375,19 @@ is_ascii_control_char(char x) {
|
|||||||
selectedRange:(NSRange)selectedRange
|
selectedRange:(NSRange)selectedRange
|
||||||
replacementRange:(NSRange)replacementRange
|
replacementRange:(NSRange)replacementRange
|
||||||
{
|
{
|
||||||
debug_key("\n\tsetMarkedText: %s selectedRange: (%lu, %lu) replacementRange: (%lu, %lu)\n", polymorphic_string_as_utf8(string), selectedRange.location, selectedRange.length, replacementRange.location, replacementRange.length);
|
const char *s = polymorphic_string_as_utf8(string);
|
||||||
if (string == nil) { [self unmarkText]; return; }
|
debug_key("\n\tsetMarkedText: %s selectedRange: (%lu, %lu) replacementRange: (%lu, %lu)\n", s, selectedRange.location, selectedRange.length, replacementRange.location, replacementRange.length);
|
||||||
|
if (string == nil || !s[0]) {
|
||||||
|
bool had_marked_text = [self hasMarkedText];
|
||||||
|
[self unmarkText];
|
||||||
|
if (had_marked_text && !in_key_handler) {
|
||||||
|
debug_key("clearing pre-edit because setMarkedText called from event loop\n");
|
||||||
|
GLFWkeyevent glfw_keyevent = {.ime_state = GLFW_IME_PREEDIT_CHANGED};
|
||||||
|
_glfwInputKeyboard(window, &glfw_keyevent);
|
||||||
|
_glfw.ns.text[0] = 0;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
if ([string isKindOfClass:[NSAttributedString class]]) {
|
if ([string isKindOfClass:[NSAttributedString class]]) {
|
||||||
if (((NSMutableAttributedString*)string).length == 0) { [self unmarkText]; return; }
|
if (((NSMutableAttributedString*)string).length == 0) { [self unmarkText]; return; }
|
||||||
[markedText release];
|
[markedText release];
|
||||||
|
|||||||
@@ -187,7 +187,8 @@ on_key_input(GLFWkeyevent *ev) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!w) return;
|
if (!w) return;
|
||||||
} else if (w->last_special_key_pressed == key) {
|
} else if (w->last_special_key_pressed == key && key != 0) {
|
||||||
|
// key == 0 is sent by the glfw coca backend when text is inserted by the IME outside the key handlers
|
||||||
w->last_special_key_pressed = 0;
|
w->last_special_key_pressed = 0;
|
||||||
debug("ignoring release event for previous press that was handled as shortcut\n");
|
debug("ignoring release event for previous press that was handled as shortcut\n");
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user