2 * ISF(Input Service Framework)
4 * ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable.
5 * Copyright (c) 2012-2015 Samsung Electronics Co., Ltd.
7 * Contact: Haifeng Deng <haifeng.deng@samsung.com>, Hengliang Luo <hl.luo@samsung.com>
9 * This library is free software; you can redistribute it and/or modify it under
10 * the terms of the GNU Lesser General Public License as published by the
11 * Free Software Foundation; either version 2.1 of the License, or (at your option)
14 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
15 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17 * License for more details.
19 * You should have received a copy of the GNU Lesser General Public License
20 * along with this library; if not, write to the Free Software Foundation, Inc., 51
21 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 #define Uses_SCIM_CONFIG_PATH
26 #define Uses_SCIM_TRANSACTION
27 #define Uses_ISF_IMCONTROL_CLIENT
28 #define Uses_SCIM_COMPOSE_KEY
29 #define Uses_SCIM_PANEL_AGENT
33 #include "isf_control.h"
37 #include <vconf-keys.h>
39 #include "isf_debug.h"
43 #define LOG_TAG "ISF_CONTROL"
48 EXAPI int isf_control_set_active_ise_by_uuid (const char *uuid)
53 IMControlClient imcontrol_client;
55 if (!imcontrol_client.open_connection ())
58 imcontrol_client.prepare ();
59 if (!imcontrol_client.set_active_ise_by_uuid (uuid))
62 imcontrol_client.close_connection ();
67 EXAPI int isf_control_get_active_ise (char **uuid)
73 IMControlClient imcontrol_client;
76 if (!imcontrol_client.open_connection ())
79 imcontrol_client.prepare ();
80 if (!imcontrol_client.get_active_ise (strUuid)) {
84 imcontrol_client.close_connection ();
89 *uuid = strUuid.length () ? strdup (strUuid.c_str ()) : strdup ("");
91 return strUuid.length ();
94 EXAPI int isf_control_get_ise_list (char ***uuid_list)
96 if (uuid_list == NULL)
100 IMControlClient imcontrol_client;
102 if (!imcontrol_client.open_connection ())
105 imcontrol_client.prepare ();
106 if (!imcontrol_client.get_ise_list (&count, uuid_list))
109 imcontrol_client.close_connection ();
114 EXAPI int isf_control_get_ise_info (const char *uuid, char **name, char **language, ISE_TYPE_T *type, int *option)
116 return isf_control_get_ise_info_and_module_name (uuid, name, language, type, option, NULL);
119 EXAPI int isf_control_get_ise_info_and_module_name (const char *uuid, char **name, char **language, ISE_TYPE_T *type, int *option, char **module_name)
127 String strName, strLanguage, strModuleName;
129 IMControlClient imcontrol_client;
130 if (!imcontrol_client.open_connection ())
133 imcontrol_client.prepare ();
134 if (!imcontrol_client.get_ise_info (uuid, strName, strLanguage, nType, nOption, strModuleName)) {
138 imcontrol_client.close_connection ();
144 *name = strName.length () ? strdup (strName.c_str ()) : strdup ("");
146 if (language != NULL)
147 *language = strLanguage.length () ? strdup (strLanguage.c_str ()) : strdup ("");
150 *type = (ISE_TYPE_T)nType;
155 if (module_name != NULL)
156 *module_name = strModuleName.length () ? strdup (strModuleName.c_str ()) : strdup ("");
161 EXAPI int isf_control_set_active_ise_to_default (void)
163 IMControlClient imcontrol_client;
166 if (!imcontrol_client.open_connection ())
169 imcontrol_client.prepare ();
170 imcontrol_client.set_active_ise_to_default ();
171 if (!imcontrol_client.send ())
174 imcontrol_client.close_connection ();
179 EXAPI int isf_control_reset_ise_option (void)
181 IMControlClient imcontrol_client;
183 if (!imcontrol_client.open_connection ())
186 imcontrol_client.prepare ();
187 if (!imcontrol_client.reset_ise_option ())
190 imcontrol_client.close_connection ();
195 EXAPI int isf_control_set_initial_ise_by_uuid (const char *uuid)
201 IMControlClient imcontrol_client;
202 if (!imcontrol_client.open_connection ())
205 imcontrol_client.prepare ();
206 if (!imcontrol_client.set_initial_ise_by_uuid (uuid))
209 imcontrol_client.close_connection ();
214 EXAPI int isf_control_get_initial_ise (char **uuid)
219 String strUuid = scim_global_config_read (String (SCIM_GLOBAL_CONFIG_INITIAL_ISE_UUID), String (SCIM_COMPOSE_KEY_FACTORY_UUID));
221 *uuid = strUuid.length () ? strdup (strUuid.c_str ()) : strdup ("");
223 return strUuid.length ();
226 EXAPI int isf_control_show_ise_selector (void)
228 return isf_control_show_ime_selector();
231 EXAPI int isf_control_get_ise_count (ISE_TYPE_T type)
233 char **iselist = NULL;
234 int all_ise_count, ise_count = 0;
237 all_ise_count = isf_control_get_ise_list (&iselist);
238 if (all_ise_count < 0) {
244 for (int i = 0; i < all_ise_count; i++) {
246 isf_control_get_ise_info (iselist[i], NULL, NULL, &isetype, NULL);
247 if (isetype == type) {
261 EXAPI int isf_control_show_ise_option_window (void)
263 IMControlClient imcontrol_client;
265 if (!imcontrol_client.open_connection ())
268 imcontrol_client.prepare ();
269 imcontrol_client.show_ise_option_window ();
270 if (!imcontrol_client.send ())
273 imcontrol_client.close_connection ();
278 EXAPI int isf_control_get_all_ime_info (ime_info_s **info)
280 int count = -1, i = 0;
282 HELPER_ISE_INFO helper_info;
283 ime_info_s *ime_info = NULL;
288 IMControlClient imcontrol_client;
289 if (!imcontrol_client.open_connection ())
292 imcontrol_client.prepare ();
293 if (!imcontrol_client.get_all_helper_ise_info (helper_info))
296 imcontrol_client.close_connection ();
301 count = static_cast<int>(helper_info.label.size());
303 ime_info = (ime_info_s *)calloc (count, sizeof (ime_info_s));
305 for (i = 0; i < count; i++) {
306 snprintf(ime_info[i].appid, sizeof (ime_info[i].appid), "%s", helper_info.appid[i].c_str());
307 snprintf(ime_info[i].label, sizeof (ime_info[i].label), "%s", helper_info.label[i].c_str());
308 ime_info[i].is_enabled = static_cast<bool>(helper_info.is_enabled[i]);
309 ime_info[i].is_preinstalled = static_cast<bool>(helper_info.is_preinstalled[i]);
310 ime_info[i].has_option = static_cast<int>(helper_info.has_option[i]);
322 EXAPI int isf_control_open_ime_option_window (void)
324 return isf_control_show_ise_option_window ();
327 EXAPI int isf_control_resume_ime_option_window (void)
329 IMControlClient imcontrol_client;
331 if (!imcontrol_client.open_connection ())
334 imcontrol_client.prepare ();
335 imcontrol_client.resume_ise_option_window ();
336 if (!imcontrol_client.send ())
339 imcontrol_client.close_connection ();
344 EXAPI int isf_control_get_active_ime (char **appid)
351 IMControlClient imcontrol_client;
352 if (!imcontrol_client.open_connection ()) {
353 LOGW ("open_connection failed");
357 imcontrol_client.prepare ();
358 if (!imcontrol_client.get_active_ise (strUuid)) {
359 LOGW ("get_active_ise failed");
363 imcontrol_client.close_connection ();
368 *appid = strUuid.length () ? strdup (strUuid.c_str ()) : NULL;
370 if (*appid == NULL) {
371 LOGW ("appid is invalid");
375 return strUuid.length ();
378 EXAPI int isf_control_set_active_ime (const char *appid)
380 return isf_control_set_active_ise_by_uuid(appid);
383 EXAPI int isf_control_set_enable_ime (const char *appid, bool is_enabled)
388 IMControlClient imcontrol_client;
391 if (!imcontrol_client.open_connection ())
394 imcontrol_client.prepare ();
396 if (!imcontrol_client.set_enable_helper_ise_info (appid, is_enabled))
399 imcontrol_client.close_connection ();
404 EXAPI int isf_control_show_ime_list (void)
406 IMControlClient imcontrol_client;
409 if (!imcontrol_client.open_connection ())
412 imcontrol_client.prepare ();
413 if (!imcontrol_client.show_helper_ise_list ()) {
414 LOGW ("show_helper_ise_list failed");
418 imcontrol_client.close_connection ();
423 EXAPI int isf_control_show_ime_selector (void)
425 IMControlClient imcontrol_client;
428 if (!imcontrol_client.open_connection ())
431 imcontrol_client.prepare ();
432 if (!imcontrol_client.show_helper_ise_selector ()) {
433 LOGW ("show_helper_ise_selector failed");
437 imcontrol_client.close_connection ();
442 EXAPI int isf_control_is_ime_enabled (const char *appid, bool *enabled)
444 if (!appid || !enabled || strlen(appid) < 1) {
445 LOGW ("Invalid parameter");
452 IMControlClient imcontrol_client;
453 if (!imcontrol_client.open_connection ()) {
454 LOGW ("open_connection failed");
458 imcontrol_client.prepare ();
459 if (!imcontrol_client.is_helper_ise_enabled (appid, nEnabled)) {
460 LOGW ("is_helper_ise_enabled failed");
464 imcontrol_client.close_connection ();
470 LOGW ("Failed; appid(%s), nEnabled=%d", appid, nEnabled);
474 *enabled = static_cast<bool>(nEnabled);
479 EXAPI int isf_control_get_recent_ime_geometry (int *x, int *y, int *w, int *h)
481 return isf_control_get_recent_ime_geometry_with_rotation_angle (-1, x, y, w, h);
484 EXAPI int isf_control_get_recent_ime_geometry_with_rotation_angle (int angle, int * x, int * y, int * w, int * h)
486 int ime_x = -1, ime_y = -1, ime_w = -1, ime_h = -1;
488 IMControlClient imcontrol_client;
491 if ((angle != -1) && (angle % 90 != 0))
495 char *geometry = NULL;
500 geometry = vconf_get_str(VCONFKEY_ISF_IME_RECENT_LAND_GEOMETRY);
503 geometry = vconf_get_str(VCONFKEY_ISF_IME_RECENT_PORT_GEOMETRY);
507 arr = eina_str_split(geometry, ",", 0);
510 ime_x = atoi(arr[0]);
513 ime_y = atoi(arr[1]);
516 ime_w = atoi(arr[2]);
519 ime_h = atoi(arr[3]);
528 if (ime_x < 0 && ime_y < 0 && ime_w < 0 && ime_h < 0) {
535 if (!imcontrol_client.open_connection ())
538 imcontrol_client.prepare ();
539 if (!imcontrol_client.get_recent_ime_geometry (&ime_x, &ime_y, &ime_w, &ime_h, angle))
542 imcontrol_client.close_connection ();
565 EXAPI int isf_control_hide_ime (void)
567 IMControlClient imcontrol_client;
570 if (!imcontrol_client.open_connection ())
573 imcontrol_client.prepare ();
574 if (!imcontrol_client.hide_helper_ise ()) {
575 LOGW ("hide_helper_ise failed");
579 imcontrol_client.close_connection ();
586 vi:ts=4:nowrap:ai:expandtab