From: wonkeun oh Date: Sat, 14 Mar 2015 05:35:55 +0000 (+0900) Subject: Support the device name infomation for the KeyEvent X-Git-Tag: accepted/tizen/common/20150612.070133^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=37ba63edd01c4e37b980f6e825c9ccd89eaf6127;p=platform%2Fcore%2Fuifw%2Fisf.git Support the device name infomation for the KeyEvent Change-Id: Ia0e94b9c9404ee336bb3a56d7824570543a30b86 --- diff --git a/ism/extras/efl_immodule/isf_imf_context.cpp b/ism/extras/efl_immodule/isf_imf_context.cpp index 95e022d..07bbcc1 100644 --- a/ism/extras/efl_immodule/isf_imf_context.cpp +++ b/ism/extras/efl_immodule/isf_imf_context.cpp @@ -2117,6 +2117,9 @@ isf_imf_context_filter_event (Ecore_IMF_Context *ctx, Ecore_IMF_Event_Type type, if (type == ECORE_IMF_EVENT_KEY_DOWN) { Ecore_IMF_Event_Key_Down *ev = (Ecore_IMF_Event_Key_Down *)event; + if (ev->dev_name) { + scim_set_device_name (key, ev->dev_name); + } timestamp = ev->timestamp; /* Hardware input detect code */ @@ -2161,12 +2164,18 @@ isf_imf_context_filter_event (Ecore_IMF_Context *ctx, Ecore_IMF_Event_Type type, Ecore_IMF_Event_Key_Down *ev = (Ecore_IMF_Event_Key_Down *)event; timestamp = ev->timestamp; scim_string_to_key (key, ev->key); + if (ev->dev_name) { + scim_set_device_name (key, ev->dev_name); + } key.mask |= _ecore_imf_modifier_to_scim_mask (ev->modifiers); key.mask |= _ecore_imf_lock_to_scim_mask (ev->locks); } else if (type == ECORE_IMF_EVENT_KEY_UP) { Ecore_IMF_Event_Key_Up *ev = (Ecore_IMF_Event_Key_Up *)event; timestamp = ev->timestamp; scim_string_to_key (key, ev->key); + if (ev->dev_name) { + scim_set_device_name (key, ev->dev_name); + } key.mask = SCIM_KEY_ReleaseMask; key.mask |= _ecore_imf_modifier_to_scim_mask (ev->modifiers); key.mask |= _ecore_imf_lock_to_scim_mask (ev->locks); diff --git a/ism/src/scim_event.cpp b/ism/src/scim_event.cpp index 3eda874..077c0d5 100644 --- a/ism/src/scim_event.cpp +++ b/ism/src/scim_event.cpp @@ -392,6 +392,11 @@ scim_set_default_keyboard_layout (KeyboardLayout layout) scim_global_config_write (SCIM_GLOBAL_CONFIG_DEFAULT_KEYBOARD_LAYOUT, layout_name); } +EAPI void +scim_set_device_name (KeyEvent &key, String str) +{ + key.dev_name = str; +} } // namespace scim /* diff --git a/ism/src/scim_event.h b/ism/src/scim_event.h index 47d85e1..3762f0b 100644 --- a/ism/src/scim_event.h +++ b/ism/src/scim_event.h @@ -2079,6 +2079,12 @@ EAPI KeyboardLayout scim_get_default_keyboard_layout (); EAPI void scim_set_default_keyboard_layout (KeyboardLayout layout); /** + * @brief Set a device name of KeyEvent. + * @param key - the result KeyEvent will be stored here. + * @param str - the device name. + */ +EAPI void scim_set_device_name (KeyEvent &key, String str); +/** * @brief The class to store a keyboard event. * * A keyboard event contains a key code and a set of key masks. @@ -2093,6 +2099,7 @@ struct EAPI KeyEvent uint32 code; /**< key code */ uint16 mask; /**< modifier keys' mask */ uint16 layout; /**< keyboard layout identifier */ + String dev_name; /**< The device name of the key pressed */ /** * @brief Default constructor. @@ -2100,8 +2107,8 @@ struct EAPI KeyEvent * @param m - the key masks. * @param l - the keyboard layout */ - KeyEvent (uint32 c = 0, uint16 m = 0, uint16 l = 0) - : code (c), mask (m), layout (l) { } + KeyEvent (uint32 c = 0, uint16 m = 0, uint16 l = 0, String d = "") + : code (c), mask (m), layout (l), dev_name (d){ } /** * @brief Constructor, construct a key event from a string. @@ -2109,7 +2116,7 @@ struct EAPI KeyEvent * @param str the key string, eg. "Control+space" */ KeyEvent (const String &str) - : code (0), mask (0), layout (0) { scim_string_to_key (*this, str); } + : code (0), mask (0), layout (0) , dev_name (""){ scim_string_to_key (*this, str); } /** * @brief Check if this KeyEvent is empty. diff --git a/ism/src/scim_transaction.cpp b/ism/src/scim_transaction.cpp index 67ff9b4..8d7de5a 100644 --- a/ism/src/scim_transaction.cpp +++ b/ism/src/scim_transaction.cpp @@ -378,7 +378,7 @@ Transaction::put_data (const WideString &str) void Transaction::put_data (const KeyEvent &key) { - m_holder->request_buffer_size (1 + sizeof (uint32) + sizeof (uint16) * 2); + m_holder->request_buffer_size (1 + sizeof (uint32) + sizeof (uint16) * 2 + sizeof (uint32) + key.dev_name.length ()); m_holder->m_buffer [m_holder->m_write_pos++] = (unsigned char) SCIM_TRANS_DATA_KEYEVENT; @@ -393,6 +393,15 @@ Transaction::put_data (const KeyEvent &key) scim_uint16tobytes (m_holder->m_buffer + m_holder->m_write_pos, key.layout); m_holder->m_write_pos += sizeof (uint16); + + scim_uint32tobytes (m_holder->m_buffer + m_holder->m_write_pos, key.dev_name.length ()); + + m_holder->m_write_pos += sizeof (uint32); + + if (key.dev_name.length ()) + memcpy (m_holder->m_buffer + m_holder->m_write_pos, key.dev_name.c_str (), key.dev_name.length ()); + + m_holder->m_write_pos += key.dev_name.length (); } void @@ -947,7 +956,7 @@ TransactionReader::get_data (KeyEvent &key) m_impl->m_holder->m_write_pos > m_impl->m_read_pos && m_impl->m_holder->m_buffer [m_impl->m_read_pos] == SCIM_TRANS_DATA_KEYEVENT) { - if (m_impl->m_holder->m_write_pos < (m_impl->m_read_pos + sizeof (uint32) * 2 + 1)) + if (m_impl->m_holder->m_write_pos < (m_impl->m_read_pos + sizeof (uint32) * 2 + sizeof (uint32) + 1)) return false; m_impl->m_read_pos ++; @@ -961,6 +970,23 @@ TransactionReader::get_data (KeyEvent &key) key.layout = scim_bytestouint16 (m_impl->m_holder->m_buffer + m_impl->m_read_pos); m_impl->m_read_pos += sizeof (uint16); + size_t len; + size_t old_read_pos = m_impl->m_read_pos; + + len = scim_bytestouint32 (m_impl->m_holder->m_buffer + m_impl->m_read_pos); + m_impl->m_read_pos += sizeof (uint32); + + if (m_impl->m_holder->m_write_pos < (m_impl->m_read_pos + len)) { + m_impl->m_read_pos = old_read_pos; + return false; + } + + if (len) + key.dev_name = String (m_impl->m_holder->m_buffer + m_impl->m_read_pos, m_impl->m_holder->m_buffer + m_impl->m_read_pos + len); + else + key.dev_name = String (""); + + m_impl->m_read_pos += len; return true; } return false;