void engine_loader_flush_imengine();
void engine_loader_reset_imengine();
void engine_loader_send_imengine_event(int command, uint32_t value);
-bool engine_loader_process_key_event(scim::KeyEvent& key);
+bool engine_loader_process_key_event(scim::KeyEvent& key, bool need_surrounding_text);
void engine_loader_focus_in();
void engine_loader_focus_out();
void engine_loader_update_cursor_position(int cursor_pos);
is_latin_language = false;
accepts_caps_mode = false;
load_in_ime = false;
+ need_surrounding_text = false;
}
/* Indicates whether this language was enabled in option window's language selection list */
sclboolean enabled;
/* If this language accepts caps mode, try to handle AutoCapitalization option */
sclboolean accepts_caps_mode;
sclboolean load_in_ime;
+ sclboolean need_surrounding_text;
} LANGUAGE_INFO;
LOGE("Failed to send imengine event");
}
-bool engine_loader_process_key_event(scim::KeyEvent& key)
+bool engine_loader_process_key_event(scim::KeyEvent& key, bool need_surrounding_text)
{
bool result = false;
GDBusMessage *reply = NULL;
return false;
}
+ if (need_surrounding_text) {
+ char *text = NULL;
+ int cursor;
+
+ ime_get_surrounding_text(-1, -1, &text, &cursor);
+ SECURE_LOGD("surrounding text : %s\n", text);
+
+ if (_send_sync_message(dbus_info->gdbus_connection, g_variant_new("(si)", text, cursor), &reply, "set_surrounding_text")) {
+ reply_body = g_dbus_message_get_body(reply);
+ g_variant_get(reply_body, "(b)", &result);
+ }
+
+ if (!result)
+ LOGE("Failed to set surrounding_text");
+
+ if (reply_body) {
+ g_variant_unref(reply_body);
+ reply_body = NULL;
+ }
+
+ 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_code", g_variant_new_uint32(key.code));
g_variant_builder_add(key_event_builder, "{sv}", "key_mask", g_variant_new_uint16(key.mask));
static bool ime_app_process_key_event_with_imengine_cb(scim::KeyEvent &key, void *user_data)
{
bool ret = false;
- ret = engine_loader_process_key_event(key);
+ 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);
+ else
+ ret = engine_loader_process_key_event(key, false);
return ret;
}
m_table[m_size].is_latin_language = get_prop_bool(cur_node, "is_latin_language");
m_table[m_size].accepts_caps_mode = get_prop_bool(cur_node, "accepts_caps_mode");
m_table[m_size].load_in_ime = get_prop_bool(cur_node, "load_in_ime");
+ m_table[m_size].need_surrounding_text = get_prop_bool(cur_node, "need_surrounding_text");
m_size++;
}
is_latin_language = false;
accepts_caps_mode = false;
load_in_ime = false;
+ need_surrounding_text = false;
}
/* This is the string ID of this language, used in ISE side. For example, ISE developer can use this string to select this language, by passing "Korean" to ISELanguageManager::select_language() function */
char *language;
/* If this language accepts caps mode, try to handle AutoCapitalization option */
bool accepts_caps_mode;
bool load_in_ime;
+ bool need_surrounding_text;
} ISE_LANG_TABLE;
typedef struct Keyboard_UUID {
language.is_latin_language = table[loop].is_latin_language;
language.accepts_caps_mode = table[loop].accepts_caps_mode;
language.load_in_ime = table[loop].load_in_ime;
+ language.need_surrounding_text = table[loop].need_surrounding_text;
/* These variable should be read from stored setting values */
language.enabled = FALSE;