Fix bug preedit is not committed when changing keyboard mode 49/255049/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Thu, 11 Mar 2021 10:57:41 +0000 (19:57 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Thu, 11 Mar 2021 10:57:41 +0000 (19:57 +0900)
Change-Id: I0dc380da2e2f56b4604b23cf85ff2810a9e68c80
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/im_engine.h
src/unikey_instance.cpp

index 664ecb5..d1934f7 100644 (file)
@@ -65,12 +65,14 @@ public:
     ~UnikeyInstancePreedit();
 
     virtual void reset();
+    virtual void flush();
     virtual void focus_in();
     virtual void focus_out();
     virtual bool process_key_event(const KeyEvent& key);
     virtual void trigger_property(const String &property);
 
 private:
+    void flush_preedit(bool commit);
     bool unikey_process_key_event(const KeyEvent& key);
     void unikey_update_preedit_string(const WideString s, const bool visible);
     PropertyList CreatePropertyList();
index 69e3fcc..57ba634 100644 (file)
@@ -394,22 +394,34 @@ void UnikeyInstancePreedit::focus_in()
 
 void UnikeyInstancePreedit::focus_out()
 {
-    reset();
+    flush();
 }
 
-void UnikeyInstancePreedit::reset()
+void UnikeyInstancePreedit::flush_preedit(bool commit)
 {
     UnikeyInstance::reset();
 
     if (m_preeditstring.length())
     {
-        commit_string(m_preeditstring);
+        if (commit)
+            commit_string(m_preeditstring);
+
         hide_preedit_string();
         m_preeditstring.clear();
     }
     m_auto_commit = false;
 }
 
+void UnikeyInstancePreedit::reset()
+{
+    flush_preedit(false);
+}
+
+void UnikeyInstancePreedit::flush()
+{
+    flush_preedit(true);
+}
+
 void UnikeyInstancePreedit::unikey_update_preedit_string(const WideString s, const bool visible)
 {
     AttributeList attlist;