LOGE("ime_set_candidate_style() failed");
}
+static void _handle_send_processing_result(GVariant *parameters)
+{
+ scim::KeyEvent key_event;
+ uint32_t code = 0;
+ uint16_t mask = 0;
+ uint16_t layout = 0;
+ char *dev_name = NULL;
+ uint16_t dev_class = 0;
+ uint16_t dev_subclass = 0;
+ GVariantIter *key_event_iter = NULL;
+ GVariant *value = NULL;
+ gchar *key = NULL;
+ uint32_t serial = 0;
+ bool is_success;
+
+ g_variant_get(parameters, "(a{sv}&sub)", &key_event_iter, &dev_name, &serial, &is_success);
+ if (key_event_iter && dev_name) {
+ while (g_variant_iter_loop (key_event_iter, "{sv}", &key, &value)) {
+ if (g_strcmp0(key, "key_code") == 0)
+ code = g_variant_get_uint32(value);
+ else if (g_strcmp0(key, "key_mask") == 0)
+ mask = g_variant_get_uint16(value);
+ else if (g_strcmp0(key, "key_layout") == 0)
+ layout = g_variant_get_uint16(value);
+ else if (g_strcmp0(key, "key_dev_class") == 0)
+ dev_class = g_variant_get_uint16(value);
+ else if (g_strcmp0(key, "key_dev_subclass") == 0)
+ dev_subclass = g_variant_get_uint16(value);
+ }
+
+ if (key)
+ g_free(key);
+
+ if (value)
+ g_variant_unref(value);
+
+ key_event.code = code;
+ key_event.mask = mask;
+ key_event.layout = layout;
+ key_event.dev_name = std::string(dev_name);
+ key_event.dev_class = dev_class;
+ key_event.dev_subclass = dev_subclass;
+ }
+
+ int ret = ime_send_key_event_processing_result(key_event, serial, is_success);
+ if (ret != IME_ERROR_NONE)
+ LOGE("ime_send_key_event_processing_result() failed");
+}
+
static void _handle_engine_loader_cb(GDBusConnection *connection,
const gchar *sender_name,
const gchar *object_path,
_handle_contract_candidate(parameters);
} else if (g_strcmp0(signal_name, "set_candidate_style") == 0) {
_handle_set_candidate_style(parameters);
+ } else if (g_strcmp0(signal_name, "send_processing_result") == 0) {
+ _handle_send_processing_result(parameters);
}
}
LOGE("Failed to send imengine event");
}
-bool engine_loader_process_key_event(scim::KeyEvent& key, bool need_surrounding_text)
+void engine_loader_process_key_event(scim::KeyEvent& key, uint32_t serial, bool need_surrounding_text)
{
bool result = false;
GDBusMessage *reply = NULL;
GVariantBuilder *key_event_builder = NULL;
if (!dbus_info) {
- LOGW("dbus info is not allocated.");
- return false;
+ LOGE("dbus info is not allocated.");
+ return;
}
if (need_surrounding_text) {
if (text)
free(text);
-
- result = false;
}
key_event_builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
g_variant_builder_add(key_event_builder, "{sv}", "key_dev_class", g_variant_new_uint16(key.dev_class));
g_variant_builder_add(key_event_builder, "{sv}", "key_dev_subclass", g_variant_new_uint16(key.dev_subclass));
- if (_send_sync_message(dbus_info->gdbus_connection, g_variant_new("(a{sv}s)", key_event_builder, key.dev_name.c_str()), &reply, "process_key_event")) {
- reply_body = g_dbus_message_get_body(reply);
- g_variant_get(reply_body, "(b)", &result);
- }
+ if (!_send_async_message(dbus_info->gdbus_connection, g_variant_new("(a{sv}su)", key_event_builder, key.dev_name.c_str(), serial), "process_key_event"))
+ LOGE("Failed to send process key event");
g_variant_builder_unref(key_event_builder);
-
- if (reply_body)
- g_variant_unref(reply_body);
-
- return result;
}
void engine_loader_focus_in()
return ret;
}
-static bool ime_app_process_key_event_with_imengine_cb(scim::KeyEvent &key, void *user_data)
+static void ime_app_process_key_event_with_imengine_cb(scim::KeyEvent &key, uint32_t serial, void *user_data)
{
- bool ret = false;
LANGUAGE_INFO *info = _language_manager.get_language_info(_language_manager.get_current_language());
if (info && info->need_surrounding_text)
- ret = engine_loader_process_key_event(key, true);
+ engine_loader_process_key_event(key, serial, true);
else
- ret = engine_loader_process_key_event(key, false);
-
- return ret;
+ engine_loader_process_key_event(key, serial, false);
}
static void ime_app_caps_mode_changed_cb(int mode, void *user_data)