Flush ISE's message buffer after sync message transmission completes
authorJi-hoon Lee <dalton.lee@samsung.com>
Sun, 5 Mar 2017 06:52:03 +0000 (15:52 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Mon, 6 Mar 2017 10:10:21 +0000 (19:10 +0900)
When ISE waits for sync message reply such as get_surrounding_text,
the messages received before the sync reply message are kept in
ISE's message buffer, but these will not be processed until
further messages are received after the sync reply message.
For this reason, added "Flush Buffer" command to explicitly flush
all currently pending messages.

Change-Id: Ibb57efda1ecd6ff74456dfc913d9f6ad684fef2d

ism/modules/panelagent/ecoresocket/ecore_socket_panel_agent_module.cpp
ism/src/isf_message_queue.h
ism/src/scim_trans_commands.h

index 4d02639..d7de336 100644 (file)
@@ -1050,6 +1050,11 @@ private:
         m_send_trans.put_data(text);
         m_send_trans.put_data(cursor);
         m_send_trans.write_to_socket(client_socket);
+
+        m_send_trans.clear();
+        m_send_trans.put_command(SCIM_TRANS_CMD_REPLY);
+        m_send_trans.put_command(ISM_TRANS_CMD_FLUSH_BUFFER);
+        m_send_trans.write_to_socket(client_socket);
     }
 
     void socket_remoteinput_focus_in (int client) {
@@ -1157,6 +1162,11 @@ private:
         m_send_trans.put_command(ISM_TRANS_CMD_UPDATE_SELECTION);
         m_send_trans.put_data(text);
         m_send_trans.write_to_socket(client_socket);
+
+        m_send_trans.clear();
+        m_send_trans.put_command(SCIM_TRANS_CMD_REPLY);
+        m_send_trans.put_command(ISM_TRANS_CMD_FLUSH_BUFFER);
+        m_send_trans.write_to_socket(client_socket);
     }
 
     void socket_get_keyboard_ise_list(int client, uint32 context, const String& uuid, std::vector<String>& list) {
index 4cb0c44..90411cf 100644 (file)
@@ -701,6 +701,11 @@ protected:
     uint32 m_keyboard_mode;
 };
 
+/* ISM_TRANS_CMD_FLUSH_BUFFER */
+class MessageItemFlushBuffer : public MessageItemHelper
+{
+};
+
 template <typename T>
 inline T*
 alloc_message() /* We could use memory pool in the future for performance enhancement */
@@ -1626,6 +1631,15 @@ public:
                     }
                     break;
                 }
+                case ISM_TRANS_CMD_FLUSH_BUFFER:
+                {
+                    MessageItemFlushBuffer *message = alloc_message<MessageItemFlushBuffer>();
+                    if (message) {
+                        message->get_command_ref() = cmd;
+                        m_list_messages.push_back(message);
+                    }
+                    break;
+                }
             }
         }
 
index 416028e..24fa30e 100644 (file)
@@ -708,6 +708,7 @@ const int ISM_TRANS_CMD_CANDIDATE_HIDE                    = 1257;
 const int ISM_TRANS_CMD_CHECK_OPTION_WINDOW               = 1258;
 
 const int ISM_TRANS_CMD_TURN_ON_LOG                       = 1301;
+const int ISM_TRANS_CMD_FLUSH_BUFFER                      = 1302;
 
 const int SCIM_TRANS_CMD_USER_DEFINED                     = 10000;
 /**