From 2f953e747ceb8facb87f0bfc75544a9d7d11597c Mon Sep 17 00:00:00 2001 From: tyfkda Date: Tue, 2 Aug 2016 09:06:47 +0900 Subject: [PATCH] Set sketch as modified when any character committed using input method support --- app/src/processing/app/syntax/InputHandler.java | 8 ++++++++ app/src/processing/app/syntax/JEditTextArea.java | 6 ++++++ .../processing/app/syntax/im/InputMethodSupport.java | 12 ++++++++++++ java/src/processing/mode/java/JavaInputHandler.java | 7 +++++++ 4 files changed, 33 insertions(+) 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. */