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 "sclcoreimpl.h"
19 #include <app_common.h>
24 CSCLCoreImpl::CSCLCoreImpl()
26 m_event_callback = NULL;
30 m_window_created = FALSE;
31 m_window_creation_defer_flag = FALSE;
34 CSCLCoreImpl::~CSCLCoreImpl()
47 CSCLCoreImpl::get_instance()
49 static CSCLCoreImpl instance;
53 void CSCLCoreImpl::init()
60 sclboolean CSCLCoreImpl::prepare()
62 sclboolean ret = TRUE;
65 const char *display = getenv("DISPLAY");
66 LOGD("display env : '%s'\n", display);
67 m_display = display ? strdup(display) : strdup(":0");
74 LOGD("appid : '%s'\n", appid);
77 m_uuid = strdup(appid);
82 if (!m_window_creation_defer_flag) {
83 LOGD("defer_flag FALSE, creating main window");
84 m_window_created = m_core_ui.create_main_window();
85 ret = m_window_created;
88 m_connection.open_connection(m_display);
91 if (m_event_callback) {
92 m_event_callback->on_init();
98 void CSCLCoreImpl::fini()
101 if (m_event_callback) {
102 m_event_callback->on_exit();
105 m_connection.close_connection();
111 void CSCLCoreImpl::set_core_event_callback(ISCLCoreEventCallback *callback)
113 m_event_callback = callback;
116 ISCLCoreEventCallback* CSCLCoreImpl::get_core_event_callback()
118 ISCLCoreEventCallback* ret = m_event_callback;
122 CSCLCoreUI* CSCLCoreImpl::get_core_ui()
127 CSCLConnection* CSCLCoreImpl::get_connection()
129 return &m_connection;
132 sclchar* CSCLCoreImpl::get_uuid()
137 void CSCLCoreImpl::config_reload()
139 m_connection.config_reload();
142 sclboolean CSCLCoreImpl::config_read_int(const sclchar *name, sclint &value)
144 return m_connection.config_read_int(name, value);
147 sclboolean CSCLCoreImpl::config_read_string(const sclchar *name, std::string &value)
149 return m_connection.config_read_string(name, value);
152 sclboolean CSCLCoreImpl::config_write_int(const sclchar *name, sclint value)
154 return m_connection.config_write_int(name, value);
157 sclboolean CSCLCoreImpl::config_write_string(const sclchar *name, const std::string value)
159 return m_connection.config_write_string(name, value);
162 sclboolean CSCLCoreImpl::config_erase(const sclchar *name)
164 return m_connection.config_erase(name);
167 sclboolean CSCLCoreImpl::config_flush(void)
169 return m_connection.config_flush();
172 void CSCLCoreImpl::send_imengine_event(sclint ic, const sclchar *ic_uuid, const sclint command, const sclu32 value)
174 m_connection.send_imengine_event(ic, ic_uuid, command, value);
177 void CSCLCoreImpl::reset_keyboard_ise()
179 m_connection.reset_keyboard_ise();
182 void CSCLCoreImpl::flush_keyboard_ise()
184 m_connection.flush_keyboard_ise();
187 void CSCLCoreImpl::send_key_event(sclint ic, const sclchar *ic_uuid, sclu32 keycode, sclu16 keymask)
189 m_connection.send_key_event(ic, ic_uuid, keycode, keymask);
192 void CSCLCoreImpl::forward_key_event(sclint ic, const sclchar *ic_uuid, sclu32 keycode, sclu16 keymask)
194 m_connection.forward_key_event(ic, ic_uuid, keycode, keymask);
197 void CSCLCoreImpl::commit_string(sclint ic, const sclchar *ic_uuid, const sclchar *str)
199 m_connection.commit_string(ic, ic_uuid, str);
202 void CSCLCoreImpl::select_candidate(int index)
204 m_connection.select_candidate(index);
207 void CSCLCoreImpl::show_preedit_string(sclint ic, const sclchar *ic_uuid)
209 m_connection.show_preedit_string(ic, ic_uuid);
212 void CSCLCoreImpl::show_aux_string(void)
214 m_connection.show_aux_string();
217 void CSCLCoreImpl::show_candidate_string(void)
219 m_connection.show_candidate_string();
222 void CSCLCoreImpl::show_associate_string(void)
224 m_connection.show_associate_string();
227 void CSCLCoreImpl::hide_preedit_string(sclint ic, const sclchar *ic_uuid)
229 m_connection.hide_preedit_string(ic, ic_uuid);
232 void CSCLCoreImpl::hide_aux_string(void)
234 m_connection.hide_aux_string();
237 void CSCLCoreImpl::hide_candidate_string(void)
239 m_connection.hide_candidate_string();
242 void CSCLCoreImpl::hide_associate_string(void)
244 m_connection.hide_associate_string();
247 void CSCLCoreImpl::update_preedit_string(sclint ic, const sclchar *ic_uuid, const sclchar *str)
249 m_connection.update_preedit_string(ic, ic_uuid, str);
252 void CSCLCoreImpl::update_preedit_string(sclint ic, const sclchar *ic_uuid, const sclchar *str, const scim::AttributeList &attrs)
254 m_connection.update_preedit_string(ic, ic_uuid, str, attrs);
257 void CSCLCoreImpl::update_preedit_caret(sclint caret)
259 m_connection.update_preedit_caret(caret);
262 void CSCLCoreImpl::update_aux_string(const sclchar *str)
264 m_connection.update_aux_string(str);
267 void CSCLCoreImpl::update_input_context(sclu32 type, sclu32 value)
269 m_connection.update_input_context(type, value);
272 void CSCLCoreImpl::update_geometry(sclint x, sclint y, sclint width, sclint height)
274 m_connection.update_geometry(x, y, width, height);
277 void CSCLCoreImpl::get_surrounding_text(const sclchar* ic_uuid, sclint maxlen_before, sclint maxlen_after) const
279 m_connection.get_surrounding_text(ic_uuid, maxlen_before, maxlen_after);
282 sclint CSCLCoreImpl::get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor)
284 return m_connection.get_surrounding_text(maxlen_before, maxlen_after, text, cursor);
287 void CSCLCoreImpl::delete_surrounding_text(sclint offset, sclint len) const
289 m_connection.delete_surrounding_text(offset, len);
292 void CSCLCoreImpl::set_candidate_position(sclint left, sclint top)
294 m_connection.set_candidate_position(left, top);
297 void CSCLCoreImpl::enable_soft_candidate(sclboolean enable)
299 m_connection.enable_soft_candidate(enable);
302 void CSCLCoreImpl::candidate_hide(void)
304 m_connection.candidate_hide();
307 void CSCLCoreImpl::set_keyboard_ise_by_uuid(const sclchar *uuid)
309 m_connection.set_keyboard_ise_by_uuid(uuid);
312 void CSCLCoreImpl::get_keyboard_ise(const sclchar *uuid)
314 m_connection.get_keyboard_ise(uuid);
317 void CSCLCoreImpl::on_run(const sclchar *uuid, const sclchar *display)
319 LOGD("uuid : '%s', display : '%s'\n", uuid, display);
321 if (uuid && strlen(uuid) > 0) {
326 m_uuid = strdup(uuid);
334 m_display = strdup(display);
337 if (m_event_callback) {
338 m_event_callback->on_run(0, NULL);
342 void CSCLCoreImpl::run()
347 const char *display = getenv("DISPLAY");
348 LOGD("display env : '%s'\n", display);
349 m_display = display ? strdup(display) : strdup(":0");
353 m_core_ui.run(m_display);
358 sclwindow CSCLCoreImpl::get_main_window()
360 if (!m_window_created) {
361 LOGD("create main window\n");
362 m_window_created = m_core_ui.create_main_window();
365 return m_core_ui.get_main_window();
368 int CSCLCoreImpl::get_screen_rotation_degree()
370 return m_core_ui.get_screen_rotation_degree();
373 void CSCLCoreImpl::set_keyboard_size_hints(SclSize portrait, SclSize landscape)
375 m_core_ui.set_keyboard_size_hints(portrait, landscape);
378 sclwindow CSCLCoreImpl::create_option_window()
380 return m_core_ui.create_option_window(OPTION_WINDOW_TYPE_NORMAL);
383 void CSCLCoreImpl::destroy_option_window(sclwindow window)
385 m_core_ui.destroy_option_window(window);
388 void CSCLCoreImpl::set_selection(sclint start, sclint end)
390 m_connection.set_selection(start, end);
393 void CSCLCoreImpl::send_private_command(const sclchar *command)
395 m_connection.send_private_command(command);
398 void CSCLCoreImpl::get_selection_text(sclchar **text)
400 m_connection.get_selection_text(text);
403 void CSCLCoreImpl::request_ise_hide()
405 m_connection.request_ise_hide();
408 void CSCLCoreImpl::commit_content(const sclchar *content, const sclchar *description, const sclchar *mime_types)
410 m_connection.commit_content(content, description, mime_types);
413 void CSCLCoreImpl::set_floating_mode(sclboolean floating_mode)
415 m_core_ui.set_floating_mode(floating_mode);
418 void CSCLCoreImpl::set_floating_drag_enabled(sclboolean enabled)
420 m_core_ui.set_floating_drag_enabled(enabled);
423 void CSCLCoreImpl::set_window_creation_defer_flag(sclboolean flag)
425 LOGD("defer_flag %d", flag);
426 m_window_creation_defer_flag = flag;