Add keycode in the filter_key event 62/200462/4
authorInhong Han <inhong1.han@samsung.com>
Mon, 25 Feb 2019 09:35:31 +0000 (18:35 +0900)
committerInHong Han <inhong1.han@samsung.com>
Mon, 11 Mar 2019 07:48:58 +0000 (07:48 +0000)
Change-Id: I99272cb98ceb059c43f20ad8b22849abaa940912

13 files changed:
ism/extras/wayland_immodule/wayland_imcontext.c
ism/modules/panelagent/ecoresocket/ecore_socket_panel_agent_module.cpp
ism/modules/panelagent/wayland/isf_wsc_context.h
ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp
ism/src/isf_info_manager.cpp
ism/src/isf_info_manager.h
ism/src/isf_message_queue.h
ism/src/isf_panel_agent_base.cpp
ism/src/isf_panel_agent_base.h
ism/src/isf_panel_agent_manager.cpp
ism/src/isf_panel_agent_manager.h
ism/src/scim_helper.cpp
ism/src/scim_helper.h

index 822873a..d37b8eb 100644 (file)
@@ -3296,6 +3296,7 @@ wayland_im_context_filter_event(Ecore_IMF_Context    *ctx,
         key_dev_name = (char *)key_ev->dev_name;
         key_dev_class = key_ev->dev_class;
         key_dev_subclass = key_ev->dev_subclass;
+        ecore_key_ev.keycode = key_ev->keycode;
     }
     else if (type == ECORE_IMF_EVENT_KEY_DOWN) {
         Ecore_IMF_Event_Key_Down *key_ev = (Ecore_IMF_Event_Key_Down *)imf_event;
@@ -3309,6 +3310,7 @@ wayland_im_context_filter_event(Ecore_IMF_Context    *ctx,
         key_dev_name = (char *)key_ev->dev_name;
         key_dev_class = key_ev->dev_class;
         key_dev_subclass = key_ev->dev_subclass;
+        ecore_key_ev.keycode = key_ev->keycode;
     }
 
     if (type == ECORE_IMF_EVENT_KEY_UP || type == ECORE_IMF_EVENT_KEY_DOWN) {
@@ -3357,11 +3359,11 @@ wayland_im_context_filter_event(Ecore_IMF_Context    *ctx,
             if (ecore_key_ev.modifiers & ECORE_EVENT_LOCK_NUM)
                 modifiers |= imcontext->num_mask;
 
-            SECURE_LOGD ("ev:modifiers=0x%x, modifiers=0x%x, shift_mask=0x%x, control_mask=0x%0x, alt_mask=0x%x, caps_mask=0x%x, num_mask=0x%x", ecore_key_ev.modifiers, modifiers, imcontext->shift_mask, imcontext->control_mask, imcontext->alt_mask, imcontext->caps_mask, imcontext->num_mask);
+            SECURE_LOGD ("ev:modifiers=0x%x, modifiers=0x%x, shift_mask=0x%x, control_mask=0x%0x, alt_mask=0x%x, caps_mask=0x%x, num_mask=0x%x, keycode=%u", ecore_key_ev.modifiers, modifiers, imcontext->shift_mask, imcontext->control_mask, imcontext->alt_mask, imcontext->caps_mask, imcontext->num_mask, ecore_key_ev.keycode);
             //Send key event to IME.
             wl_text_input_filter_key_event(imcontext->text_input, serial, ecore_key_ev.timestamp, ecore_key_ev.key,
                                            type == ECORE_IMF_EVENT_KEY_UP? WL_KEYBOARD_KEY_STATE_RELEASED : WL_KEYBOARD_KEY_STATE_PRESSED,
-                                           modifiers, (key_dev_name ? key_dev_name : ""), key_dev_class, key_dev_subclass);
+                                           modifiers, (key_dev_name ? key_dev_name : ""), key_dev_class, key_dev_subclass, ecore_key_ev.keycode);
             //Waiting for filter_key_event_done from IME.
             //This function should return IME filtering result with boolean type.
             Ecore_Wl2_Display *wl2_display = ecore_wl2_connected_display_get(NULL);
index c350992..0ac38db 100644 (file)
@@ -860,7 +860,7 @@ private:
         m_send_trans.write_to_socket(client_socket);
     }
 
-    bool process_key_event(int client, uint32 context, const String& uuid, KeyEvent& key, uint32 serial) {
+    bool process_key_event(int client, uint32 context, const String& uuid, KeyEvent& key, uint32 serial, uint32 keycode) {
         LOGD ("client id:%d", client);
 
         Socket client_socket(client);
@@ -874,6 +874,7 @@ private:
         trans.put_command(SCIM_TRANS_CMD_PROCESS_KEY_EVENT);
         trans.put_data(key);
         trans.put_data(serial);
+        trans.put_data(keycode);
 
         if (trans.write_to_socket(client_socket)) {
             SCIM_DEBUG_MAIN(1) << __func__ << " success\n";
@@ -2187,7 +2188,7 @@ private:
 
                         if (m_recv_trans.get_data(key)) {
                             ret      = true;
-                            m_info_manager->process_key_event(key, result);
+                            m_info_manager->process_key_event(key, result, 0);
                         } else {
                             LOGW ("wrong format of transaction");
                         }
index 1380f0b..04df1d3 100644 (file)
@@ -176,7 +176,7 @@ void isf_wsc_context_filter_key_event (WSCContextISF* wsc_ctx,
                                        uint32_t serial,
                                        uint32_t timestamp, const char *keyname,
                                        bool press, uint32_t modifiers,
-                                       const char *dev_name, uint32_t dev_class, uint32_t dev_subclass);
+                                       const char *dev_name, uint32_t dev_class, uint32_t dev_subclass, uint32_t keycode);
 #else
 void isf_wsc_context_filter_key_event (WSCContextISF* wsc_ctx,
                                        uint32_t serial,
index 6a11640..a7b03dc 100644 (file)
@@ -460,14 +460,14 @@ _wsc_im_ctx_process_input_device_event (void *data, struct wl_input_method_conte
 }
 
 static void
-_wsc_im_ctx_filter_key_event (void *data, struct wl_input_method_context *im_ctx, uint32_t serial, uint32_t time, const char *keyname, uint32_t state, uint32_t modifiers, const char *dev_name, uint32_t dev_class, uint32_t dev_subclass)
+_wsc_im_ctx_filter_key_event (void *data, struct wl_input_method_context *im_ctx, uint32_t serial, uint32_t time, const char *keyname, uint32_t state, uint32_t modifiers, const char *dev_name, uint32_t dev_class, uint32_t dev_subclass, uint32_t keycode)
 {
     WSCContextISF *wsc_ctx = (WSCContextISF*)data;
     if (!wsc_ctx) return;
 
 #if !(ENABLE_GRAB_KEYBOARD)
     isf_wsc_context_filter_key_event (wsc_ctx, serial, time, keyname,
-            ((wl_keyboard_key_state)state) == WL_KEYBOARD_KEY_STATE_PRESSED, modifiers, dev_name, dev_class, dev_subclass);
+            ((wl_keyboard_key_state)state) == WL_KEYBOARD_KEY_STATE_PRESSED, modifiers, dev_name, dev_class, dev_subclass, keycode);
 #endif
 }
 
@@ -1724,7 +1724,7 @@ isf_wsc_context_filter_key_event (WSCContextISF* wsc_ctx,
                                   uint32_t serial,
                                   uint32_t timestamp, const char *keysym,
                                   bool press, uint32_t modifiers,
-                                  const char *dev_name, uint32_t dev_class, uint32_t dev_subclass)
+                                  const char *dev_name, uint32_t dev_class, uint32_t dev_subclass, uint32_t keycode)
 {
     SCIM_DEBUG_FRONTEND (1) << __FUNCTION__ << "...\n";
     LOGD ("");
@@ -1808,7 +1808,7 @@ isf_wsc_context_filter_key_event (WSCContextISF* wsc_ctx,
     if (!ignore_key) {
         if (!_focused_ic || !_focused_ic->impl || !_focused_ic->impl->is_on) {
             LOGD ("ic is off");
-        } else if (g_info_manager->process_key_event (key, serial)){
+        } else if (g_info_manager->process_key_event (key, serial, keycode)){
             return;
         }
     }
index c2402fa..393f72a 100644 (file)
@@ -1562,7 +1562,7 @@ public:
         m_should_shared_ise = should_shared_ise;
     }
     //SCIM_TRANS_CMD_PROCESS_KEY_EVENT
-    bool process_key_event (KeyEvent& key, uint32 serial) {
+    bool process_key_event (KeyEvent& key, uint32 serial, uint32 keycode) {
         HelperClientIndex::iterator it = m_helper_client_index.find (m_current_helper_uuid);
 
         if (it != m_helper_client_index.end ()) {
@@ -1571,7 +1571,7 @@ public:
             uint32 ctx;
             get_focused_context (client, context);
             ctx = get_helper_ic (client, context);
-            return m_panel_agent_manager.process_key_event (it->second.id, ctx, m_current_helper_uuid, key, serial);
+            return m_panel_agent_manager.process_key_event (it->second.id, ctx, m_current_helper_uuid, key, serial, keycode);
         }
 
         return false;
@@ -4722,9 +4722,9 @@ void InfoManager::prelaunch_helper_ise (void)
 }
 
 //SCIM_TRANS_CMD_PROCESS_KEY_EVENT
-bool InfoManager::process_key_event (KeyEvent& key, uint32 serial)
+bool InfoManager::process_key_event (KeyEvent& key, uint32 serial, uint32 keycode)
 {
-    return m_impl->process_key_event (key, serial);
+    return m_impl->process_key_event (key, serial, keycode);
 }
 
 //ISM_TRANS_CMD_GET_ACTIVE_ISE_GEOMETRY
index 2a83785..88751fa 100644 (file)
@@ -622,7 +622,7 @@ public:
     void prelaunch_helper_ise (void);
 
     //SCIM_TRANS_CMD_PROCESS_KEY_EVENT
-    bool process_key_event (KeyEvent& key, uint32 serial);
+    bool process_key_event (KeyEvent& key, uint32 serial, uint32 keycode);
 
     //ISM_TRANS_CMD_GET_ACTIVE_ISE_GEOMETRY
     void get_input_panel_geometry (int client_id, _OUT_ struct rectinfo& info);
index 0619d2e..15e6d92 100644 (file)
@@ -317,14 +317,16 @@ protected:
 class MessageItemProcessKeyEvent : public MessageItemHelper
 {
 public:
-    MessageItemProcessKeyEvent() : m_serial(0) {}
+    MessageItemProcessKeyEvent() : m_serial(0), m_keycode(0) {}
     virtual ~MessageItemProcessKeyEvent() {}
 
     KeyEvent& get_key_ref() { return m_key; }
     uint32& get_serial_ref() { return m_serial; }
+    uint32& get_keycode_ref() { return m_keycode; }
 protected:
     KeyEvent m_key;
     uint32 m_serial;
+    uint32 m_keycode;
 };
 
 /* ISM_TRANS_CMD_SET_LAYOUT */
@@ -1199,7 +1201,8 @@ public:
                     if (message) {
                         message->get_command_ref() = cmd;
                         if (transaction.get_data(message->get_key_ref()) &&
-                            transaction.get_data(message->get_serial_ref())) {
+                            transaction.get_data(message->get_serial_ref()) &&
+                            transaction.get_data(message->get_keycode_ref())) {
                             m_list_messages.push_back(message);
                         } else {
                             LOGW("wrong format of transaction");
index c50e338..549a373 100644 (file)
@@ -283,7 +283,7 @@ void PanelAgentBase::set_helper_optimization_hint(int client, uint32 context, co
 {
 }
 
-bool PanelAgentBase::process_key_event (int client, uint32 context, const String& uuid, KeyEvent& key, uint32 serial)
+bool PanelAgentBase::process_key_event (int client, uint32 context, const String& uuid, KeyEvent& key, uint32 serial, uint32 keycode)
 {
     return false;
 }
index b83cabd..9ce3c0b 100644 (file)
@@ -536,7 +536,7 @@ public:
      *
      * @return none.
      */
-    virtual bool process_key_event (int client, uint32 context, const String& uuid, KeyEvent& key, uint32 serial);
+    virtual bool process_key_event (int client, uint32 context, const String& uuid, KeyEvent& key, uint32 serial, uint32 keycode);
 
     /**
      * @brief get_helper_geometry.
index 3e7fbf9..29a16f2 100644 (file)
@@ -546,12 +546,12 @@ void PanelAgentManager::set_helper_optimization_hint(int id, uint32 context_id,
         _p->set_helper_optimization_hint(id, context_id, uuid, hint);
 }
 
-bool PanelAgentManager::process_key_event (int id, uint32 context_id, const String& uuid, KeyEvent& key, uint32 serial)
+bool PanelAgentManager::process_key_event (int id, uint32 context_id, const String& uuid, KeyEvent& key, uint32 serial, uint32 keycode)
 {
     PanelAgentPointer _p = m_impl->get_panel_agent_by_id (id);
 
     if (!_p.null ())
-        return _p->process_key_event (id, context_id, uuid, key, serial);
+        return _p->process_key_event (id, context_id, uuid, key, serial, keycode);
     return false;
 }
 
index 2bf5d14..eef2830 100644 (file)
@@ -313,7 +313,7 @@ public:
     void set_helper_optimization_hint (int id, uint32 context_id, const String& uuid, uint32 hint);
     void set_helper_mime_type (int client, uint32 context, const String& uuid, String& mime_type);
     void finalize_content_helper (int client, uint32 context, const String& uuid, String& text, uint32& cursor_pos);
-    bool process_key_event (int client, uint32 context, const String& uuid, KeyEvent& key, uint32 serial);
+    bool process_key_event (int client, uint32 context, const String& uuid, KeyEvent& key, uint32 serial, uint32 keycode);
     bool get_helper_geometry (int client, uint32 context, String& uuid, _OUT_ struct rectinfo& info);
     void get_helper_imdata (int client, uint32 context, String& uuid, _OUT_ char** imdata, _OUT_ size_t& len);
     void get_helper_layout (int client, uint32 context, String& uuid, uint32& layout);
index 673ea9c..6b45b65 100644 (file)
@@ -130,7 +130,7 @@ typedef Signal2<void, const HelperAgent *, const std::vector<uint32> &>
 typedef Signal2<void, const HelperAgent *, LookupTable &>
         HelperAgentSignalLookupTable;
 
-typedef Signal3<void, const HelperAgent *, KeyEvent &, uint32 &>
+typedef Signal4<void, const HelperAgent *, KeyEvent &, uint32 &, uint32>
         HelperAgentSignalKeyEventUint;
 
 typedef Signal5<void, const HelperAgent *, uint32 &, char *, size_t &, uint32 &>
@@ -1159,7 +1159,7 @@ HelperAgent::handle_message (MessageItem *message)
         {
             MessageItemProcessKeyEvent *subclass = static_cast<MessageItemProcessKeyEvent*>(message);
             uint32 ret = 0;
-            m_impl->signal_process_key_event(this, subclass->get_key_ref(), ret);
+            m_impl->signal_process_key_event(this, subclass->get_key_ref(), ret, subclass->get_keycode_ref());
             if (ret == 0) {
                 if (!m_impl->si.null ()) {
                     if (!(subclass->get_key_ref().get_key_string().compare("KeyRelease+XF86Back") == 0 ||
@@ -3051,7 +3051,7 @@ HelperAgent::signal_connect_set_return_key_disable (HelperAgentSlotUintVoid *slo
  * This signal is used to send keyboard key event to Helper ISE.
  *
  * The prototype of the slot is:
- * void process_key_event (const HelperAgent *agent, KeyEvent &key, uint32 &ret);
+ * void process_key_event (const HelperAgent *agent, KeyEvent &key, uint32 &ret, uint32 keycode);
  */
 Connection
 HelperAgent::signal_connect_process_key_event (HelperAgentSlotKeyEventUint *slot)
index cb42967..24bb9a0 100644 (file)
@@ -210,7 +210,7 @@ typedef Slot2<void, const HelperAgent *, const std::vector<uint32> &>
 
 typedef Slot2<void, const HelperAgent *, LookupTable &>
         HelperAgentSlotLookupTable;
-typedef Slot3<void, const HelperAgent *, KeyEvent &, uint32 &>
+typedef Slot4<void, const HelperAgent *, KeyEvent &, uint32 &, uint32>
         HelperAgentSlotKeyEventUint;
 
 typedef Slot5<void, const HelperAgent *, uint32 &, char *, size_t &, uint32 &>
@@ -1307,7 +1307,7 @@ public:
      * @brief Connect a slot to Helper process key event signal.
      *
      * The prototype of the slot is:
-     * void process_key_event (const HelperAgent *, KeyEvent &key, uint32 &ret);
+     * void process_key_event (const HelperAgent *, KeyEvent &key, uint32 &ret, uint32 keycode);
      */
     Connection signal_connect_process_key_event (HelperAgentSlotKeyEventUint *slot);