2 * Copyright (c) 2014 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "sclconnection-isf.h"
19 #include "sclcoreimpl.h"
20 #include <Elementary.h>
24 #include "legacy_support/websocket.h"
25 extern CWebHelperAgentWebSocket g_websocket;
30 static scim::ConfigPointer _scim_config(0);
32 /* Slot functions for calling appropriate callback functions */
33 static void slot_exit(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid) {
34 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
36 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
38 callback->on_ise_hide(ic, ic_uuid.c_str());
43 agent->update_ise_exit();
50 static void slot_attach_input_context(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid) {
51 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
53 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
55 callback->on_attach_input_context(ic, ic_uuid.c_str());
60 static void slot_detach_input_context(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid) {
61 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
63 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
65 callback->on_detach_input_context(ic, ic_uuid.c_str());
70 static void slot_reload_config(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid) {
71 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
73 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
75 callback->on_reload_config(ic, ic_uuid.c_str());
80 static void slot_update_screen(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid, int screen_number) {
81 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
83 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
85 //callback->on_update_screen(ic, ic_uuid.c_str(), screen_number);
90 static void slot_update_spot_location(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid, int x, int y) {
91 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
93 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
95 callback->on_update_spot_location(ic, ic_uuid.c_str(), x, y);
100 static void slot_update_cursor_position(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid, int cursor_pos) {
101 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
103 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
105 callback->on_update_cursor_position(ic, ic_uuid.c_str(), cursor_pos);
110 static void slot_update_surrounding_text(const scim::HelperAgent *agent, int ic, const scim::String &text, int cursor) {
111 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
113 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
115 callback->on_update_surrounding_text(ic, text.c_str(), cursor);
120 static void slot_trigger_property(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid, const scim::String &property) {
121 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
123 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
125 //callback->on_trigger_property(ic, ic_uuid.c_str(), property.c_str());
130 static void slot_focus_out(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid) {
131 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
133 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
135 callback->on_focus_out(ic, ic_uuid.c_str());
140 static void slot_focus_in(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid) {
141 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
143 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
145 callback->on_focus_in(ic, ic_uuid.c_str());
150 static void slot_ise_show(const scim::HelperAgent *agent, int ic, char *buf, size_t &len) {
151 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
153 /* Make sure the appropriate keyboard ise was selected -> is this really necessary? */
154 //impl->set_keyboard_ise_by_uuid(impl->get_keyboard_ise_uuid().c_str());
156 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
158 /* Check if effect is enabled */
159 Ise_Context ise_context;
160 memset(&ise_context, 0x00, sizeof(ise_context));
162 if (len >= sizeof(Ise_Context)) {
163 memcpy(&ise_context, buf, sizeof(ise_context));
165 if (ise_context.imdata_size > 0) {
166 char imdata[1024] = {0};
167 memcpy((void *)imdata, buf + sizeof(ise_context), ise_context.imdata_size);
168 callback->on_set_imdata(imdata, ise_context.imdata_size);
171 if (len >= (sizeof(Ise_Context) + ise_context.imdata_size))
172 callback->on_set_mime_type(buf + sizeof(ise_context) + ise_context.imdata_size);
174 LOGD("\n-=-= WARNING - buf %p len %d size %d \n", buf, len, sizeof(ise_context));
176 CSCLCoreUI* ui = impl->get_core_ui();
178 ui->process_keyboard_ui_state_change(KEYBOARD_UI_STATE_WILL_SHOW);
180 callback->on_ise_show(ic, impl->get_screen_rotation_degree(), ise_context);
182 ui->process_keyboard_ui_state_change(KEYBOARD_UI_STATE_DID_SHOW);
186 g_websocket.on_show(ic);
192 static void slot_ise_hide(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid) {
193 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
195 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
197 CSCLCoreUI* ui = impl->get_core_ui();
199 ui->process_keyboard_ui_state_change(KEYBOARD_UI_STATE_WILL_HIDE);
201 callback->on_ise_hide(ic, ic_uuid.c_str());
203 ui->process_keyboard_ui_state_change(KEYBOARD_UI_STATE_DID_HIDE);
207 g_websocket.on_hide(ic);
213 static void slot_get_geometry(const scim::HelperAgent *agent, struct scim::rectinfo &info) {
214 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
216 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
218 callback->on_get_geometry(&(info.pos_x), &(info.pos_y), &(info.width), &(info.height));
223 static void slot_set_mode(const scim::HelperAgent *agent, scim::uint32 &mode) {
224 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
226 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
228 callback->on_set_mode(mode);
233 static void slot_set_language(const scim::HelperAgent *agent, scim::uint32 &language) {
234 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
236 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
238 callback->on_set_language(language);
243 static void slot_set_imdata(const scim::HelperAgent *agent, char *buf, size_t &len) {
244 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
246 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
248 scl32 _len = static_cast<scl32>(reinterpret_cast<size_t>(len) & 0xffffffff);
249 callback->on_set_imdata(buf, _len);
254 static void slot_get_imdata(const scim::HelperAgent *, char **buf, size_t &len) {
255 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
257 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
260 callback->on_get_imdata(buf, &_len);
266 static void slot_get_language_locale(const scim::HelperAgent *, int ic, char **locale) {
267 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
269 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
271 callback->on_get_language_locale(ic, locale);
276 static void slot_set_return_key_type(const scim::HelperAgent *agent, scim::uint32 &type) {
277 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
279 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
281 callback->on_set_return_key_type(type);
286 static void slot_get_return_key_type(const scim::HelperAgent *agent, scim::uint32 &type) {
287 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
289 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
291 callback->on_get_return_key_type(&type);
296 static void slot_set_return_key_disable(const scim::HelperAgent *agent, scim::uint32 &disabled) {
297 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
299 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
301 callback->on_set_return_key_disable(disabled);
306 static void slot_get_return_key_disable(const scim::HelperAgent *agent, scim::uint32 &disabled) {
307 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
309 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
311 callback->on_get_return_key_disable(&disabled);
316 static void slot_set_layout(const scim::HelperAgent *agent, scim::uint32 &layout) {
317 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
319 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
321 callback->on_set_layout(layout);
326 static void slot_get_layout(const scim::HelperAgent *agent, scim::uint32 &layout) {
327 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
329 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
331 callback->on_get_layout(&layout);
336 static void slot_set_caps_mode(const scim::HelperAgent *agent, scim::uint32 &mode) {
337 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
339 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
341 callback->on_set_caps_mode(mode);
346 static void slot_reset_input_context(const scim::HelperAgent *agent, int ic, const scim::String &uuid) {
347 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
349 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
351 callback->on_reset_input_context(ic, uuid.c_str());
356 static void slot_update_candidate_geometry(const scim::HelperAgent *agent, int ic, const scim::String &uuid, const scim::rectinfo &info) {
357 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
359 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
361 callback->on_update_candidate_geometry(ic, uuid.c_str(), info.pos_x, info.pos_y, info.width, info.height);
365 static void slot_update_keyboard_ise(const scim::HelperAgent *agent, int ic, const scim::String &uuid,
366 const scim::String &ise_name, const scim::String &ise_uuid) {
367 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
369 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
371 callback->on_update_keyboard_ise(ic, uuid.c_str(), ise_name.c_str(), ise_uuid.c_str());
376 static void slot_candidate_more_window_show(const scim::HelperAgent *agent, int ic, const scim::String &uuid) {
377 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
379 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
381 callback->on_candidate_more_window_show(ic, uuid.c_str());
386 static void slot_candidate_more_window_hide(const scim::HelperAgent *agent, int ic, const scim::String &uuid) {
387 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
389 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
391 callback->on_candidate_more_window_hide(ic, uuid.c_str());
396 static void slot_select_aux(const scim::HelperAgent *agent, int ic, const scim::String &uuid, int index) {
397 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
399 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
401 callback->on_select_aux(ic, uuid.c_str(), index);
406 static void slot_select_candidate(const scim::HelperAgent *agent, int ic, const scim::String &uuid, int index) {
407 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
409 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
411 callback->on_select_candidate(ic, uuid.c_str(), index);
416 static void slot_candidate_table_page_up(const scim::HelperAgent *agent, int ic, const scim::String &uuid) {
417 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
419 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
421 callback->on_candidate_table_page_up(ic, uuid.c_str());
426 static void slot_candidate_table_page_down(const scim::HelperAgent *agent, int ic, const scim::String &uuid) {
427 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
429 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
431 callback->on_candidate_table_page_down(ic, uuid.c_str());
436 static void slot_update_candidate_table_page_size(const scim::HelperAgent *, int ic, const scim::String &uuid, int page_size) {
437 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
439 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
441 callback->on_update_candidate_table_page_size(ic, uuid.c_str(), page_size);
446 static void slot_update_lookup_table(const scim::HelperAgent *, scim::LookupTable &table) {
447 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
449 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
451 SclCandidateTable lookup_table;
452 lookup_table.page_size = table.get_page_size();
453 lookup_table.current_page_start = table.get_current_page_start();
454 lookup_table.cursor_pos = table.get_cursor_pos();
455 lookup_table.cursor_visible = table.is_cursor_visible();
456 lookup_table.page_size_fixed = table.is_page_size_fixed();
457 lookup_table.candidate_labels.clear();
458 for (int page_index = 0;page_index < lookup_table.page_size;page_index++) {
459 scim::WideString label = table.get_candidate_label(page_index);
460 lookup_table.candidate_labels.push_back(scim::utf8_wcstombs(label).c_str());
463 int nCandidateSize = table.get_current_page_size();
464 for (int index = 0; index < nCandidateSize; ++index) {
465 scim::WideString candidate_str = table.get_candidate_in_current_page(index);
466 lookup_table.candidate.push_back(scim::utf8_wcstombs(candidate_str).c_str());
469 callback->on_update_lookup_table(lookup_table);
471 std::vector<scim::WideString> labels;
472 for (unsigned int loop = 0;loop < lookup_table.candidate_labels.size();loop++) {
473 labels.push_back(scim::utf8_mbstowcs(lookup_table.candidate_labels.at(loop).c_str()));
475 table.set_candidate_labels(labels);
480 static void slot_select_associate(const scim::HelperAgent *agent, int ic, const scim::String &uuid, int index) {
481 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
483 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
485 callback->on_select_associate(ic, uuid.c_str(), index);
490 static void slot_associate_table_page_up(const scim::HelperAgent *agent, int ic, const scim::String &uuid) {
491 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
493 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
495 callback->on_associate_table_page_up(ic, uuid.c_str());
500 static void slot_associate_table_page_down(const scim::HelperAgent *agent, int ic, const scim::String &uuid) {
501 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
503 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
505 callback->on_associate_table_page_down(ic, uuid.c_str());
510 static void slot_update_associate_table_page_size(const scim::HelperAgent *, int ic, const scim::String &uuid, int page_size) {
511 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
513 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
515 callback->on_update_associate_table_page_size(ic, uuid.c_str(), page_size);
520 static void slot_show_ise_option_window(const scim::HelperAgent *agent, int ic, const scim::String &uuid) {
521 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
523 CSCLCoreUI *core_ui = impl->get_core_ui();
525 LOGD("slot_show_ise_option_window() called!!!\n");
526 core_ui->create_option_window(OPTION_WINDOW_TYPE_SETTING_APPLICATION);
531 static void slot_resume_ise_option_window(const scim::HelperAgent *agent, int ic, const scim::String &uuid) {
532 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
534 CSCLCoreUI *core_ui = impl->get_core_ui();
536 LOGD("slot_resume_ise_option_window() called!!!\n");
537 core_ui->show_option_window(OPTION_WINDOW_TYPE_SETTING_APPLICATION);
542 static void slot_check_ise_option_window(const scim::HelperAgent *agent, sclu32 &avail) {
543 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
545 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
547 callback->on_check_option_window_availability(reinterpret_cast<sclboolean *>(&avail));
552 static void slot_process_key_event(const scim::HelperAgent *agent, scim::KeyEvent &key, scim::uint32 &ret) {
553 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
555 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
557 callback->on_process_key_event(key, &ret);
562 static void slot_candidate_show(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid) {
563 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
565 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
567 callback->on_candidate_show(ic, ic_uuid.c_str());
572 static void slot_candidate_hide(const scim::HelperAgent *agent, int ic, const scim::String &ic_uuid) {
573 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
575 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
577 callback->on_candidate_hide(ic, ic_uuid.c_str());
582 static void slot_process_input_device_event(const scim::HelperAgent *agent, scim::uint32 &type, char *data, size_t &len, scim::uint32 &ret) {
583 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
585 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
587 /* Input Device Event callback is available in versions after 1.1 */
588 if (check_interface_version(callback, 1, 1)) {
589 callback->on_process_input_device_event(type, data, len, &ret);
595 static void slot_set_prediction_hint(const scim::HelperAgent *agent, const scim::String &prediction_hint) {
596 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
598 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
600 callback->on_set_prediction_hint(prediction_hint.c_str());
605 static void slot_set_mime_type(const scim::HelperAgent *agent, const scim::String &mime_type) {
606 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
608 ISCLCoreEventCallback *callback = impl->get_core_event_callback();
610 callback->on_set_mime_type(mime_type.c_str());
615 /* Internal input handler function */
616 Eina_Bool input_handler(void *data, Ecore_Fd_Handler *fd_handler)
618 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
620 scim::HelperAgent *agent = static_cast<scim::HelperAgent*>(data);
622 if (agent->has_pending_event()) {
623 if (!(agent->filter_event())) {
624 LOGD("helper_agent.filter_event() failed!!!\n");
629 LOGD("helper_agent.has_pending_event() failed!!!\n");
636 return ECORE_CALLBACK_RENEW;
639 CSCLConnectionISF::CSCLConnectionISF()
641 m_initialized = FALSE;
644 m_backend_identifier = "ISF";
647 CSCLConnectionISF::~CSCLConnectionISF()
651 sclboolean CSCLConnectionISF::init()
655 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
657 sclchar *uuid = impl->get_uuid();
659 m_helper_info.uuid = uuid;
663 if (!m_initialized) {
664 m_helper_agent.signal_connect_exit(scim::slot(slot_exit));
665 m_helper_agent.signal_connect_attach_input_context(scim::slot(slot_attach_input_context));
666 m_helper_agent.signal_connect_detach_input_context(scim::slot(slot_detach_input_context));
667 m_helper_agent.signal_connect_reload_config(scim::slot(slot_reload_config));
668 m_helper_agent.signal_connect_update_screen(scim::slot(slot_update_screen));
669 m_helper_agent.signal_connect_update_spot_location(scim::slot(slot_update_spot_location));
670 m_helper_agent.signal_connect_update_cursor_position(scim::slot(slot_update_cursor_position));
671 m_helper_agent.signal_connect_update_surrounding_text(scim::slot(slot_update_surrounding_text));
672 m_helper_agent.signal_connect_trigger_property(scim::slot(slot_trigger_property));
673 //m_helper_agent.signal_connect_process_imengine_event (slot (slot_process_imengine_event));
674 m_helper_agent.signal_connect_focus_out(scim::slot(slot_focus_out));
675 m_helper_agent.signal_connect_focus_in(scim::slot(slot_focus_in));
676 m_helper_agent.signal_connect_ise_show(scim::slot(slot_ise_show));
677 m_helper_agent.signal_connect_ise_hide(scim::slot(slot_ise_hide));
678 m_helper_agent.signal_connect_get_geometry(scim::slot(slot_get_geometry));
679 m_helper_agent.signal_connect_set_mode(scim::slot(slot_set_mode));
680 m_helper_agent.signal_connect_set_language(scim::slot(slot_set_language));
681 m_helper_agent.signal_connect_set_imdata(scim::slot(slot_set_imdata));
682 m_helper_agent.signal_connect_get_imdata(scim::slot(slot_get_imdata));
683 m_helper_agent.signal_connect_get_language_locale(scim::slot(slot_get_language_locale));
684 m_helper_agent.signal_connect_set_return_key_type(scim::slot(slot_set_return_key_type));
685 m_helper_agent.signal_connect_get_return_key_type(scim::slot(slot_get_return_key_type));
686 m_helper_agent.signal_connect_set_return_key_disable(scim::slot(slot_set_return_key_disable));
687 m_helper_agent.signal_connect_get_return_key_disable(scim::slot(slot_get_return_key_disable));
688 m_helper_agent.signal_connect_get_layout(scim::slot(slot_get_layout));
689 m_helper_agent.signal_connect_set_layout(scim::slot(slot_set_layout));
690 m_helper_agent.signal_connect_set_caps_mode(scim::slot(slot_set_caps_mode));
691 m_helper_agent.signal_connect_reset_input_context(scim::slot(slot_reset_input_context));
692 m_helper_agent.signal_connect_update_candidate_geometry(scim::slot(slot_update_candidate_geometry));
693 m_helper_agent.signal_connect_update_keyboard_ise(scim::slot(slot_update_keyboard_ise));
694 //m_helper_agent.signal_connect_update_keyboard_ise_list (slot (slot_update_keyboard_ise_list));
695 m_helper_agent.signal_connect_candidate_more_window_show(scim::slot(slot_candidate_more_window_show));
696 m_helper_agent.signal_connect_candidate_more_window_hide(scim::slot(slot_candidate_more_window_hide));
697 m_helper_agent.signal_connect_select_aux(scim::slot(slot_select_aux));
698 m_helper_agent.signal_connect_select_candidate(scim::slot(slot_select_candidate));
699 m_helper_agent.signal_connect_candidate_table_page_up(scim::slot(slot_candidate_table_page_up));
700 m_helper_agent.signal_connect_candidate_table_page_down(scim::slot(slot_candidate_table_page_down));
701 m_helper_agent.signal_connect_update_candidate_table_page_size(scim::slot(slot_update_candidate_table_page_size));
702 m_helper_agent.signal_connect_update_lookup_table(scim::slot(slot_update_lookup_table));
703 m_helper_agent.signal_connect_select_associate(scim::slot(slot_select_associate));
704 m_helper_agent.signal_connect_associate_table_page_up(scim::slot(slot_associate_table_page_up));
705 m_helper_agent.signal_connect_associate_table_page_down(scim::slot(slot_associate_table_page_down));
706 m_helper_agent.signal_connect_update_associate_table_page_size(scim::slot(slot_update_associate_table_page_size));
707 m_helper_agent.signal_connect_show_option_window(scim::slot(slot_show_ise_option_window));
708 m_helper_agent.signal_connect_resume_option_window(scim::slot(slot_resume_ise_option_window));
709 m_helper_agent.signal_connect_check_option_window(scim::slot(slot_check_ise_option_window));
710 m_helper_agent.signal_connect_process_key_event(scim::slot(slot_process_key_event));
711 m_helper_agent.signal_connect_candidate_show(scim::slot(slot_candidate_show));
712 m_helper_agent.signal_connect_candidate_hide(scim::slot(slot_candidate_hide));
713 m_helper_agent.signal_connect_process_input_device_event(scim::slot(slot_process_input_device_event));
714 m_helper_agent.signal_connect_set_prediction_hint(scim::slot(slot_set_prediction_hint));
715 m_helper_agent.signal_connect_set_mime_type(scim::slot(slot_set_mime_type));
717 m_initialized = TRUE;
720 if (_scim_config.null()) {
721 scim::ConfigPointer config_pointer = scim::ConfigBase::get(true, "socket");
722 if (config_pointer.null()) {
723 config_pointer = new scim::DummyConfig();
725 _scim_config = config_pointer;
731 void CSCLConnectionISF::fini()
733 if (!_scim_config.null()) {
734 _scim_config.reset();
736 scim::ConfigBase::set(0);
738 m_initialized = FALSE;
741 void CSCLConnectionISF::open_connection(const sclchar *display)
744 m_helper_agent.open_connection(m_helper_info, display);
745 int fd = m_helper_agent.get_connection_number();
749 Evas_Object *main_window = NULL;
750 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
752 main_window = NATIVE_WINDOW_CAST(impl->get_main_window());
755 Ecore_X_Window xwindow = elm_win_xwindow_get(main_window);
757 snprintf(xid, 255, "%d", xwindow);
758 scim::Property prop(xid, "XID", "", "");
759 scim::PropertyList props;
760 props.push_back(prop);
761 m_helper_agent.register_properties(props);
764 m_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, input_handler, &m_helper_agent, NULL, NULL);
768 void CSCLConnectionISF::close_connection()
772 ecore_main_fd_handler_del(m_fd_handler);
775 m_helper_agent.update_ise_exit();
776 m_helper_agent.close_connection();
780 void CSCLConnectionISF::config_reload()
783 m_helper_agent.reload_config();
787 sclboolean CSCLConnectionISF::config_read_int(const sclchar *name, sclint &value)
789 sclboolean ret = FALSE;
790 if (m_initialized && _scim_config) {
791 value = _scim_config->read(name, value);
797 sclboolean CSCLConnectionISF::config_read_string(const sclchar *name, std::string &value)
799 sclboolean ret = FALSE;
800 if (m_initialized && _scim_config) {
801 value = _scim_config->read(name, value);
807 sclboolean CSCLConnectionISF::config_write_int(const sclchar *name, sclint value)
809 sclboolean ret = FALSE;
810 if (m_initialized && _scim_config) {
811 _scim_config->write(name, value);
817 sclboolean CSCLConnectionISF::config_write_string(const sclchar *name, const std::string value)
819 sclboolean ret = FALSE;
820 if (m_initialized && _scim_config) {
821 _scim_config->write(name, value);
827 sclboolean CSCLConnectionISF::config_erase(const sclchar *name)
829 sclboolean ret = FALSE;
830 if (m_initialized && _scim_config) {
831 _scim_config->erase(name);
837 sclboolean CSCLConnectionISF::config_flush(void)
839 sclboolean ret = FALSE;
840 if (m_initialized && _scim_config) {
841 _scim_config->flush();
847 void CSCLConnectionISF::send_imengine_event(sclint ic, const sclchar *ic_uuid, const sclint command, const sclu32 value)
852 uuid = scim::String(ic_uuid);
854 scim::Transaction trans;
855 trans.put_command(command);
856 trans.put_data(value);
857 m_helper_agent.send_imengine_event(ic, uuid, trans);
861 void CSCLConnectionISF::reset_keyboard_ise()
864 m_helper_agent.reset_keyboard_ise();
868 void CSCLConnectionISF::flush_keyboard_ise()
871 m_helper_agent.flush_keyboard_ise();
875 void CSCLConnectionISF::send_key_event(sclint ic, const sclchar *ic_uuid, sclu32 keycode, sclu16 keymask)
880 uuid = scim::String(ic_uuid);
882 scim::KeyEvent event;
883 event.code = keycode;
884 event.mask = keymask;
885 m_helper_agent.send_key_event(ic, uuid, event);
889 void CSCLConnectionISF::forward_key_event(sclint ic, const sclchar *ic_uuid, sclu32 keycode, sclu16 keymask)
894 uuid = scim::String(ic_uuid);
896 scim::KeyEvent event;
897 event.code = keycode;
898 event.mask = keymask;
899 m_helper_agent.forward_key_event(ic, uuid, event);
903 void CSCLConnectionISF::commit_string(sclint ic, const sclchar *ic_uuid, const sclchar *str)
908 uuid = scim::String(ic_uuid);
910 m_helper_agent.commit_string(ic, uuid, scim::utf8_mbstowcs(str));
914 void CSCLConnectionISF::select_candidate(int index)
917 m_helper_agent.select_candidate(index);
921 void CSCLConnectionISF::show_preedit_string(sclint ic, const sclchar *ic_uuid)
926 uuid = scim::String(ic_uuid);
928 m_helper_agent.show_preedit_string(ic, uuid);
932 void CSCLConnectionISF::show_aux_string(void)
935 m_helper_agent.show_aux_string();
939 void CSCLConnectionISF::show_candidate_string(void)
942 m_helper_agent.show_candidate_string();
946 void CSCLConnectionISF::show_associate_string(void)
949 m_helper_agent.show_associate_string();
953 void CSCLConnectionISF::hide_preedit_string(sclint ic, const sclchar *ic_uuid)
958 uuid = scim::String(ic_uuid);
960 m_helper_agent.hide_preedit_string(ic, uuid);
964 void CSCLConnectionISF::hide_aux_string(void)
967 m_helper_agent.hide_aux_string();
971 void CSCLConnectionISF::hide_candidate_string(void)
974 m_helper_agent.hide_candidate_string();
978 void CSCLConnectionISF::hide_associate_string(void)
981 m_helper_agent.hide_associate_string();
985 void CSCLConnectionISF::update_preedit_string(sclint ic, const sclchar *ic_uuid, const sclchar *str)
988 scim::AttributeList list;
991 uuid = scim::String(ic_uuid);
993 m_helper_agent.update_preedit_string(ic, uuid, scim::utf8_mbstowcs(str), list);
995 if (str && strlen(str) > 0) {
996 show_preedit_string(ic, ic_uuid);
998 hide_preedit_string(ic, ic_uuid);
1003 void CSCLConnectionISF::update_preedit_string(sclint ic, const sclchar *ic_uuid, const sclchar *str, const scim::AttributeList &attrs)
1005 if (m_initialized) {
1008 uuid = scim::String(ic_uuid);
1010 m_helper_agent.update_preedit_string(ic, uuid, scim::utf8_mbstowcs(str), attrs);
1012 if (str && strlen(str) > 0) {
1013 show_preedit_string(ic, ic_uuid);
1015 hide_preedit_string(ic, ic_uuid);
1020 void CSCLConnectionISF::update_aux_string(const sclchar *str)
1022 if (m_initialized) {
1023 scim::AttributeList list;
1024 m_helper_agent.update_aux_string(scim::String(str), list);
1028 void CSCLConnectionISF::update_input_context(sclu32 type, sclu32 value)
1030 if (m_initialized) {
1031 m_helper_agent.update_input_context(type, value);
1035 void CSCLConnectionISF::update_geometry(sclint x, sclint y, sclint width, sclint height)
1037 if (m_initialized) {
1038 m_helper_agent.update_geometry(x, y, width, height);
1042 void CSCLConnectionISF::get_surrounding_text(const sclchar *ic_uuid, sclint maxlen_before, sclint maxlen_after) const
1044 if (m_initialized) {
1047 uuid = scim::String(ic_uuid);
1049 m_helper_agent.get_surrounding_text(uuid, maxlen_before, maxlen_after);
1053 sclint CSCLConnectionISF::get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor)
1055 if (m_initialized) {
1056 scim::String surrounding_text;
1057 m_helper_agent.get_surrounding_text(maxlen_before, maxlen_after, surrounding_text, cursor);
1060 *text = strdup(surrounding_text.c_str());
1061 if (*text == NULL) {
1069 void CSCLConnectionISF::delete_surrounding_text(sclint offset, sclint len) const
1071 if (m_initialized) {
1072 m_helper_agent.delete_surrounding_text(offset, len);
1076 void CSCLConnectionISF::set_candidate_position(sclint left, sclint top)
1078 if (m_initialized) {
1079 m_helper_agent.set_candidate_position(left, top);
1083 void CSCLConnectionISF::enable_soft_candidate(sclboolean enable)
1085 if (m_initialized) {
1087 m_helper_agent.set_candidate_style(scim::ONE_LINE_CANDIDATE, scim::SOFT_CANDIDATE_WINDOW);
1089 m_helper_agent.set_candidate_style(scim::ONE_LINE_CANDIDATE, scim::FIXED_CANDIDATE_WINDOW);
1093 void CSCLConnectionISF::candidate_hide(void)
1095 if (m_initialized) {
1096 m_helper_agent.candidate_hide();
1100 void CSCLConnectionISF::set_keyboard_ise_by_uuid(const sclchar *uuid)
1102 if (m_initialized) {
1103 m_helper_agent.set_keyboard_ise_by_uuid(uuid);
1107 void CSCLConnectionISF::get_keyboard_ise(const sclchar *uuid)
1109 if (m_initialized) {
1110 m_helper_agent.get_keyboard_ise(uuid);
1114 void CSCLConnectionISF::set_selection(sclint start, sclint end)
1116 if (m_initialized) {
1117 m_helper_agent.set_selection(start, end);
1121 void CSCLConnectionISF::send_private_command(const sclchar *command)
1123 if (m_initialized) {
1124 m_helper_agent.send_private_command(command);
1128 void CSCLConnectionISF::get_selection_text(sclchar **text)
1130 if (m_initialized) {
1131 scim::String selection_text;
1132 m_helper_agent.get_selection_text(selection_text);
1135 *text = strdup(selection_text.c_str());
1139 void CSCLConnectionISF::request_ise_hide()
1141 if (m_initialized) {
1142 m_helper_agent.request_ise_hide();
1146 void CSCLConnectionISF::commit_content(const sclchar *content, const sclchar *description, const sclchar *mime_types)
1148 if (m_initialized) {
1149 m_helper_agent.commit_content(content, description, mime_types);
1155 EXAPI void scim_module_init(void) {
1158 EXAPI void scim_module_exit(void) {
1161 EXAPI void scim_helper_module_run_helper(const scim::String &uuid, const scim::ConfigPointer &config, const scim::String &display) {
1162 _scim_config = config;
1163 CSCLCoreImpl *impl = CSCLCoreImpl::get_instance();
1165 impl->on_run(uuid.c_str(), display.c_str());