diff --git a/app/src/main/assets/layouts/greek.json b/app/src/main/assets/layouts/greek.json index c79f686ea..2510bc534 100644 --- a/app/src/main/assets/layouts/greek.json +++ b/app/src/main/assets/layouts/greek.json @@ -23,7 +23,11 @@ { "label": "η" }, { "label": "ξ" }, { "label": "κ" }, - { "label": "λ" } + { "label": "λ" }, + { "$": "shift_state_selector", + "shiftedManual": { "code": 776, "label": "¨" }, + "default": { "code": 769, "label": "´" } + } ], [ { "label": "ζ" }, diff --git a/app/src/main/java/helium314/keyboard/event/Event.kt b/app/src/main/java/helium314/keyboard/event/Event.kt index d36ab49c9..75fda0535 100644 --- a/app/src/main/java/helium314/keyboard/event/Event.kt +++ b/app/src/main/java/helium314/keyboard/event/Event.kt @@ -146,12 +146,19 @@ class Event private constructor( } // This creates an input event for a dead character. @see {@link #FLAG_DEAD} - fun createDeadEvent(codePoint: Int, keyCode: Int, metaState: Int, next: Event?): Event { // TODO: add an argument or something if we ever create a software layout with dead keys. + fun createDeadEvent(codePoint: Int, keyCode: Int, metaState: Int, next: Event?): Event { return Event(EVENT_TYPE_INPUT_KEYPRESS, null, codePoint, keyCode, metaState, Constants.EXTERNAL_KEYBOARD_COORDINATE, Constants.EXTERNAL_KEYBOARD_COORDINATE, null, FLAG_DEAD, next) } + // This creates an input event for a dead character. @see {@link #FLAG_DEAD} + @JvmStatic + fun createSoftwareDeadEvent(codePoint: Int, keyCode: Int, metaState: Int, x: Int, y: Int, next: Event?): Event { + return Event(EVENT_TYPE_INPUT_KEYPRESS, null, codePoint, keyCode, metaState, x, y, + null, FLAG_DEAD, next) + } + /** * Create an input event with nothing but a code point. This is the most basic possible input * event; it contains no information on many things the IME requires to function correctly, diff --git a/app/src/main/java/helium314/keyboard/latin/LatinIME.java b/app/src/main/java/helium314/keyboard/latin/LatinIME.java index b1932cd2d..f2d31cf74 100644 --- a/app/src/main/java/helium314/keyboard/latin/LatinIME.java +++ b/app/src/main/java/helium314/keyboard/latin/LatinIME.java @@ -1496,7 +1496,15 @@ public class LatinIME extends InputMethodService implements // this transformation, it should be done already before calling onEvent. final int keyX = mainKeyboardView.getKeyX(x); final int keyY = mainKeyboardView.getKeyY(y); - final Event event = createSoftwareKeypressEvent(codePoint, metaState, keyX, keyY, isKeyRepeat); + final Event event; + + // checking if the character is a combining accent + if (0x300 <= codePoint && codePoint <= 0x35b) { + event = Event.createSoftwareDeadEvent(codePoint, 0, metaState, x, y, null); + } else { + event = createSoftwareKeypressEvent(codePoint, metaState, keyX, keyY, isKeyRepeat); + } + onEvent(event); }