diff --git a/app/src/processing/app/syntax/InputHandler.java b/app/src/processing/app/syntax/InputHandler.java index debf3023b..5009dc407 100644 --- a/app/src/processing/app/syntax/InputHandler.java +++ b/app/src/processing/app/syntax/InputHandler.java @@ -1173,4 +1173,12 @@ public abstract class InputHandler extends KeyAdapter } return wordEnd; } + + + /** + * Called when input method support committed a character. + * @param c The input character + */ + public void onCommittedFromInputMethodSupport(char c) { + } } diff --git a/app/src/processing/app/syntax/JEditTextArea.java b/app/src/processing/app/syntax/JEditTextArea.java index 0466a1955..94ce33c81 100644 --- a/app/src/processing/app/syntax/JEditTextArea.java +++ b/app/src/processing/app/syntax/JEditTextArea.java @@ -193,6 +193,12 @@ public class JEditTextArea extends JComponent if (Preferences.getBoolean("editor.input_method_support")) { if (inputMethodSupport == null) { inputMethodSupport = new InputMethodSupport(this); + inputMethodSupport.setCallback(new InputMethodSupport.Callback() { + @Override + public void onCommitted(char c) { + inputHandler.onCommittedFromInputMethodSupport(c); + } + }); } return inputMethodSupport; } diff --git a/app/src/processing/app/syntax/im/InputMethodSupport.java b/app/src/processing/app/syntax/im/InputMethodSupport.java index f092e05c1..b44a686f0 100644 --- a/app/src/processing/app/syntax/im/InputMethodSupport.java +++ b/app/src/processing/app/syntax/im/InputMethodSupport.java @@ -40,6 +40,10 @@ import processing.app.syntax.TextAreaPainter; */ public class InputMethodSupport implements InputMethodRequests, InputMethodListener { + public interface Callback { + public void onCommitted(char c); + } + static private final Attribute[] CUSTOM_IM_ATTRIBUTES = { TextAttribute.INPUT_METHOD_HIGHLIGHT, }; @@ -47,6 +51,7 @@ public class InputMethodSupport implements InputMethodRequests, InputMethodListe private int committedCount = 0; private JEditTextArea textArea; private AttributedString composedTextString; + private Callback callback; public InputMethodSupport(JEditTextArea textArea) { this.textArea = textArea; @@ -55,6 +60,11 @@ public class InputMethodSupport implements InputMethodRequests, InputMethodListe } + public void setCallback(Callback callback) { + this.callback = callback; + } + + ///////////////////////////////////////////////////////////////////////////// // InputMethodRequest @@ -170,6 +180,8 @@ public class InputMethodSupport implements InputMethodRequests, InputMethodListe char c = text.first(); while (remaining-- > 0) { insertCharacter(c); + if (callback != null) + callback.onCommitted(c); c = text.next(); } diff --git a/java/src/processing/mode/java/JavaInputHandler.java b/java/src/processing/mode/java/JavaInputHandler.java index 99b7f18c4..b675c063a 100644 --- a/java/src/processing/mode/java/JavaInputHandler.java +++ b/java/src/processing/mode/java/JavaInputHandler.java @@ -334,6 +334,13 @@ public class JavaInputHandler extends PdeInputHandler { } + @Override + public void onCommittedFromInputMethodSupport(char c) { + Sketch sketch = editor.getSketch(); + sketch.setModified(true); + } + + /** * Return the index for the first character on this line. */