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;
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) {
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);
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);
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";
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");
}
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,
}
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
}
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 ("");
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;
}
}
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 ()) {
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;
}
//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
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);
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 */
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");
{
}
-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;
}
*
* @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.
_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;
}
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);
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 &>
{
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 ||
* 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)
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 &>
* @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);