pkgconfig_DATA = isf.pc scim.pc \
$(GTK_UTILS_PKGCONFIG)
+smackdir = /etc/smack/accesses2.d/
+smack_DATA = isf.rule
+
ACLOCAL_AMFLAGS = -I ism/m4
.PHONY: update-ChangeLog
# Process this file with autoconf to produce a configure script
#AC_INIT(scim, 1.4.7, suzhe@tsinghua.org.cn)
-AC_INIT(isf, 2.3.6117, isf@samsung.com)
+AC_INIT(isf, 2.4.6312, isf@samsung.com)
AC_CONFIG_SRCDIR([ism/src/scim.h])
m4_pattern_allow([^AS_])
# ISF version
ISF_MAJOR_VERSION=2
-ISF_MINOR_VERSION=3
-ISF_MICRO_VERSION=6117
+ISF_MINOR_VERSION=4
+ISF_MICRO_VERSION=6312
ISF_VERSION=$ISF_MAJOR_VERSION.$ISF_MINOR_VERSION.$ISF_MICRO_VERSION
PLATFORM_INIT
# Init gettext
-ALL_LINGUAS="hy az eu bg ca zh_CN zh_HK zh_TW hr cs da nl_NL en en_US et fi fr_FR gl ka de_DE el_GR hu is ga it_IT ja_JP kk ko_KR lv lt mk nb pl pt_PT pt_BR ro ru_RU sr sk sl es_ES es_US sv tr_TR uk uz ar zh_SG hi en_PH fr_CA"
+ALL_LINGUAS="hy az eu bg ca zh_CN zh_HK zh_TW hr cs da nl_NL en en_US et fi fr_FR gl ka de_DE el_GR hu is ga it_IT ja_JP kk ko_KR lv lt mk nb pl pt_PT pt_BR ro ru_RU sr sk sl es_ES es_US es_MX sv tr_TR uk uz ar zh_SG hi en_PH fr_CA"
AM_GNU_GETTEXT
# Init libtool
# Check privilege control library
PKG_CHECK_MODULES(PRIVILEGE_CONTROL, [libprivilege-control >= 0])
-# Check syspopup-caller library
-PKG_CHECK_MODULES(SYSPOPUP, [syspopup-caller])
+# Check notification library
+PKG_CHECK_MODULES(NOTIFICATION, [notification])
# Check if we should build isf-setting-efl
PKG_CHECK_MODULES(VCONF, [vconf],
<manifest>
<define>
<domain name="isf"/>
- <request>
- <smack request="system::vconf" type="arwxt"/>
- <smack request="system::homedir" type="arwxt"/>
- <smack request="xorg" type="w"/>
- <smack request="system::use_internet" type="r"/>
- <smack request="e17" type="r"/>
- <smack request="system::app_logging" type="w"/>
- </request>
</define>
<assign>
<filesystem path="/usr/lib/ecore/immodules/libisf-imf-module.so" label="_"/>
<filesystem path="/usr/lib/libscim-x11utils-1.0.so" label="_"/>
<filesystem path="/usr/lib/libscim-x11utils-1.0.so.8" label="_"/>
<filesystem path="/usr/lib/libscim-x11utils-1.0.so.8.2.3" label="_"/>
+ <filesystem path="/usr/lib/scim-1.0/1.4.0/Config/simple.so" label="_"/>
+ <filesystem path="/usr/lib/scim-1.0/1.4.0/Config/socket.so" label="_"/>
+ <filesystem path="/usr/lib/scim-1.0/1.4.0/FrontEnd/socket.so" label="_"/>
+ <filesystem path="/usr/lib/scim-1.0/1.4.0/FrontEnd/x11.so" label="_"/>
+ <filesystem path="/usr/lib/scim-1.0/1.4.0/IMEngine/socket.so" label="_"/>
+ <filesystem path="/usr/bin/isf-demo-efl" label="_"/>
+ <filesystem path="/usr/bin/isf-panel-efl" label="_"/>
+ <filesystem path="/usr/bin/isf-log" label="_"/>
+ <filesystem path="/usr/bin/isf-query-engines" label="_"/>
+ <filesystem path="/usr/lib/systemd/user/scim.service" label="_" exec_label="none" />
+ <filesystem path="/usr/lib/systemd/user/multi-user.target.wants/scim.service" label="_" exec_label="none" />
</assign>
<request>
<domain name="isf"/>
--- /dev/null
+isf system::vconf arwxt
+isf system::homedir arwxt
+isf xorg w
+isf system::use_internet r
+isf e17 r
+isf device::app_logging w
+isf svi-data rx
+isf sound_server rw
+isf sys-assert::core arwxt
/Hotkeys/FrontEnd/NextFactory = Control+Alt+Down,Shift+Control+KeyRelease+Shift_L,Shift+Control+KeyRelease+Shift_R
/Hotkeys/FrontEnd/PreviousFactory = Control+Alt+Up,Shift+Control+KeyRelease+Control_L,Shift+Control+KeyRelease+Control_R
/Hotkeys/FrontEnd/ShowFactoryMenu = Control+Alt+Right
-/Hotkeys/FrontEnd/Trigger = Control+space,Hangul
+/Hotkeys/FrontEnd/Trigger = Shift+space,Hangul
/Hotkeys/FrontEnd/ValidKeyMask = Shift+Control+Alt+CapsLock+Meta+QuirkKanaRo
+/IMEngine/Hangul/AutoReorder = false
/Panel/Gtk/Color/ActiveBackground = light sky blue
/Panel/Gtk/Color/ActiveText = black
/Panel/Gtk/Color/NormalBackground = #DDDDFF
isf_return_key_type_efl.cpp \
isf_return_key_disable_efl.cpp \
isf_imdata_set_efl.cpp \
- isf_focus_movement_efl.cpp
+ isf_focus_movement_efl.cpp \
+ isf_language_efl.cpp
isf_demo_efl_CXXFLAGS = @EFL_CFLAGS@ \
@APPCORE_EFL_CFLAGS@ \
@APPCORE_EFL_LIBS@ \
@UIGADGET_LIBS@ @PRIVILEGE_CONTROL_LIBS@
-#isf_demo_efl_LDADD = -lui-gadget
+isf_demo_efl_LDADD = $(top_builddir)/ism/src/libscim@SCIM_EPOCH@.la
Evas_Object *li;
Evas_Object *ev_li;
service_h data;
+ Eina_Bool vkbd_state;
+};
+
+struct _menu_item {
+ const char *name;
+ void (*func)(void *data, Evas_Object *obj, void *event_info);
};
// Utility functions
--- /dev/null
+/*
+ * ISF(Input Service Framework)
+ *
+ * ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable.
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Jihoon Kim <jihoon48.kim@samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifndef __ISE_LANGUAGE_H
+#define __ISE_LANGUAGE_H
+
+#include <Elementary.h>
+
+void ise_language_bt (void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __ISE_LANGUAGE_H */
+
+/*
+vi:ts=4:ai:nowrap:expandtab
+*/
static Evas_Object *_create_ef_layout (Evas_Object *parent, const char *label, const char *guide_text, Elm_Autocapital_Type autocap, Eina_Bool caps_lock_mode)
{
Evas_Object *ef = create_ef (parent, label, guide_text);
- Evas_Object *en = elm_object_part_content_get (ef, "elm.swallow.content");
+ Evas_Object *en = elm_object_part_content_get (ef, "elm.icon.entry");
elm_entry_autocapital_type_set (en, autocap);
Ecore_IMF_Context *ic = (Ecore_IMF_Context *)elm_entry_imf_context_get (en);
#include "isf_return_key_disable_efl.h"
#include "isf_imdata_set_efl.h"
#include "isf_focus_movement_efl.h"
+#include "isf_language_efl.h"
#define BASE_THEME_WIDTH 720.0f
+static void isfsetting_bt (void *data, Evas_Object *obj, void *event_info);
+static void keyboard_setting_wizard_bt (void *data, Evas_Object *obj, void *event_info);
+
+static struct _menu_item isf_demo_menu_its[] = {
+ { "ISF IM Control", imcontrolapi_bt },
+ { "ISF Layout", ise_layout_bt },
+ { "ISF Autocapital", ise_autocapital_bt },
+ { "ISF Prediction Allow", ise_prediction_bt },
+ { "ISF Language", ise_language_bt },
+ { "ISF Return Key Type", ise_return_key_type_bt },
+ { "ISF Return Key Disable", ise_return_key_disable_bt },
+ { "ISF IM Data", ise_imdata_set_bt },
+ { "ISF Event", isf_event_demo_bt },
+ { "ISF Focus Movement", isf_focus_movement_bt },
+ { "ISF Setting", isfsetting_bt },
+ { "Keyboard Setting Wizard", keyboard_setting_wizard_bt },
+
+ /* do not delete below */
+ { NULL, NULL }
+};
static void _quit_cb (void *data, Evas_Object *obj, void *event_info)
{
evas_object_show (base);
break;
case UG_MODE_FRAMEVIEW:
- printf("please set ug mode to UG_MODE_FULLVIEW!\n");
+ printf ("please set ug mode to UG_MODE_FULLVIEW!\n");
break;
default:
break;
static int create_demo_view (struct appdata *ad)
{
Evas_Object *li = NULL;
+ int idx = 0;
Evas_Object *l_button = elm_button_add (ad->naviframe);
elm_object_style_set (l_button, "naviframe/end_btn/default");
elm_list_mode_set (li, ELM_LIST_COMPRESS);
evas_object_smart_callback_add (ad->li, "selected", _list_click, ad);
- // Test ISF imcontrol API
- elm_list_item_append (li, "ISF IM Control", NULL, NULL, imcontrolapi_bt, ad);
-
- // test ISF layout
- elm_list_item_append (li, "ISF Layout", NULL, NULL, ise_layout_bt, ad);
-
- // Test autocapital type
- elm_list_item_append (li, "ISF Autocapital", NULL, NULL, ise_autocapital_bt, ad);
-
- // Test prediction allow
- elm_list_item_append (li, "ISF Prediction Allow", NULL, NULL, ise_prediction_bt, ad);
-
- // Test return key type
- elm_list_item_append (li, "ISF Return Key Type", NULL, NULL, ise_return_key_type_bt, ad);
-
- // Test return key disable
- elm_list_item_append (li, "ISF Return Key Disable", NULL, NULL, ise_return_key_disable_bt, ad);
-
- // Test imdata setting
- elm_list_item_append (li, "ISF IM Data", NULL, NULL, ise_imdata_set_bt, ad);
-
- elm_list_item_append (li, "ISF Event", NULL, NULL, isf_event_demo_bt, ad);
-
- elm_list_item_append (li, "ISF Focus Movement", NULL, NULL, isf_focus_movement_bt, ad);
-
- elm_list_item_append (li, "ISF Setting", NULL, NULL, isfsetting_bt, ad);
- elm_list_item_append (li, "Keyboard Setting Wizard", NULL, NULL, keyboard_setting_wizard_bt, ad);
- // ISF preedit string and commit string on Label and Entry
+ while (isf_demo_menu_its[idx].name != NULL) {
+ elm_list_item_append(li, isf_demo_menu_its[idx].name, NULL, NULL, isf_demo_menu_its[idx].func, ad);
+ ++idx;
+ }
elm_list_go (li);
static void
_vkbd_state_on (void *data, Evas_Object *obj, void *event_info)
{
- printf("[%s] input panel is shown\n", __func__);
+ struct appdata *ad = (struct appdata *)data;
+
+ printf ("[%s] input panel is shown\n", __func__);
+ ad->vkbd_state = EINA_TRUE;
}
static void
_vkbd_state_off (void *data, Evas_Object *obj, void *event_info)
{
- printf("[%s] input panel is hidden\n", __func__);
+ struct appdata *ad = (struct appdata *)data;
+
+ printf ("[%s] input panel is hidden\n", __func__);
+ ad->vkbd_state = EINA_FALSE;
}
-static Evas_Object* create_layout_main (Evas_Object *parent)
+static Evas_Object* create_layout_main (struct appdata *ad)
{
- Evas_Object *layout = elm_layout_add (parent);
+ Evas_Object *win_main = ad->win_main;
+
+ Evas_Object *layout = elm_layout_add (win_main);
elm_layout_theme_set (layout, "layout", "application", "default");
evas_object_size_hint_weight_set (layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set (layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show (layout);
/* Put the layout inside conformant for drawing indicator in app side */
- Evas_Object *conformant = elm_conformant_add (parent);
+ Evas_Object *conformant = elm_conformant_add (win_main);
evas_object_size_hint_weight_set (conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set (conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_win_resize_object_add (parent, conformant);
- elm_win_conformant_set (parent, EINA_TRUE);
+ elm_win_resize_object_add (win_main, conformant);
evas_object_show (conformant);
- evas_object_smart_callback_add(conformant, "virtualkeypad,state,on", _vkbd_state_on, NULL);
- evas_object_smart_callback_add(conformant, "virtualkeypad,state,off", _vkbd_state_off, NULL);
+ evas_object_smart_callback_add (conformant, "virtualkeypad,state,on", _vkbd_state_on, ad);
+ evas_object_smart_callback_add (conformant, "virtualkeypad,state,off", _vkbd_state_off, ad);
+
+ elm_win_conformant_set (win_main, EINA_TRUE);
elm_object_content_set (conformant, layout);
if (strcmp (ev->keyname, "XF86Stop") == 0) {
if (ug_send_key_event (UG_KEY_EVENT_END) == -1) {
top_it = elm_naviframe_top_item_get (ad->naviframe);
- bottom_it = elm_naviframe_top_item_get (ad->naviframe);
+ bottom_it = elm_naviframe_bottom_item_get (ad->naviframe);
if (top_it && bottom_it && (elm_object_item_content_get (top_it) == elm_object_item_content_get (bottom_it))) {
elm_exit ();
} else {
elm_config_scale_set (ad->root_w / BASE_THEME_WIDTH);
}
- ad->layout_main = create_layout_main (ad->win_main);
+ ad->layout_main = create_layout_main (ad);
// Indicator
elm_win_indicator_mode_set (ad->win_main, ELM_WIN_INDICATOR_SHOW);
static int app_exit (void *data)
{
struct appdata *ad = (struct appdata *)data;
- if (ad->li != NULL)
+ if (ad->li != NULL) {
evas_object_del (ad->li);
+ ad->li = NULL;
+ }
- if (ad->ev_li != NULL)
+ if (ad->ev_li != NULL) {
evas_object_del (ad->ev_li);
+ ad->ev_li = NULL;
+ }
- if (ad->layout_main != NULL)
+ if (ad->layout_main != NULL) {
evas_object_del (ad->layout_main);
+ ad->layout_main = NULL;
+ }
- if (ad->win_main != NULL)
+ if (ad->win_main != NULL) {
evas_object_del (ad->win_main);
+ ad->win_main = NULL;
+ }
return 0;
}
return ret;
}
+static void _changed_cb (void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *ly = (Evas_Object *)data;
+
+ if (elm_object_focus_get (obj)) {
+ if (elm_entry_is_empty (obj))
+ elm_object_signal_emit (ly, "elm,state,eraser,hide", "");
+ else
+ elm_object_signal_emit (ly, "elm,state,eraser,show", "");
+ }
+}
+
static void _focused_cb (void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *ly = (Evas_Object *)data;
- elm_object_signal_emit (ly, "elm,state,guidetext,hide", "elm");
+ if (!elm_entry_is_empty (obj))
+ elm_object_signal_emit (ly, "elm,state,eraser,show", "");
+
+ elm_object_signal_emit (ly, "elm,state,rename,hide", "");
}
static void _unfocused_cb (void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *ly = (Evas_Object *)data;
- if (elm_entry_is_empty (obj))
- elm_object_signal_emit (ly, "elm,state,guidetext,show", "elm");
+ elm_object_signal_emit (ly, "elm,state,eraser,hide", "");
+ elm_object_signal_emit (ly, "elm,state,rename,show", "");
+}
+
+static void _eraser_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ // When X marked button clicked, string should be empty.
+ Evas_Object *en = (Evas_Object *)data;
+
+ elm_object_focus_set (en, EINA_TRUE); // After button is clicked, entry should get focus again.
+ elm_entry_entry_set (en, "");
}
// Utility functions
Evas_Object *create_ef (Evas_Object *parent, const char *label, const char *guide_text)
{
- Evas_Object *ef = NULL;
- Evas_Object *en = NULL;
+ Evas_Object *ef, *en, *btn;
ef = elm_layout_add (parent);
- elm_layout_theme_set (ef, "layout", "editfield", "title");
+ elm_layout_theme_set (ef, "layout", "dialogue/editfield/title", "default");
en = elm_entry_add (parent);
- elm_object_part_content_set (ef, "elm.swallow.content", en);
+ elm_object_part_content_set (ef, "elm.icon.entry", en);
elm_object_part_text_set (ef, "elm.text", label);
- elm_object_part_text_set (ef, "elm.guidetext", guide_text);
+ elm_object_part_text_set (ef, "elm.guide", guide_text);
evas_object_size_hint_weight_set (ef, EVAS_HINT_EXPAND, 0);
evas_object_size_hint_align_set (ef, EVAS_HINT_FILL, 0);
+
+ evas_object_smart_callback_add (en, "changed", _changed_cb, ef);
+ evas_object_smart_callback_add (en, "preedit,changed", _changed_cb, ef);
evas_object_smart_callback_add (en, "focused", _focused_cb, ef);
evas_object_smart_callback_add (en, "unfocused", _unfocused_cb, ef);
+
+ btn = elm_button_add (parent);
+ elm_object_style_set (btn, "editfield_clear"); // Make "X" marked button by changing style.
+ elm_object_part_content_set (ef, "elm.icon.eraser", btn); // Add eraser button to current editfield layout.
+ evas_object_smart_callback_add (btn, "clicked", _eraser_btn_clicked_cb, en);
+
evas_object_show (ef);
return ef;
}
+static void _back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ if (!ad->vkbd_state) {
+ elm_naviframe_item_pop (ad->naviframe);
+ }
+}
+
void add_layout_to_naviframe (void *data, Evas_Object *lay_in, const char *title)
{
struct appdata *ad = (struct appdata *) data;
evas_object_show (scroller);
elm_object_content_set (scroller, lay_in);
- elm_naviframe_item_push (ad->naviframe, title, NULL, NULL, scroller, NULL);
+
+ // create back key
+ Evas_Object *back_btn = elm_button_add (ad->naviframe);
+ elm_object_style_set (back_btn, "naviframe/end_btn/default");
+ evas_object_smart_callback_add (back_btn, "clicked", _back_btn_clicked_cb, ad);
+
+ elm_naviframe_item_push (ad->naviframe, title, back_btn, NULL, scroller, NULL);
}
/*
#include <Ecore_IMF.h>
#include "isf_demo_efl.h"
-
static Evas_Object * _entry1 = NULL;
static Evas_Object * _entry2 = NULL;
static Evas_Object * _key_event_label = NULL;
static Ecore_Event_Handler *_preedit_handler = NULL;
static Ecore_Event_Handler *_commit_handler = NULL;
-
static void _input_panel_event_callback (void *data, Ecore_IMF_Context *ctx, int value)
{
if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
- printf("[%s] ECORE_IMF_INPUT_PANEL_STATE_SHOW\n", __func__);
+ printf ("[%s] ECORE_IMF_INPUT_PANEL_STATE_SHOW\n", __func__);
} else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
- printf("[%s] ECORE_IMF_INPUT_PANEL_STATE_HIDE\n", __func__);
+ printf ("[%s] ECORE_IMF_INPUT_PANEL_STATE_HIDE\n", __func__);
}
}
Ecore_IMF_Event_Commit *ev = (Ecore_IMF_Event_Commit *) event;
if (elm_object_focus_get (_entry1) == EINA_TRUE) {
- snprintf (str,sizeof(str), "entry 1 get commit string: %s",(char *)( ev->str));
+ snprintf (str, sizeof(str), "entry 1 get commit string: %s", (char *)( ev->str));
elm_object_text_set (_commit_event_label, str);
} else if (elm_object_focus_get (_entry2) == EINA_TRUE) {
- snprintf (str,sizeof(str), "entry 2 get commit string: %s", (char *)(ev->str));
+ snprintf (str, sizeof(str), "entry 2 get commit string: %s", (char *)(ev->str));
elm_object_text_set (_commit_event_label, str);
}
return ECORE_CALLBACK_RENEW;
evas_object_event_callback_del (_label1, EVAS_CALLBACK_KEY_UP, NULL);
evas_object_event_callback_del (_label2, EVAS_CALLBACK_KEY_UP, NULL);
- for(int i = 0; i < 2; i++)
- {
+ for (int i = 0; i < 2; i++) {
if (_imf_context[i]) {
ecore_imf_context_del(_imf_context[i]);
_imf_context[i] = NULL;
evas_object_size_hint_weight_set (layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_show (layout);
- evas = evas_object_evas_get(ad->win_main);
- ecore_win = ecore_evas_window_get(ecore_evas_ecore_evas_get(evas));
+ evas = evas_object_evas_get (ad->win_main);
+ ecore_win = ecore_evas_window_get (ecore_evas_ecore_evas_get (evas));
const char *ctx_id = ecore_imf_context_default_id_get ();
*/
#include "isf_demo_efl.h"
+#include "isf_control.h"
static Ecore_IMF_Context *imf_context = NULL;
static Elm_Genlist_Item_Class itci;
INPUT_PANEL_LAYOUT_SET,
INPUT_PANEL_LAYOUT_GET,
INPUT_PANEL_STATE_GET,
- CONTROL_PANEL_SHOW,
- CONTROL_PANEL_HIDE,
+ GET_ACTIVE_ISE,
+ GET_ISE_INFO,
+ GET_ISE_LIST,
+ RESET_DEFAULT_ISE
};
const char *api_list[]={
"INPUT PANEL LAYOUT SET",
"INPUT PANEL LAYOUT GET",
"INPUT PANEL STATE GET",
- "CTRL PANEL SHOW",
- "CTRL PANEL HIDE",
+ "GET ACTIVE ISE",
+ "GET ACTIVE ISE INFO",
+ "GET ISE LIST",
+ "RESET DEFAULT ISE"
};
static void test_input_panel_geometry_get (void *data, Evas_Object *obj, void *event_info)
}
}
-void test_control_panel_show (void *data, Evas_Object *obj, void *event_info)
+void test_get_active_ise (void *data, Evas_Object *obj, void *event_info)
{
- if (imf_context != NULL) {
- ecore_imf_context_control_panel_show (imf_context);
+ char *uuid = NULL;
+ int ret = isf_control_get_active_ise (&uuid);
+ if (ret > 0 && uuid)
+ printf (" Get active ISE: %s\n", uuid);
+ if (uuid)
+ free (uuid);
+}
+
+void test_get_ise_list (void *data, Evas_Object *obj, void *event_info)
+{
+ char **iselist = NULL;
+ int count = isf_control_get_ise_list (&iselist);
+
+ for (int i = 0; i < count; i++) {
+ if (iselist[i]) {
+ printf (" [%d : %s]\n", i, iselist[i]);
+ free (iselist[i]);
+ }
}
+ if (iselist)
+ free (iselist);
}
-void test_control_panel_hide (void *data, Evas_Object *obj, void *event_info)
+void test_get_ise_info (void *data, Evas_Object *obj, void *event_info)
{
- if (imf_context != NULL) {
- ecore_imf_context_control_panel_hide (imf_context);
+ char *uuid = NULL;
+ int ret = isf_control_get_active_ise (&uuid);
+ if (ret > 0 && uuid) {
+ char *name = NULL;
+ char *language = NULL;
+ ISE_TYPE_T type = HARDWARE_KEYBOARD_ISE;
+ int option = 0;
+ ret = isf_control_get_ise_info (uuid, &name, &language, &type, &option);
+ if (ret == 0 && name && language) {
+ printf (" Active ISE: uuid[%s], name[%s], language[%s], type[%d], option[%d]\n", uuid, name, language, type, option);
+ }
+ if (name)
+ free (name);
+ if (language)
+ free (language);
}
+ if (uuid)
+ free (uuid);
+}
+
+void test_reset_default_ise (void *data, Evas_Object *obj, void *event_info)
+{
+ int ret = isf_control_set_active_ise_to_default ();
+ if (ret == 0)
+ printf (" Reset default ISE is successful!\n");
+ else
+ printf (" Reset default ISE is failed!!!\n");
}
char *gli_label_get (void *data, Evas_Object *obj, const char *part)
case INPUT_PANEL_STATE_GET:
test_input_panel_state_get (NULL, obj, event_info);
break;
- case CONTROL_PANEL_SHOW:
- test_control_panel_show (NULL, obj, event_info);
+ case GET_ACTIVE_ISE:
+ test_get_active_ise (NULL, obj, event_info);
+ break;
+ case GET_ISE_LIST:
+ test_get_ise_list (NULL, obj, event_info);
+ break;
+ case GET_ISE_INFO:
+ test_get_ise_info (NULL, obj, event_info);
break;
- case CONTROL_PANEL_HIDE:
- test_control_panel_hide (NULL, obj, event_info);
+ case RESET_DEFAULT_ISE:
+ test_reset_default_ise (NULL, obj, event_info);
break;
default:
break;
static void _nf_back_event (void *data, Evas_Object *obj, void *event_info)
{
if (imf_context) {
- ecore_imf_context_del(imf_context);
+ ecore_imf_context_del (imf_context);
imf_context = NULL;
}
}
ef = _create_ef_layout (parent, _("ko_KR"), _("Korean Layout"));
elm_box_pack_end (bx, ef);
- en = elm_object_part_content_get (ef, "elm.swallow.content");
+ en = elm_object_part_content_get (ef, "elm.icon.entry");
elm_entry_input_panel_imdata_set (en, imdata_ko, strlen (imdata_ko));
ef = _create_ef_layout (parent, _("en_US"), _("English layout"));
elm_box_pack_end (bx, ef);
- en = elm_object_part_content_get (ef, "elm.swallow.content");
+ en = elm_object_part_content_get (ef, "elm.icon.entry");
elm_entry_input_panel_imdata_set (en, imdata_en, strlen (imdata_en));
return bx;
--- /dev/null
+/*
+ * ISF(Input Service Framework)
+ *
+ * ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable.
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Jihoon Kim <jihoon48.kim@samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#include "isf_demo_efl.h"
+#include "isf_language_efl.h"
+
+static Evas_Object *_create_ef_layout (Evas_Object *parent, const char *label, const char *guide_text, Elm_Input_Panel_Lang lang)
+{
+ Evas_Object *ef = create_ef (parent, label, guide_text);
+ Evas_Object *en = elm_object_part_content_get (ef, "elm.icon.entry");
+ elm_entry_input_panel_language_set (en, lang);
+
+ return ef;
+}
+
+static Evas_Object * create_inner_layout (void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ Evas_Object *bx = NULL;
+ Evas_Object *ef = NULL;
+
+ Evas_Object *parent = ad->naviframe;
+
+ bx = elm_box_add (parent);
+ evas_object_size_hint_weight_set (bx, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set (bx, EVAS_HINT_FILL, 0.0);
+ evas_object_show (bx);
+
+ /* Automatic */
+ ef = _create_ef_layout (parent, _("Automatic"), _("click to enter"), ELM_INPUT_PANEL_LANG_AUTOMATIC);
+ elm_box_pack_end (bx, ef);
+
+ /* Alphabet */
+ ef = _create_ef_layout (parent, _("Alphabet"), _("click to enter"), ELM_INPUT_PANEL_LANG_ALPHABET);
+ elm_box_pack_end (bx, ef);
+
+ return bx;
+}
+
+void ise_language_bt (void *data, Evas_Object *obj, void *event_info)
+{
+ Evas_Object *lay_inner = create_inner_layout (data);
+ add_layout_to_naviframe (data, lay_inner, _("Language"));
+}
+
+/*
+vi:ts=4:ai:nowrap:expandtab
+*/
#include "isf_demo_efl.h"
#include "isf_layout_efl.h"
#include <Ecore_X.h>
+#include <utilX.h>
+
+static void _back_key_cb (void *data, Evas_Object *obj, void *event_info)
+{
+ ecore_x_test_fake_key_press(KEY_END);
+}
static void _rotate_cb (void *data, Evas_Object *obj, void *event_info)
{
}
static Eina_Bool
-_prop_change (void *data, int type, void *event)
+_prop_change_cb (void *data, int type, void *event)
{
Ecore_X_Event_Window_Property *ev;
- Ecore_X_Virtual_Keyboard_State vkb_state;
-
ev = (Ecore_X_Event_Window_Property *)event;
if (ev->atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE) {
static void entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
- printf("[%s]\n", __func__);
+ printf ("[%s]\n", __func__);
}
static void entry_preedit_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
- printf("[%s]\n", __func__);
+ printf ("[%s]\n", __func__);
}
-static Evas_Object *_create_ef_layout(Evas_Object *parent, const char *label, const char *guide_text,Elm_Input_Panel_Layout layout)
+static Evas_Object *_create_ef_layout(Evas_Object *parent, const char *label, const char *guide_text, Elm_Input_Panel_Layout layout)
{
Evas_Object *ef = create_ef (parent, label, guide_text);
Ecore_IMF_Context *ic = NULL;
- Evas_Object *en = elm_object_part_content_get (ef, "elm.swallow.content");
+ Evas_Object *en = elm_object_part_content_get (ef, "elm.icon.entry");
elm_entry_input_panel_layout_set (en, layout);
evas_object_event_callback_add (en, EVAS_CALLBACK_KEY_DOWN, _key_down_cb, NULL);
evas_object_event_callback_add (en, EVAS_CALLBACK_KEY_UP, _key_up_cb, NULL);
ef = _create_ef_layout (parent, _("TERMINAL LAYOUT"), _("click to enter TERMINAL"), ELM_INPUT_PANEL_LAYOUT_TERMINAL);
elm_box_pack_end (bx, ef);
+ /* create back key event generation button */
+ Evas_Object *back_key_btn = elm_button_add (parent);
+ elm_object_text_set (back_key_btn, "Generate BACK key");
+ evas_object_smart_callback_add (back_key_btn, "clicked", _back_key_cb, (void *)ad);
+ evas_object_size_hint_weight_set (back_key_btn, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set (back_key_btn, EVAS_HINT_FILL, 0);
+ evas_object_show (back_key_btn);
+ elm_box_pack_end (bx, back_key_btn);
+ elm_object_focus_allow_set(back_key_btn, EINA_FALSE);
+
/* Click to rotate button */
Evas_Object *rotate_btn = elm_button_add (parent);
elm_object_text_set (rotate_btn, "rotate");
evas_object_show (rotate_btn);
elm_box_pack_end (bx, rotate_btn);
- ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, _prop_change, NULL);
+ ecore_event_handler_add (ECORE_X_EVENT_WINDOW_PROPERTY, _prop_change_cb, NULL);
return bx;
}
static Evas_Object *_create_ef_layout (Evas_Object *parent, const char *label, const char *guide_text, Eina_Bool allow)
{
Evas_Object *ef = create_ef (parent, label, guide_text);
- Evas_Object *en = elm_object_part_content_get (ef, "elm.swallow.content");
+ Evas_Object *en = elm_object_part_content_get (ef, "elm.icon.entry");
elm_entry_prediction_allow_set (en, allow);
return ef;
static Evas_Object *_create_ef_layout (Evas_Object *parent, const char *label, const char *guide_text)
{
Evas_Object *ef = create_ef (parent, label, guide_text);
- Evas_Object *en = elm_object_part_content_get (ef, "elm.swallow.content");
+ Evas_Object *en = elm_object_part_content_get (ef, "elm.icon.entry");
evas_object_smart_callback_add (en, "cursor,changed", _cursor_changed_cb, NULL);
return ef;
static Evas_Object *_create_ef_layout (Evas_Object *parent, const char *label, const char *guide_text, Elm_Input_Panel_Return_Key_Type type)
{
Evas_Object *ef = create_ef (parent, label, guide_text);
- Evas_Object *en = elm_object_part_content_get (ef, "elm.swallow.content");
+ Evas_Object *en = elm_object_part_content_get (ef, "elm.icon.entry");
elm_entry_input_panel_return_key_type_set (en, type);
return ef;
@UTILX_CFLAGS@ \
@VCONF_CFLAGS@ \
@DLOG_CFLAGS@\
- @SYSPOPUP_CFLAGS@
+ @NOTIFICATION_CFLAGS@
libisf_imf_module_la_LDFLAGS = -rpath $(moduledir) \
-avoid-version \
@UTILX_LIBS@ \
@VCONF_LIBS@ \
@DLOG_LIBS@ \
- @SYSPOPUP_LIBS@\
+ @NOTIFICATION_LIBS@\
$(top_builddir)/ism/src/libscim@SCIM_EPOCH@.la
#include <utilX.h>
#include <vconf.h>
#include <vconf-keys.h>
-#include <syspopup_caller.h>
+#include <notification.h>
#include "scim_private.h"
#include "scim.h"
# define CODESET "INVALID"
#endif
-const double DOUBLE_SPACE_INTERVAL = 1.0;
+#define ENABLE_BACKKEY 1
using namespace scim;
static void fallback_commit_string_cb (IMEngineInstanceBase *si,
const WideString &str);
+static void _display_input_language (EcoreIMFContextISF *ic);
/* Local variables declaration */
static String _language;
static Ecore_Fd_Handler *_panel_iochannel_err_handler = 0;
static Ecore_X_Window _client_window = 0;
-static Ecore_Event_Handler *_key_handler = 0;
+static Ecore_Event_Handler *_key_down_handler = 0;
+static Ecore_Event_Handler *_key_up_handler = 0;
static bool _on_the_spot = true;
static bool _shared_input_method = false;
}
static Eina_Bool
-key_press_cb (void *data, int type, void *event)
+_key_down_cb (void *data, int type, void *event)
{
SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event;
+ if (!ev || !_focused_ic || !_focused_ic->ctx) return ECORE_CALLBACK_RENEW;
- if (!_focused_ic || !_focused_ic->ctx) return ECORE_CALLBACK_RENEW;
-
- if (!strcmp (ev->keyname, KEY_END)) {
+ if (!strcmp (ev->keyname, KEY_END) &&
+ ecore_imf_context_input_panel_state_get(_focused_ic->ctx) != ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
LOGD ("END key is pressed\n");
-#ifdef ENABLE_BACKKEY
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool
+_key_up_cb (void *data, int type, void *event)
+{
+ SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+
+ Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event;
+ if (!ev || !_focused_ic || !_focused_ic->ctx) return ECORE_CALLBACK_RENEW;
+
+ if (!strcmp (ev->keyname, KEY_END) &&
+ ecore_imf_context_input_panel_state_get(_focused_ic->ctx) != ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
+ LOGD ("END key is released\n");
isf_imf_context_input_panel_instant_hide (_focused_ic->ctx);
return ECORE_CALLBACK_CANCEL;
-#endif
}
return ECORE_CALLBACK_RENEW;
{
SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
- if (!_key_handler) {
- _key_handler = ecore_event_handler_add (ECORE_EVENT_KEY_DOWN, key_press_cb, NULL);
- }
+#ifdef ENABLE_BACKKEY
+ if (!_key_down_handler)
+ _key_down_handler = ecore_event_handler_add (ECORE_EVENT_KEY_DOWN, _key_down_cb, NULL);
+
+ if (!_key_up_handler)
+ _key_up_handler = ecore_event_handler_add (ECORE_EVENT_KEY_UP, _key_up_cb, NULL);
+#endif
return EXIT_SUCCESS;
}
{
SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
- if (_key_handler) {
- ecore_event_handler_del (_key_handler);
- _key_handler = NULL;
+ if (_key_down_handler) {
+ ecore_event_handler_del (_key_down_handler);
+ _key_down_handler = NULL;
+ }
+
+ if (_key_up_handler) {
+ ecore_event_handler_del (_key_up_handler);
+ _key_up_handler = NULL;
}
return EXIT_SUCCESS;
isf_imf_context_focus_out (Ecore_IMF_Context *ctx)
{
EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get (ctx);
+ Eina_Bool lock_scr;
if (!context_scim) return;
_panel_client.send ();
}
- _panel_client.prepare (context_scim->id);
+ lock_scr = check_focus_out_by_lockscreen (ctx);
+
+ if (!lock_scr)
+ _panel_client.prepare (context_scim->id);
+
context_scim->impl->si->focus_out ();
context_scim->impl->si->reset ();
-// if (context_scim->impl->shared_si) context_scim->impl->si->reset ();
- _panel_client.focus_out (context_scim->id);
- _panel_client.send ();
+
+ if (!lock_scr) {
+// if (context_scim->impl->shared_si) context_scim->impl->si->reset ();
+ _panel_client.focus_out (context_scim->id);
+ _panel_client.send ();
+ }
_focused_ic = 0;
}
}
LOGD ("[Mouse-up event] ctx : %p\n", ctx);
if (ic == _focused_ic)
ecore_imf_context_input_panel_show (ctx);
+ else
+ LOGW ("Can't show IME because there is no focus. ctx : %p\n", ctx);
}
return EINA_FALSE;
} else {
turn_on_ic (ic);
else
turn_off_ic (ic);
+
+ _display_input_language (ic);
ret = true;
} else if (hotkey_action == SCIM_FRONTEND_HOTKEY_ON) {
- if (!ic->impl->is_on)
+ if (!ic->impl->is_on) {
turn_on_ic (ic);
+ _display_input_language (ic);
+ }
ret = true;
} else if (hotkey_action == SCIM_FRONTEND_HOTKEY_OFF) {
- if (ic->impl->is_on)
+ if (ic->impl->is_on) {
turn_off_ic (ic);
+ _display_input_language (ic);
+ }
ret = true;
} else if (hotkey_action == SCIM_FRONTEND_HOTKEY_NEXT_FACTORY) {
open_next_factory (ic);
}
//Record the IC on/off status
- if (_shared_input_method)
+ if (_shared_input_method) {
_config->write (String (SCIM_CONFIG_FRONTEND_IM_OPENED_BY_DEFAULT), true);
+ _config->flush ();
+ }
if (ic->impl->use_preedit && ic->impl->preedit_string.length ()) {
ecore_imf_context_preedit_start_event_add (ic->ctx);
}
//Record the IC on/off status
- if (_shared_input_method)
+ if (_shared_input_method) {
_config->write (String (SCIM_CONFIG_FRONTEND_IM_OPENED_BY_DEFAULT), false);
+ _config->flush ();
+ }
if (ic->impl->use_preedit && ic->impl->preedit_string.length ()) {
ecore_imf_context_preedit_changed_event_add (ic->ctx);
if (_ptext == NULL)
return;
- int ret = -1;
- bundle *b = bundle_create ();
- do {
- ret = bundle_add (b, "0", "info"); // "0" means tickernoti style
- if (0 != ret)
- break;
- ret = bundle_add (b, "1", _ptext);
- if (0 != ret)
- break;
- ret = bundle_add (b, "2", "0"); // "2" means orientation of tickernoti
- if (0 != ret)
- break;
- ret = bundle_add (b, "3", "2"); // "3" means timeout(second) of tickernoti
- if (0 != ret)
- break;
- ret = syspopup_launch ((char *)"tickernoti-syspopup", b);
+ notification_status_message_post(_ptext);
+}
+
+static void
+_display_input_language (EcoreIMFContextISF *ic)
+{
+ IMEngineFactoryPointer sf;
+
+ if (ic && ic->impl) {
+ if (ic->impl->is_on) {
+ sf = _backend->get_factory (ic->impl->si->get_factory_uuid ());
+ _popup_message (scim_get_language_name (sf->get_language ()).c_str ());
+ }
+ else {
+ _popup_message (scim_get_language_name ("en").c_str());
+ }
}
- while (0);
- bundle_free (b);
}
static void
}
} else {
std::cerr << "open_specific_factory () is failed!!!!!!\n";
+ LOGE ("open_specific_factory () is failed. ic : %x uuid : %s", ic->id, uuid.c_str());
+
// turn_off_ic comment out panel_req_update_factory_info ()
//turn_off_ic (ic);
if (ic && ic->impl->is_on) {
}
//Record the IC on/off status
- if (_shared_input_method)
+ if (_shared_input_method) {
_config->write (String (SCIM_CONFIG_FRONTEND_IM_OPENED_BY_DEFAULT), false);
+ _config->flush ();
+ }
if (ic->impl->use_preedit && ic->impl->preedit_string.length ()) {
ecore_imf_context_preedit_changed_event_add (ic->ctx);
SCIM_DEBUG_FRONTEND(2) << "Surrounding text: " << surrounding <<"\n";
SCIM_DEBUG_FRONTEND(2) << "Cursor Index : " << cursor_index <<"\n";
WideString before = utf8_mbstowcs (String (surrounding));
- if (cursor_index > before.length())
+ if (cursor_index > (int)before.length())
return false;
WideString after = before;
before = before.substr (0, cursor_index);
#define LOG_TAG "immodule"
+const double DOUBLE_SPACE_INTERVAL = 1.0;
+const double HIDE_TIMER_INTERVAL = 0.05;
+
typedef struct _EcoreIMFContextISF EcoreIMFContextISF;
typedef struct _EcoreIMFContextISFImpl EcoreIMFContextISFImpl;
return 0;
}
+EAPI int _isf_imf_context_input_panel_send_will_show_ack (void)
+{
+ connect_panel ();
+ _imcontrol_client.prepare ();
+ _imcontrol_client.send_will_show_ack ();
+ _imcontrol_client.send ();
+ return 0;
+}
+
+EAPI int _isf_imf_context_input_panel_send_will_hide_ack (void)
+{
+ connect_panel ();
+ _imcontrol_client.prepare ();
+ _imcontrol_client.send_will_hide_ack ();
+ _imcontrol_client.send ();
+ return 0;
+}
+
/*
vi:ts=4:expandtab:nowrap
*/
int _isf_imf_context_control_focus_in (void);
int _isf_imf_context_control_focus_out (void);
+ int _isf_imf_context_input_panel_send_will_show_ack (void);
+ int _isf_imf_context_input_panel_send_will_hide_ack (void);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
using namespace scim;
-typedef struct {
- void (*func)(void *data, Ecore_IMF_Context *ctx, int value);
- void *data;
- Ecore_IMF_Input_Panel_Event type;
- Ecore_IMF_Context *imf_context;
-} EventCallbackNode;
-
/* IM control related variables */
static Ise_Context iseContext;
static bool IfInitContext = false;
-static Eina_List *EventCallbackList = NULL;
static Ecore_IMF_Context *show_req_ic = NULL;
static Ecore_IMF_Context *hide_req_ic = NULL;
static Ecore_Event_Handler *_prop_change_handler = NULL;
static Ecore_Timer *hide_timer = NULL;
static Ecore_IMF_Input_Panel_State input_panel_state = ECORE_IMF_INPUT_PANEL_STATE_HIDE;
static int hide_context_id = -1;
+static Evas *active_context_canvas = NULL;
+static Ecore_X_Window active_context_window = -1;
Ecore_IMF_Context *input_panel_ctx = NULL;
+static Ecore_Event_Handler *_win_focus_out_handler = NULL;
+static Eina_Bool conformant_reset_done = EINA_FALSE;
+static Eina_Bool received_will_hide_event = EINA_FALSE;
+
+static void _send_input_panel_hide_request ();
+
+static void _render_post_cb (void *data, Evas *e, void *event_info)
+{
+ evas_event_callback_del_full (e, EVAS_CALLBACK_RENDER_POST, _render_post_cb, NULL);
+ conformant_reset_done = EINA_TRUE;
+ isf_imf_context_input_panel_send_will_hide_ack ();
+}
static Eina_Bool _clear_timer ()
{
return EINA_FALSE;
}
+static Eina_Bool _conformant_get ()
+{
+ return ecore_x_e_illume_conformant_get (active_context_window);
+}
+
static Eina_Bool _prop_change (void *data, int ev_type, void *ev)
{
Ecore_X_Event_Window_Property *event = (Ecore_X_Event_Window_Property *)ev;
unsigned int val = 0;
+ int sx = -1, sy = -1, sw = -1, sh = -1;
- if (event->win != _rootwin) return ECORE_CALLBACK_PASS_ON;
- if (event->atom != prop_x_ext_keyboard_exist) return ECORE_CALLBACK_PASS_ON;
+ if (event->atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE) {
+ Ecore_X_Virtual_Keyboard_State state = ecore_x_e_virtual_keyboard_state_get (event->win);
- if (!ecore_x_window_prop_card32_get (event->win, prop_x_ext_keyboard_exist, &val, 1) > 0)
- return ECORE_CALLBACK_PASS_ON;
+ if (!ecore_x_e_illume_keyboard_geometry_get (event->win, &sx, &sy, &sw, &sh))
+ sx = sy = sw = sh = 0;
- if (val != 0) {
- if (show_req_ic)
- ecore_imf_context_input_panel_hide (show_req_ic);
+ if (state == ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) {
+ if (active_context_canvas && _conformant_get ()) {
+ evas_event_callback_add (active_context_canvas, EVAS_CALLBACK_RENDER_POST, _render_post_cb, NULL);
+ }
+
+ LOGD ("[ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF] geometry x : %d, y : %d, w : %d, h : %d\n", sx, sy, sw, sh);
+ }
+ else if (state == ECORE_X_VIRTUAL_KEYBOARD_STATE_ON) {
+ conformant_reset_done = EINA_FALSE;
+ LOGD ("[ECORE_X_VIRTUAL_KEYBOARD_STATE_ON] geometry x : %d, y : %d, w : %d, h : %d\n", sx, sy, sw, sh);
+ }
}
+ else {
+ if (event->win != _rootwin) return ECORE_CALLBACK_PASS_ON;
+ if (event->atom != prop_x_ext_keyboard_exist) return ECORE_CALLBACK_PASS_ON;
- hw_kbd_num = val;
- LOGD ("The number of connected H/W keyboard : %d\n", hw_kbd_num);
+ if (!ecore_x_window_prop_card32_get (event->win, prop_x_ext_keyboard_exist, &val, 1) > 0)
+ return ECORE_CALLBACK_PASS_ON;
+
+ if (val != 0) {
+ if (show_req_ic)
+ ecore_imf_context_input_panel_hide (show_req_ic);
+ }
+
+ hw_kbd_num = val;
+ LOGD ("The number of connected H/W keyboard : %d\n", hw_kbd_num);
+ }
return ECORE_CALLBACK_PASS_ON;
}
rootwin_xid = ecore_x_window_root_first_get ();
else
rootwin_xid = ecore_x_window_root_get (xid);
+
+ active_context_window = xid;
+
Ecore_X_Atom isf_active_window_atom = ecore_x_atom_get ("_ISF_ACTIVE_WINDOW");
ecore_x_window_prop_property_set (rootwin_xid, isf_active_window_atom, ((Ecore_X_Atom) 33), 32, &xid, 1);
ecore_x_flush ();
static void _event_callback_call (Ecore_IMF_Input_Panel_Event type, int value)
{
- void *list_data = NULL;
- EventCallbackNode *fn = NULL;
- Eina_List *l = NULL;
Ecore_IMF_Context *using_ic = NULL;
if (show_req_ic)
}
}
- EINA_LIST_FOREACH(EventCallbackList, l, list_data) {
- fn = (EventCallbackNode *)list_data;
-
- if ((fn) && (fn->imf_context == using_ic) &&
- (fn->type == type) && (fn->func)) {
- fn->func (fn->data, fn->imf_context, value);
- if (type == ECORE_IMF_INPUT_PANEL_STATE_EVENT) {
- switch (value)
- {
- case ECORE_IMF_INPUT_PANEL_STATE_HIDE:
- LOGD ("[input panel has been hidden] ctx : %p\n", fn->imf_context);
- hide_req_ic = NULL;
- break;
- case ECORE_IMF_INPUT_PANEL_STATE_SHOW:
- LOGD ("[input panel has been shown] ctx : %p\n", fn->imf_context);
- break;
- case ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW:
- LOGD ("[input panel will be shown] ctx : %p\n", fn->imf_context);
- break;
- }
+ switch (type) {
+ case ECORE_IMF_INPUT_PANEL_STATE_EVENT:
+ switch (value) {
+ case ECORE_IMF_INPUT_PANEL_STATE_HIDE:
+ LOGD ("[input panel has been hidden] ctx : %p\n", using_ic);
+ if (hide_req_ic == show_req_ic)
+ show_req_ic = NULL;
+
+ hide_req_ic = NULL;
+ break;
+ case ECORE_IMF_INPUT_PANEL_STATE_SHOW:
+ LOGD ("[input panel has been shown] ctx : %p\n", using_ic);
+ break;
+ case ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW:
+ LOGD ("[input panel will be shown] ctx : %p\n", using_ic);
+ break;
}
- }
+ break;
+ case ECORE_IMF_INPUT_PANEL_LANGUAGE_EVENT:
+ LOGD ("[language is changed] ctx : %p\n", using_ic);
+ break;
+ case ECORE_IMF_INPUT_PANEL_SHIFT_MODE_EVENT:
+ LOGD ("[shift mode is changed] ctx : %p\n", using_ic);
+ break;
+ case ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT:
+ LOGD ("[input panel geometry is changed] ctx : %p\n", using_ic);
+ break;
+ case ECORE_IMF_CANDIDATE_PANEL_STATE_EVENT:
+ LOGD ("[candidate state is changed] ctx : %p\n", using_ic);
+ break;
+ case ECORE_IMF_CANDIDATE_PANEL_GEOMETRY_EVENT:
+ LOGD ("[candidate geometry is changed] ctx : %p\n", using_ic);
+ break;
+ default:
+ break;
+ }
+
+ if (using_ic)
+ ecore_imf_context_input_panel_event_callback_call (using_ic, type, value);
+
+ if (type == ECORE_IMF_INPUT_PANEL_STATE_EVENT &&
+ value == ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW) {
+ isf_imf_context_input_panel_send_will_show_ack ();
}
}
return context_scim->id;
}
+static void _save_hide_context_info (Ecore_IMF_Context *ctx)
+{
+ hide_context_id = _get_context_id (ctx);
+ active_context_window = _client_window_id_get (ctx);
+ active_context_canvas = (Evas *)ecore_imf_context_client_canvas_get (ctx);
+}
+
+static void _win_focus_out_handler_del ()
+{
+ if (_win_focus_out_handler) {
+ ecore_event_handler_del (_win_focus_out_handler);
+ _win_focus_out_handler = NULL;
+ }
+}
+
static void _send_input_panel_hide_request ()
{
if (hide_context_id < 0) return;
+ _win_focus_out_handler_del ();
+
_isf_imf_context_input_panel_hide (get_panel_client_id (), hide_context_id);
hide_context_id = -1;
}
static void _input_panel_hide_timer_start (void *data)
{
Ecore_IMF_Context *ctx = (Ecore_IMF_Context *)data;
- hide_context_id = _get_context_id (ctx);
+ _save_hide_context_info (ctx);
if (!hide_timer)
- hide_timer = ecore_timer_add (0.05, _hide_timer_handler, data);
+ hide_timer = ecore_timer_add (HIDE_TIMER_INTERVAL, _hide_timer_handler, data);
}
static void _input_panel_hide (Ecore_IMF_Context *ctx, Eina_Bool instant)
_isf_imf_context_init ();
}
- if (input_panel_state == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
- hide_req_ic = ctx;
- }
+ if (check_focus_out_by_lockscreen (ctx))
+ return;
if (instant) {
- _clear_timer ();
-
- hide_context_id = _get_context_id (ctx);
- _send_input_panel_hide_request ();
+ if (input_panel_state != ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
+ hide_req_ic = ctx;
+ _clear_timer ();
+ _save_hide_context_info (ctx);
+ _send_input_panel_hide_request ();
+ }
} else {
+ hide_req_ic = ctx;
_input_panel_hide_timer_start (ctx);
}
}
return EINA_FALSE;
}
+static Eina_Bool _client_window_focus_out_cb (void *data, int ev_type, void *ev)
+{
+ Ecore_X_Event_Window_Focus_Out *e = (Ecore_X_Event_Window_Focus_Out *)ev;
+ Ecore_IMF_Context *ctx = (Ecore_IMF_Context *)data;
+
+ if (!ctx || !e) return ECORE_CALLBACK_PASS_ON;
+ if (e->win != (Ecore_X_Window)ecore_imf_context_client_window_get (ctx)) return ECORE_CALLBACK_PASS_ON;
+
+ isf_imf_context_input_panel_instant_hide (ctx);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
EAPI void input_panel_event_callback_call (Ecore_IMF_Input_Panel_Event type, int value)
{
_event_callback_call (type, value);
}
+EAPI Eina_Bool check_focus_out_by_lockscreen (Ecore_IMF_Context *ctx)
+{
+ Ecore_X_Window focus_win = ecore_x_window_focus_get ();
+ Eina_Bool ret = EINA_FALSE;
+ char *class_name = NULL;
+ ecore_x_icccm_name_class_get (focus_win, NULL, &class_name);
+
+ if (class_name && strncmp (class_name, "LOCK_SCREEN", 11) == 0)
+ if (_client_window_id_get (ctx) != focus_win)
+ ret = EINA_TRUE;
+
+ if (class_name)
+ free (class_name);
+
+ return ret;
+}
+
EAPI void isf_imf_context_control_panel_show (Ecore_IMF_Context *ctx)
{
if (IfInitContext == false) {
prop_x_ext_keyboard_exist = ecore_x_atom_get (PROP_X_EXT_KEYBOARD_EXIST);
if (!ecore_x_window_prop_card32_get (_rootwin, prop_x_ext_keyboard_exist, &hw_kbd_num, 1)) {
- printf ("Error! cannot get hw_kbd_num\n");
+ LOGW ("Error! cannot get hw_kbd_num\n");
return;
}
_prop_change_handler = NULL;
}
+ _win_focus_out_handler_del ();
+
if (hide_timer) {
if (input_panel_state != ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
Ecore_IMF_Context *using_ic = NULL;
_isf_imf_context_init ();
}
+ /* for X based application not to use evas */
+ if (ecore_imf_context_client_canvas_get (ctx) == NULL) {
+ _win_focus_out_handler_del ();
+
+ _win_focus_out_handler = ecore_event_handler_add (ECORE_X_EVENT_WINDOW_FOCUS_OUT, _client_window_focus_out_cb, ctx);
+ }
+
/* set password mode */
iseContext.password_mode = !!(ecore_imf_context_input_mode_get (ctx) & ECORE_IMF_INPUT_MODE_INVISIBLE);
iseContext.prediction_allow = EINA_FALSE;
isf_imf_context_prediction_allow_set (ctx, iseContext.prediction_allow);
+
+ active_context_canvas = (Evas *)ecore_imf_context_client_canvas_get (ctx);
+
/* Set the current XID of the active window into the root window property */
_save_current_xid (ctx);
if (hw_kbd_num != 0) {
LOGD ("H/W keyboard is existed.\n");
- printf ("H/W keyboard is existed.\n");
return;
}
return;
memcpy (packet, (void *)&iseContext, sizeof (iseContext));
-
memcpy ((void *)((unsigned int)packet + sizeof (iseContext)), (void *)imdata, iseContext.imdata_size);
int context_id = _get_context_id (ctx);
}
/**
- * Get ISE's position and size, in screen coodinates of the ISE rectangle not the client area,
+ * Get ISE's position and size, in screen coordinates of the ISE rectangle not the client area,
* the represents the size and location of the ISE
*
* @param[in] ctx a #Ecore_IMF_Context
}
/**
- * Sets up the layout infomation of active ISE
+ * Sets up the layout information of active ISE
*
* @param[in] ctx a #Ecore_IMF_Context
* @param[in] layout sets a layout ID to be shown. The layout ID will define by the configuration of selected ISE.
return input_panel_state;
}
-EAPI void isf_imf_context_input_panel_event_callback_add (Ecore_IMF_Context *ctx,
- Ecore_IMF_Input_Panel_Event type,
- void (*func) (void *data, Ecore_IMF_Context *ctx, int value),
- void *data)
-{
- EventCallbackNode *fn = (EventCallbackNode *)calloc (1, sizeof (EventCallbackNode));
- if (!fn)
- return;
-
- LOGD ("ctx : %p, type : %d, func : %p\n", ctx, type, func);
-
- fn->func = func;
- fn->data = data;
- fn->type = type;
- fn->imf_context = ctx;
-
- EventCallbackList = eina_list_append (EventCallbackList, fn);
-}
-
-EAPI void isf_imf_context_input_panel_event_callback_del (Ecore_IMF_Context *ctx,
- Ecore_IMF_Input_Panel_Event type,
- void (*func) (void *data, Ecore_IMF_Context *ctx, int value))
-{
- Eina_List *l = NULL;
- EventCallbackNode *fn = NULL;
-
- LOGD ("ctx : %p, type : %d, func : %p\n", ctx, type, func);
-
- for (l = EventCallbackList; l;) {
- fn = (EventCallbackNode *)l->data;
-
- if ((fn) && (fn->func == func) && (fn->type == type) && (fn->imf_context == ctx)) {
- EventCallbackList = eina_list_remove (EventCallbackList, fn);
- free (fn);
- break;
- }
- l = l->next;
- }
-}
-
EAPI void isf_imf_context_input_panel_event_callback_clear (Ecore_IMF_Context *ctx)
{
- Eina_List *l;
- EventCallbackNode *fn;
+ ecore_imf_context_input_panel_event_callback_clear (ctx);
- LOGD ("ctx : %p\n", ctx);
-
- for (l = EventCallbackList; l;) {
- fn = (EventCallbackNode *)l->data;
-
- if ((fn) && (fn->imf_context == ctx)) {
- EventCallbackList = eina_list_remove (EventCallbackList, fn);
- free (fn);
- }
- l = l->next;
- }
+ if (hide_req_ic == ctx)
+ hide_req_ic = NULL;
}
/**
- * Get candidate window position and size, in screen coodinates of the candidate rectangle not the client area,
+ * Get candidate window position and size, in screen coordinates of the candidate rectangle not the client area,
* the represents the size and location of the candidate window
*
* @param[in] ctx a #Ecore_IMF_Context
_isf_imf_context_control_focus_out ();
}
+EAPI void isf_imf_context_input_panel_send_will_show_ack ()
+{
+ if (IfInitContext == false) {
+ _isf_imf_context_init ();
+ }
+
+ _isf_imf_context_input_panel_send_will_show_ack ();
+}
+
+EAPI void isf_imf_context_input_panel_send_will_hide_ack ()
+{
+ if (IfInitContext == false) {
+ _isf_imf_context_init ();
+ }
+
+ if (_conformant_get()) {
+ if (conformant_reset_done && received_will_hide_event) {
+ _isf_imf_context_input_panel_send_will_hide_ack ();
+ conformant_reset_done = EINA_FALSE;
+ received_will_hide_event = EINA_FALSE;
+ }
+ }
+ else {
+ _isf_imf_context_input_panel_send_will_hide_ack ();
+ }
+}
+
/**
* process command message, ISM_TRANS_CMD_ISE_PANEL_SHOWED of ecore_ise_process_event()
*/
/* Notify that ISE status has changed */
_event_callback_call (ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_SHOW);
+ received_will_hide_event = EINA_FALSE;
+
return true;
}
/* Notify that ISE status has changed */
_event_callback_call (ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_HIDE);
+ received_will_hide_event = EINA_TRUE;
+ isf_imf_context_input_panel_send_will_hide_ack ();
+
return true;
}
return false;
if (type == (uint32)ECORE_IMF_INPUT_PANEL_STATE_EVENT) {
- switch(value)
- {
+ switch (value) {
case ECORE_IMF_INPUT_PANEL_STATE_HIDE:
_process_ise_panel_hided ();
return true;
case ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW:
input_panel_state = ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW;
break;
+ case SCIM_INPUT_PANEL_STATE_WILL_HIDE:
+ break;
default:
break;
}
_event_callback_call ((Ecore_IMF_Input_Panel_Event)type, (int)value);
+ if (type == ECORE_IMF_INPUT_PANEL_STATE_EVENT &&
+ value == ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW) {
+ isf_imf_context_input_panel_send_will_show_ack ();
+ }
+
return true;
}
extern "C"
{
#endif /* __cplusplus */
+ Eina_Bool check_focus_out_by_lockscreen (Ecore_IMF_Context *ctx);
+ void input_panel_event_callback_call (Ecore_IMF_Input_Panel_Event type, int value);
/* non UI related works */
void isf_imf_input_panel_init ();
Ecore_IMF_Input_Panel_Layout isf_imf_context_input_panel_layout_get (Ecore_IMF_Context *ctx);
Ecore_IMF_Input_Panel_State isf_imf_context_input_panel_state_get (Ecore_IMF_Context *ctx);
void isf_imf_context_input_panel_caps_mode_set (Ecore_IMF_Context *ctx, unsigned int mode);
- void isf_imf_context_input_panel_event_callback_add (Ecore_IMF_Context *ctx, Ecore_IMF_Input_Panel_Event type, void (*func) (void *data, Ecore_IMF_Context *ctx, int value), void *data);
- void isf_imf_context_input_panel_event_callback_del (Ecore_IMF_Context *ctx, Ecore_IMF_Input_Panel_Event type, void (*func) (void *data, Ecore_IMF_Context *ctx, int value));
void isf_imf_context_input_panel_event_callback_clear (Ecore_IMF_Context *ctx);
void isf_imf_context_input_panel_return_key_type_set (Ecore_IMF_Context *ctx, Ecore_IMF_Input_Panel_Return_Key_Type type);
Eina_Bool isf_imf_context_input_panel_return_key_disabled_get (Ecore_IMF_Context *ctx);
void isf_imf_context_input_panel_caps_lock_mode_set (Ecore_IMF_Context *ctx, Eina_Bool mode);
void isf_imf_context_candidate_window_geometry_get (Ecore_IMF_Context *ctx, int *x, int *y, int *w, int *h);
- void input_panel_event_callback_call (Ecore_IMF_Input_Panel_Event type, int value);
void isf_imf_context_control_focus_in (Ecore_IMF_Context *ctx);
void isf_imf_context_control_focus_out (Ecore_IMF_Context *ctx);
+ void isf_imf_context_input_panel_send_will_show_ack ();
+ void isf_imf_context_input_panel_send_will_hide_ack ();
#ifdef __cplusplus
}
isf_imf_context_input_panel_caps_lock_mode_set,
isf_imf_context_input_panel_geometry_get,
isf_imf_context_input_panel_state_get,
- isf_imf_context_input_panel_event_callback_add,
- isf_imf_context_input_panel_event_callback_del,
+ NULL, /* input_panel_event_callback_add */
+ NULL, /* input_panel_event_callback_del */
isf_imf_context_input_panel_language_locale_get,
isf_imf_context_candidate_window_geometry_get
};
isf_panel_efl_SOURCES = isf_panel_efl.cpp \
isf_panel_utility.cpp
-isf_panel_efl_CXXFLAGS = @EFL_CFLAGS@ @VCONF_CFLAGS@ @PRIVILEGE_CONTROL_CFLAGS@
+isf_panel_efl_CXXFLAGS = @EFL_CFLAGS@ @VCONF_CFLAGS@ @PRIVILEGE_CONTROL_CFLAGS@ @DLOG_CFLAGS@
isf_panel_efl_LDFLAGS = @EFL_LIBS@ @LTLIBINTL@ -rpath $(libdir) \
@VCONF_LIBS@ \
@X11_LIBS@ \
- @PRIVILEGE_CONTROL_LIBS@
+ @PRIVILEGE_CONTROL_LIBS@ \
+ @DLOG_LIBS@
isf_panel_efl_LDADD = $(top_builddir)/ism/src/libscim@SCIM_EPOCH@.la
#define Uses_SCIM_IMENGINE_MODULE
#define WAIT_WM
+#define VCONFKEY_PM_SIP_STATUS "memory/pm/sip_status"
+
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/time.h>
#include <Ecore_File.h>
#include <Elementary.h>
#include <X11/Xlib.h>
+#include <X11/Xatom.h>
#include <malloc.h>
#include "scim_private.h"
#include "scim.h"
#endif
#include <privilege-control.h>
#include "isf_panel_utility.h"
+#include <dlog.h>
using namespace scim;
#define ISE_DEFAULT_HEIGHT_PORTRAIT 444
#define ISE_DEFAULT_HEIGHT_LANDSCAPE 316
-#define ISF_READY_FILE "/tmp/hibernation/isf_ready"
+#define ISF_SYSTEM_WM_READY_FILE "/tmp/.wm_ready"
+#define ISF_SYSTEM_APPSERVICE_READY_VCONF "memory/appservice/status"
+#define ISF_SYSTEM_APPSERVICE_READY_STATE 2
+#define ISF_SYSTEM_WAIT_COUNT 150
+#define ISF_SYSTEM_WAIT_DELAY 100 * 1000
+#define LOG_TAG "ISF_PANEL_EFL"
/////////////////////////////////////////////////////////////////////////////
// Declaration of external variables.
extern std::vector<uint32> _options;
extern std::vector<TOOLBAR_MODE_T> _modes;
-extern std::vector<String> _load_ise_list;
-
extern CommonLookupTable g_isf_candidate_table;
// Declaration of internal functions.
/////////////////////////////////////////////////////////////////////////////
static Evas_Object *efl_create_window (const char *strWinName, const char *strEffect);
-static void efl_set_transient_for_app_window (Evas_Object *win_obj);
-static int efl_get_angle_for_root_window (Evas_Object *win_obj);
+static void efl_set_transient_for_app_window (Ecore_X_Window window);
+static int efl_get_angle_for_app_window (void);
static int ui_candidate_get_valid_height (void);
static void ui_candidate_hide (bool bForce, bool bSetVirtualKbd = true);
static void ui_create_candidate_window (void);
static void update_table (int table_type, const LookupTable &table);
+static bool check_wm_ready ();
+static bool check_system_ready ();
+static void launch_default_soft_keyboard (keynode_t *key = NULL, void* data = NULL);
+
/* PanelAgent related functions */
static bool initialize_panel_agent (const String &config, const String &display, bool resident);
static void slot_close_connection (int fd);
static void slot_exit (void);
+static void slot_register_helper_properties (int id, const PropertyList &props);
+static void slot_show_ise (void);
+
+static void slot_will_show_ack (void);
+static void slot_will_hide_ack (void);
+
static Eina_Bool panel_agent_handler (void *data, Ecore_Fd_Handler *fd_handler);
+static Eina_Bool efl_create_control_window (void);
+static Ecore_X_Window efl_get_app_window (void);
/////////////////////////////////////////////////////////////////////////////
// Declaration of internal variables.
static Evas_Object *_more_btn = 0;
static Evas_Object *_close_btn = 0;
static bool _candidate_window_show = false;
+static bool _candidate_window_pending = false;
+
static int _candidate_x = 0;
static int _candidate_y = 0;
static int _click_down_pos [2] = {0, 0};
static int _click_up_pos [2] = {0, 0};
static bool _is_click = true;
-
+static bool _appsvc_callback_regist = false;
static String _initial_ise_uuid = String ("");
static ConfigPointer _config;
static PanelAgent *_panel_agent = 0;
static Ecore_Timer *_longpress_timer = NULL;
static Ecore_Timer *_destroy_timer = NULL;
+static Ecore_X_Window _ise_window = 0;
+static Ecore_X_Window _app_window = 0;
+static Ecore_X_Window _control_window = 0;
+
+static Ecore_File_Monitor *_helper_ise_em = NULL;
+static Ecore_File_Monitor *_keyboard_ise_em = NULL;
+
+
+
/////////////////////////////////////////////////////////////////////////////
// Implementation of internal functions.
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
- info.width = _ise_width;
- info.height = _ise_height;
-
int win_w = _screen_width, win_h = _screen_height;
- int angle = efl_get_angle_for_root_window (_candidate_window);
+ int angle = _candidate_angle;
if (angle == 90 || angle == 270) {
win_w = _screen_height;
win_h = _screen_width;
}
- if (win_w != (int)info.width)
- _panel_agent->get_current_ise_geometry (info);
+ /* READ ISE's SIZE HINT HERE */
+ int pos_x, pos_y, width, height;
+ ecore_x_e_window_rotation_geometry_get (_ise_window, _candidate_angle,
+ &pos_x, &pos_y, &width, &height);
+ info.pos_x = pos_x;
+ info.pos_y = pos_y;
- if ((int)info.width > win_w) {
- win_w = _screen_height;
- win_h = _screen_width;
+ if (angle == 90 || angle == 270) {
+ info.width = height;
+ info.height = width;
+ } else {
+ info.width = width;
+ info.height = height;
}
+ LOGD ("Geometry : %d %d %d %d\n", info.pos_x, info.pos_y, info.width, info.height);
+
info.pos_x = (int)info.width > win_w ? 0 : (win_w - info.width) / 2;
- if (kbd_state == KEYBOARD_STATE_OFF)
+ if (kbd_state == KEYBOARD_STATE_OFF) {
info.pos_y = win_h;
- else
+ info.width = 0;
+ info.height = 0;
+ } else {
info.pos_y = win_h - info.height;
+ }
+ _ise_width = info.width;
+ _ise_height = info.height;
}
/**
*
* @param kbd_state The keyboard state.
*/
-static void set_keyboard_geometry_atom_info (VIRTUAL_KEYBOARD_STATE kbd_state)
+static void set_keyboard_geometry_atom_info (Ecore_X_Window window, VIRTUAL_KEYBOARD_STATE kbd_state)
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
if (kbd_state == KEYBOARD_STATE_UNKNOWN)
return;
- Ecore_X_Window* zone_lists;
- if (ecore_x_window_prop_window_list_get (ecore_x_window_root_first_get (),
- ECORE_X_ATOM_E_ILLUME_ZONE_LIST, &zone_lists) > 0) {
-
- struct rectinfo info = {0, 0, 0, 0};
- if (_ise_width == 0 && _ise_height == 0) {
- info.pos_x = 0;
+ struct rectinfo info = {0, 0, 0, 0};
+ get_ise_geometry (info, kbd_state);
+ if (_ise_width == 0 && _ise_height == 0) {
+ info.pos_x = 0;
+ if (_candidate_window && evas_object_visible_get (_candidate_window)) {
+ info.width = _candidate_width;
+ info.height = _candidate_height;
+ }
+ int angle = efl_get_angle_for_app_window ();
+ if (angle == 90 || angle == 270)
+ info.pos_y = _screen_width - info.height;
+ else
+ info.pos_y = _screen_height - info.height;
+ } else {
+ if (_candidate_mode == FIXED_CANDIDATE_WINDOW) {
if (_candidate_window && evas_object_visible_get (_candidate_window)) {
- info.width = _candidate_width;
- info.height = _candidate_height;
- }
- int angle = efl_get_angle_for_root_window (_candidate_window);
- if (angle == 90 || angle == 270)
- info.pos_y = _screen_width - info.height;
- else
- info.pos_y = _screen_height - info.height;
- } else {
- get_ise_geometry (info, kbd_state);
- if (_candidate_mode == FIXED_CANDIDATE_WINDOW) {
- if (_candidate_window && evas_object_visible_get (_candidate_window)) {
- _candidate_valid_height = ui_candidate_get_valid_height ();
- if ((_candidate_height - _candidate_valid_height) > _ise_height) {
- _candidate_valid_height = _candidate_height;
- info.pos_y = info.pos_y + info.height - _candidate_height;
- info.height = _candidate_height;
- } else {
- info.pos_y -= _candidate_valid_height;
- info.height += _candidate_valid_height;
- }
+ _candidate_valid_height = ui_candidate_get_valid_height ();
+ if ((_candidate_height - _candidate_valid_height) > _ise_height) {
+ _candidate_valid_height = _candidate_height;
+ info.pos_y = info.pos_y + info.height - _candidate_height;
+ info.height = _candidate_height;
+ } else {
+ info.pos_y -= _candidate_valid_height;
+ info.height += _candidate_valid_height;
}
}
}
- if (kbd_state == KEYBOARD_STATE_ON) {
- ecore_x_e_virtual_keyboard_state_set (zone_lists[0], ECORE_X_VIRTUAL_KEYBOARD_STATE_ON);
- ecore_x_e_illume_keyboard_geometry_set (zone_lists[0], info.pos_x, info.pos_y, info.width, info.height);
- SCIM_DEBUG_MAIN (3) << " KEYBOARD_STATE_ON x=" << info.pos_x << " y=" << info.pos_y
- << " width=" << info.width << " height=" << info.height << "\n";
- } else {
- ecore_x_e_virtual_keyboard_state_set (zone_lists[0], ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF);
- ecore_x_e_illume_keyboard_geometry_set (zone_lists[0], info.pos_x, info.pos_y, 0, 0);
- SCIM_DEBUG_MAIN (3) << " KEYBOARD_STATE_OFF x=" << info.pos_x << " y=" << info.pos_y << "\n";
- }
}
- if (zone_lists)
- free (zone_lists);
+ if (kbd_state == KEYBOARD_STATE_ON) {
+ ecore_x_e_illume_keyboard_geometry_set (window, info.pos_x, info.pos_y, info.width, info.height);
+ ecore_x_e_virtual_keyboard_state_set (window, ECORE_X_VIRTUAL_KEYBOARD_STATE_ON);
+ SCIM_DEBUG_MAIN (3) << " KEYBOARD_STATE_ON x=" << info.pos_x << " y=" << info.pos_y
+ << " width=" << info.width << " height=" << info.height << "\n";
+ LOGD ("KEYBOARD_GEOMETRY_SET : %d %d %d %d\n", info.pos_x, info.pos_y, info.width, info.height);
+ } else {
+ ecore_x_e_illume_keyboard_geometry_set (window, info.pos_x, info.pos_y, 0, 0);
+ ecore_x_e_virtual_keyboard_state_set (window, ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF);
+ SCIM_DEBUG_MAIN (3) << " KEYBOARD_STATE_OFF x=" << info.pos_x << " y=" << info.pos_y << "\n";
+ LOGD ("KEYBOARD_GEOMETRY_SET : %d %d %d %d\n", info.pos_x, info.pos_y, 0, 0);
+ }
+ _panel_agent->update_input_panel_event (ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, 0);
}
/**
- * @brief Get ISE name according to uuid.
+ * @brief Get ISE index according to uuid.
*
* @param uuid The ISE uuid.
*
- * @return The ISE name
+ * @return The ISE index
*/
-static String get_ise_name (const String uuid)
+static int get_ise_index (const String uuid)
{
- String ise_name;
+ int index = 0;
if (uuid.length () > 0) {
for (unsigned int i = 0; i < _uuids.size (); i++) {
- if (strcmp (uuid.c_str (), _uuids[i].c_str ()) == 0) {
- ise_name = _names[i];
+ if (uuid == _uuids[i]) {
+ index = i;
break;
}
}
}
- return ise_name;
+ return index;
}
/**
- * @brief Get ISE type according to uuid.
+ * @brief Get ISE module file path.
*
- * @param uuid The ISE uuid.
+ * @param module_name The ISE's module name.
+ * @param type The ISE's type.
*
- * @return The ISE type
+ * @return ISE module file path if successfully, otherwise return empty string.
*/
-TOOLBAR_MODE_T get_ise_type (const String uuid)
+static String get_module_file_path (const String &module_name, const String &type)
{
- TOOLBAR_MODE_T ise_type = TOOLBAR_KEYBOARD_MODE;
- if (uuid.length () > 0) {
- for (unsigned int i = 0; i < _uuids.size (); i++) {
- if (strcmp (uuid.c_str (), _uuids[i].c_str ()) == 0) {
- ise_type = _modes[i];
- break;
- }
- }
+ SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
+
+ String strFile;
+ if (module_name.substr (0, 1) == String ("/")) {
+ strFile = module_name + ".so";
+ if (access (strFile.c_str (), R_OK) == 0)
+ return strFile.substr (0, strFile.find_last_of ('/') + 1);
+ }
+
+ /* Check inhouse path */
+ strFile = String (SCIM_MODULE_PATH) +
+ String (SCIM_PATH_DELIM_STRING) + String (SCIM_BINARY_VERSION) +
+ String (SCIM_PATH_DELIM_STRING) + type +
+ String (SCIM_PATH_DELIM_STRING) + module_name + ".so";
+ if (access (strFile.c_str (), R_OK) == 0)
+ return strFile.substr (0, strFile.find_last_of ('/') + 1);
+
+ const char *module_path_env = getenv ("SCIM_MODULE_PATH");
+ if (module_path_env) {
+ strFile = String (module_path_env) +
+ String (SCIM_PATH_DELIM_STRING) + String (SCIM_BINARY_VERSION) +
+ String (SCIM_PATH_DELIM_STRING) + type +
+ String (SCIM_PATH_DELIM_STRING) + module_name + ".so";
+ if (access (strFile.c_str (), R_OK) == 0)
+ return strFile.substr (0, strFile.find_last_of ('/') + 1);
}
- return ise_type;
+ return String ("");
}
/**
- * @brief Get ISE language according to uuid.
+ * @brief Callback function for ISE file monitor.
*
- * @param uuid The ISE uuid.
- *
- * @return The ISE language
- */
-String get_ise_language (const String uuid)
-{
- String ise_language;
- if (uuid.length () > 0) {
- for (unsigned int i = 0; i < _uuids.size (); i++) {
- if (strcmp (uuid.c_str (), _uuids[i].c_str ()) == 0) {
- ise_language = _langs[i];
- break;
+ * @param data Data to pass when it is called.
+ * @param em The handle of Ecore_File_Monitor.
+ * @param event The event type.
+ * @param path The path for current event.
+ */
+static void ise_file_monitor_cb (void *data, Ecore_File_Monitor *em, Ecore_File_Event event, const char *path)
+{
+ SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
+
+ if (event == ECORE_FILE_EVENT_DELETED_FILE || event == ECORE_FILE_EVENT_CLOSED) {
+ int index = GPOINTER_TO_INT (data);
+ String strFile = String (ecore_file_monitor_path_get (em)) +
+ String (SCIM_PATH_DELIM_STRING) + _module_names[index] + String (".so");
+
+ if (String (path) == strFile) {
+ if (event == ECORE_FILE_EVENT_DELETED_FILE) {
+ /* Update ISE list */
+ std::vector<String> list;
+ slot_get_ise_list (list);
+ } else if (event == ECORE_FILE_EVENT_CLOSED) {
+ if (_modes[index] == TOOLBAR_HELPER_MODE) {
+ /* Restart helper ISE */
+ _panel_agent->hide_helper (_uuids[index]);
+ _panel_agent->stop_helper (_uuids[index]);
+ _panel_agent->start_helper (_uuids[index]);
+ }
}
}
}
+}
+
+/**
+ * @brief Delete keyboard ISE file monitor.
+ */
+static void delete_keyboard_ise_em (void) {
+ if (_keyboard_ise_em) {
+ ecore_file_monitor_del (_keyboard_ise_em);
+ _keyboard_ise_em = NULL;
+ }
+}
+
+/**
+ * @brief Delete helper ISE file monitor.
+ */
+static void delete_helper_ise_em (void) {
+ if (_helper_ise_em) {
+ ecore_file_monitor_del (_helper_ise_em);
+ _helper_ise_em = NULL;
+ }
+}
- return ise_language;
+/**
+ * @brief Add keyboard ISE file monitor.
+ *
+ * @param module_name The keyboard ISE's module name.
+ */
+static void add_keyboard_ise_em (const String &uuid, const String &module_name) {
+ SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
+
+ String path = get_module_file_path (module_name, "IMEngine");
+ if (path.length () > 0 && access (path.c_str (), R_OK) == 0) {
+ delete_keyboard_ise_em ();
+ _keyboard_ise_em = ecore_file_monitor_add (path.c_str (), ise_file_monitor_cb, GINT_TO_POINTER(get_ise_index (uuid)));
+ }
}
/**
* @brief Set keyboard ISE.
*
* @param uuid The keyboard ISE's uuid.
+ * @param module_name The keyboard ISE's module name.
*
* @return false if keyboard ISE change is failed, otherwise return true.
*/
-static bool set_keyboard_ise (const String &uuid)
+static bool set_keyboard_ise (const String &uuid, const String &module_name)
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
uint32 kbd_option = 0;
String kbd_uuid, kbd_name;
isf_get_keyboard_ise (_config, kbd_uuid, kbd_name, kbd_option);
- if (kbd_uuid == uuid)
+ if (kbd_uuid == uuid) {
+ if (_keyboard_ise_em == NULL) {
+ add_keyboard_ise_em (uuid, module_name);
+ delete_helper_ise_em ();
+ }
return false;
+ }
}
_panel_agent->change_factory (uuid);
String language = String ("~other");/*scim_get_locale_language (scim_get_current_locale ());*/
_config->write (String (SCIM_CONFIG_DEFAULT_IMENGINE_FACTORY) + String ("/") + language, uuid);
+ /* Add directory monitor for keyboard ISE */
+ add_keyboard_ise_em (uuid, module_name);
+ delete_helper_ise_em ();
+
return true;
}
* @brief Set helper ISE.
*
* @param uuid The helper ISE's uuid.
+ * @param module_name The helper ISE's module name.
*
* @return false if helper ISE change is failed, otherwise return true.
*/
-static bool set_helper_ise (const String &uuid)
+static bool set_helper_ise (const String &uuid, const String &module_name)
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
if (TOOLBAR_HELPER_MODE == mode) {
String pre_uuid = _panel_agent->get_current_helper_uuid ();
- if (!pre_uuid.compare (uuid))
+ if (pre_uuid == uuid)
return false;
_panel_agent->hide_helper (pre_uuid);
_panel_agent->stop_helper (pre_uuid);
String language = String ("~other");/*scim_get_locale_language (scim_get_current_locale ());*/
_config->write (String (SCIM_CONFIG_DEFAULT_IMENGINE_FACTORY) + String ("/") + language, kbd_uuid);
+ delete_keyboard_ise_em ();
}
- _panel_agent->start_helper (uuid);
+ _panel_agent->start_helper (uuid);
_config->write (String (SCIM_CONFIG_DEFAULT_HELPER_ISE), uuid);
+ /* Add directory monitor for helper ISE */
+ String path = get_module_file_path (module_name, "Helper");
+ if (path.length () > 0 && access (path.c_str (), R_OK) == 0) {
+ delete_helper_ise_em ();
+ _helper_ise_em = ecore_file_monitor_add (path.c_str (), ise_file_monitor_cb, GINT_TO_POINTER(get_ise_index (uuid)));
+ }
+
return true;
}
for (unsigned int i = 0; i < _uuids.size (); i++) {
if (!uuid.compare (_uuids[i])) {
if (TOOLBAR_KEYBOARD_MODE == _modes[i])
- ise_changed = set_keyboard_ise (_uuids[i]);
+ ise_changed = set_keyboard_ise (_uuids[i], _module_names[i]);
else if (TOOLBAR_HELPER_MODE == _modes[i])
- ise_changed = set_helper_ise (_uuids[i]);
+ ise_changed = set_helper_ise (_uuids[i], _module_names[i]);
if (ise_changed) {
_panel_agent->set_current_toolbar_mode (_modes[i]);
int height = 0;
if (_candidate_window) {
- int angle = efl_get_angle_for_root_window (_candidate_window);
+ int angle = efl_get_angle_for_app_window ();
if (evas_object_visible_get (_aux_area) && evas_object_visible_get (_candidate_area_1)) {
if (angle == 90 || angle == 270)
if (!_candidate_window)
return;
- int x, y, width, height;
- evas_object_geometry_get (_candidate_window, &x, &y, &width, &height);
- SCIM_DEBUG_MAIN (3) << __FUNCTION__ << " old width:" << width << " old height:" << height << "\n";
+ int height;
- if (width == new_width && height == new_height)
- return;
-
- evas_object_resize (_candidate_window, new_width, new_height);
+ LOGD ("%s (%d, %d)\n", __func__, new_width, new_height);
evas_object_resize (_aux_line, new_width, 2);
_candidate_width = new_width;
_candidate_height = new_height;
if ((_ise_width == 0 && _ise_height == 0) ||
(_ise_height > 0 && _candidate_valid_height != height) ||
(_ise_height > 0 && (_candidate_height - height) > _ise_height)) {
- set_keyboard_geometry_atom_info (KEYBOARD_STATE_ON);
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_ON);
_panel_agent->update_input_panel_event (ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, 0);
}
}
+
+ /* Get height for portrait and landscape */
+ int port_width = _candidate_port_width;
+ int port_height = _candidate_port_height_min;
+ int land_width = _candidate_land_width;
+ int land_height = _candidate_land_height_min;
+ if (_candidate_angle == 90 || _candidate_angle == 270) {
+ land_height = new_height;
+ if (land_height == _candidate_land_height_min_2) {
+ port_height = _candidate_port_height_min_2;
+ } else if (land_height == _candidate_land_height_max) {
+ port_height = _candidate_port_height_max;
+ } else if (land_height == _candidate_land_height_max_2) {
+ port_height = _candidate_port_height_max_2;
+ }
+ } else {
+ port_height = new_height;
+ if (port_height == _candidate_port_height_min_2) {
+ land_height = _candidate_land_height_min_2;
+ } else if (port_height == _candidate_port_height_max) {
+ land_height = _candidate_land_height_max;
+ } else if (port_height == _candidate_port_height_max_2) {
+ land_height = _candidate_land_height_max_2;
+ }
+ }
+
+ LOGD ("ecore_x_e_window_rotation_geometry_set (_candidate_window), port (%d, %d), land (%d, %d)\n",
+ port_width, port_height, land_width, land_height);
+
+ ecore_x_e_window_rotation_geometry_set (elm_win_xwindow_get (_candidate_window),
+ 0, 0, 0, port_width, port_height);
+ ecore_x_e_window_rotation_geometry_set (elm_win_xwindow_get (_candidate_window),
+ 90, 0, 0, land_height, land_width);
+ ecore_x_e_window_rotation_geometry_set (elm_win_xwindow_get (_candidate_window),
+ 180, 0, 0, port_width, port_height);
+ ecore_x_e_window_rotation_geometry_set (elm_win_xwindow_get (_candidate_window),
+ 270, 0, 0, land_height, land_width);
}
/**
int x, y, width, height;
/* Get candidate window size */
- evas_object_geometry_get (_candidate_window, &x, &y, &width, &height);
- {
- if (evas_object_visible_get (_aux_area) && evas_object_visible_get (_candidate_area_2)) {
- evas_object_show (_aux_line);
- evas_object_move (_candidate_area_1, _candidate_area_1_pos[0], _candidate_area_1_pos[1] + _candidate_port_height_min_2 - _candidate_port_height_min);
- if (_candidate_angle == 90 || _candidate_angle == 270) {
- ui_candidate_window_resize (width, _candidate_land_height_max_2);
- evas_object_move (_close_btn, _close_btn_pos[2], _close_btn_pos[3] + _candidate_port_height_min_2 - _candidate_port_height_min);
- evas_object_move (_candidate_area_2, 0, _candidate_land_height_min_2);
- evas_object_move (_scroller_bg, 0, _candidate_land_height_min_2);
- } else {
- ui_candidate_window_resize (width, _candidate_port_height_max_2);
- evas_object_move (_close_btn, _close_btn_pos[0], _close_btn_pos[1] + _candidate_port_height_min_2 - _candidate_port_height_min);
- evas_object_move (_candidate_area_2, 0, _candidate_port_height_min_2);
- evas_object_move (_scroller_bg, 0, _candidate_port_height_min_2);
- }
- } else if (evas_object_visible_get (_aux_area) && evas_object_visible_get (_candidate_area_1)) {
- evas_object_show (_aux_line);
- evas_object_move (_candidate_area_1, _candidate_area_1_pos[0], _candidate_area_1_pos[1] + _candidate_port_height_min_2 - _candidate_port_height_min);
- if (_candidate_angle == 90 || _candidate_angle == 270) {
- ui_candidate_window_resize (width, _candidate_land_height_min_2);
- evas_object_move (_more_btn, _more_btn_pos[2], _more_btn_pos[3] + _candidate_port_height_min_2 - _candidate_port_height_min);
- } else {
- ui_candidate_window_resize (width, _candidate_port_height_min_2);
- evas_object_move (_more_btn, _more_btn_pos[0], _more_btn_pos[1] + _candidate_port_height_min_2 - _candidate_port_height_min);
- }
- } else if (evas_object_visible_get (_aux_area)) {
- evas_object_hide (_aux_line);
- ui_candidate_window_resize (width, _aux_height + 2);
- } else if (evas_object_visible_get (_candidate_area_2)) {
- evas_object_hide (_aux_line);
- evas_object_move (_candidate_area_1, _candidate_area_1_pos[0], _candidate_area_1_pos[1]);
- if (_candidate_angle == 90 || _candidate_angle == 270) {
- ui_candidate_window_resize (width, _candidate_land_height_max);
- evas_object_move (_close_btn, _close_btn_pos[2], _close_btn_pos[3]);
- evas_object_move (_candidate_area_2, 0, _candidate_land_height_min);
- evas_object_move (_scroller_bg, 0, _candidate_land_height_min);
- } else {
- ui_candidate_window_resize (width, _candidate_port_height_max);
- evas_object_move (_close_btn, _close_btn_pos[0], _close_btn_pos[1]);
- evas_object_move (_candidate_area_2, 0, _candidate_port_height_min);
- evas_object_move (_scroller_bg, 0, _candidate_port_height_min);
- }
+ if (_candidate_angle == 90 || _candidate_angle == 270) {
+ ecore_x_e_window_rotation_geometry_get (elm_win_xwindow_get (_candidate_window), _candidate_angle,
+ &x, &y, &height, &width);
+ } else {
+ ecore_x_e_window_rotation_geometry_get (elm_win_xwindow_get (_candidate_window), _candidate_angle,
+ &x, &y, &width, &height);
+ }
+
+ if (evas_object_visible_get (_aux_area) && evas_object_visible_get (_candidate_area_2)) {
+ evas_object_show (_aux_line);
+ evas_object_move (_candidate_area_1, _candidate_area_1_pos[0], _candidate_area_1_pos[1] + _candidate_port_height_min_2 - _candidate_port_height_min);
+ if (_candidate_angle == 90 || _candidate_angle == 270) {
+ ui_candidate_window_resize (width, _candidate_land_height_max_2);
+ evas_object_move (_close_btn, _close_btn_pos[2], _close_btn_pos[3] + _candidate_port_height_min_2 - _candidate_port_height_min);
+ evas_object_move (_candidate_area_2, 0, _candidate_land_height_min_2);
+ evas_object_move (_scroller_bg, 0, _candidate_land_height_min_2);
} else {
- evas_object_hide (_aux_line);
- evas_object_move (_candidate_area_1, _candidate_area_1_pos[0], _candidate_area_1_pos[1]);
- if (_candidate_angle == 90 || _candidate_angle == 270) {
- ui_candidate_window_resize (width, _candidate_land_height_min);
- evas_object_move (_more_btn, _more_btn_pos[2], _more_btn_pos[3]);
- } else {
- ui_candidate_window_resize (width, _candidate_port_height_min);
- evas_object_move (_more_btn, _more_btn_pos[0], _more_btn_pos[1]);
- }
+ ui_candidate_window_resize (width, _candidate_port_height_max_2);
+ evas_object_move (_close_btn, _close_btn_pos[0], _close_btn_pos[1] + _candidate_port_height_min_2 - _candidate_port_height_min);
+ evas_object_move (_candidate_area_2, 0, _candidate_port_height_min_2);
+ evas_object_move (_scroller_bg, 0, _candidate_port_height_min_2);
+ }
+ } else if (evas_object_visible_get (_aux_area) && evas_object_visible_get (_candidate_area_1)) {
+ evas_object_show (_aux_line);
+ evas_object_move (_candidate_area_1, _candidate_area_1_pos[0], _candidate_area_1_pos[1] + _candidate_port_height_min_2 - _candidate_port_height_min);
+ if (_candidate_angle == 90 || _candidate_angle == 270) {
+ ui_candidate_window_resize (width, _candidate_land_height_min_2);
+ evas_object_move (_more_btn, _more_btn_pos[2], _more_btn_pos[3] + _candidate_port_height_min_2 - _candidate_port_height_min);
+ } else {
+ ui_candidate_window_resize (width, _candidate_port_height_min_2);
+ evas_object_move (_more_btn, _more_btn_pos[0], _more_btn_pos[1] + _candidate_port_height_min_2 - _candidate_port_height_min);
+ }
+ } else if (evas_object_visible_get (_aux_area)) {
+ evas_object_hide (_aux_line);
+ ui_candidate_window_resize (width, _aux_height + 2);
+ } else if (evas_object_visible_get (_candidate_area_2)) {
+ evas_object_hide (_aux_line);
+ evas_object_move (_candidate_area_1, _candidate_area_1_pos[0], _candidate_area_1_pos[1]);
+ if (_candidate_angle == 90 || _candidate_angle == 270) {
+ ui_candidate_window_resize (width, _candidate_land_height_max);
+ evas_object_move (_close_btn, _close_btn_pos[2], _close_btn_pos[3]);
+ evas_object_move (_candidate_area_2, 0, _candidate_land_height_min);
+ evas_object_move (_scroller_bg, 0, _candidate_land_height_min);
+ } else {
+ ui_candidate_window_resize (width, _candidate_port_height_max);
+ evas_object_move (_close_btn, _close_btn_pos[0], _close_btn_pos[1]);
+ evas_object_move (_candidate_area_2, 0, _candidate_port_height_min);
+ evas_object_move (_scroller_bg, 0, _candidate_port_height_min);
+ }
+ } else {
+ evas_object_hide (_aux_line);
+ evas_object_move (_candidate_area_1, _candidate_area_1_pos[0], _candidate_area_1_pos[1]);
+ if (_candidate_angle == 90 || _candidate_angle == 270) {
+ ui_candidate_window_resize (width, _candidate_land_height_min);
+ evas_object_move (_more_btn, _more_btn_pos[2], _more_btn_pos[3]);
+ } else {
+ ui_candidate_window_resize (width, _candidate_port_height_min);
+ evas_object_move (_more_btn, _more_btn_pos[0], _more_btn_pos[1]);
}
}
}
if (!_candidate_window)
return;
- elm_win_rotation_set (_candidate_window, angle);
if (angle == 90 || angle == 270) {
_candidate_scroll_width = _candidate_scroll_width_max;
ui_candidate_window_resize (_candidate_land_width, _candidate_land_height_min);
evas_object_resize (_scroller_bg, _candidate_scroll_width, _candidate_scroll_height_max + 6);
}
- ui_settle_candidate_window ();
ui_candidate_window_adjust ();
if (evas_object_visible_get (_candidate_area_1)) {
update_table (ISF_CANDIDATE_TABLE, g_isf_candidate_table);
}
flush_memory ();
+
+ LOGD ("elm_win_rotation_with_resize_set (%p, %d)\n", _candidate_window, angle);
+ elm_win_rotation_with_resize_set (_candidate_window, angle);
}
/**
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
int hw_kbd_detect = _config->read (ISF_CONFIG_HARDWARE_KEYBOARD_DETECT, 0);
- if (!_candidate_window || (hw_kbd_detect == 0 && !_ise_show))
+ if (!_candidate_window || (hw_kbd_detect == 0 && !_ise_show)) {
+ if (hw_kbd_detect == 0 && !_ise_show) {
+ _candidate_window_pending = true;
+ }
return;
-
- int angle = efl_get_angle_for_root_window (_candidate_window);
- if (_candidate_angle != angle) {
- _candidate_angle = angle;
- ui_candidate_window_rotate (angle);
}
+ ui_candidate_window_rotate (_candidate_angle);
+
if (!evas_object_visible_get (_candidate_window)) {
evas_object_show (_candidate_window);
_panel_agent->update_candidate_panel_event ((uint32)ECORE_IMF_CANDIDATE_PANEL_STATE_EVENT, (uint32)ECORE_IMF_CANDIDATE_PANEL_SHOW);
_panel_agent->update_input_panel_event ((uint32)ECORE_IMF_INPUT_PANEL_STATE_EVENT, (uint32)ECORE_IMF_INPUT_PANEL_STATE_SHOW);
if (bSetVirtualKbd)
- set_keyboard_geometry_atom_info (KEYBOARD_STATE_ON);
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_ON);
_panel_agent->update_input_panel_event (ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, 0);
}
SCIM_DEBUG_MAIN (3) << " Show candidate window\n";
_candidate_window_show = true;
+ LOGD ("evas_object_show (_candidate_window, %p)\n", elm_win_xwindow_get ( _candidate_window));
+ efl_set_transient_for_app_window (elm_win_xwindow_get (_candidate_window));
evas_object_show (_candidate_window);
- efl_set_transient_for_app_window (_candidate_window);
}
/**
static void ui_candidate_hide (bool bForce, bool bSetVirtualKbd)
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
+ _candidate_window_pending = false;
if (!_candidate_window)
return;
if (_candidate_mode == FIXED_CANDIDATE_WINDOW) {
_panel_agent->update_input_panel_event (ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, 0);
if (_ise_show) {
- set_keyboard_geometry_atom_info (KEYBOARD_STATE_ON);
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_ON);
} else {
if (bSetVirtualKbd)
- set_keyboard_geometry_atom_info (KEYBOARD_STATE_OFF);
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_OFF);
_panel_agent->update_input_panel_event ((uint32)ECORE_IMF_INPUT_PANEL_STATE_EVENT, (uint32)ECORE_IMF_INPUT_PANEL_STATE_HIDE);
}
}
/* Create candidate window */
if (_candidate_window == NULL) {
_candidate_window = efl_create_window ("candidate", "Prediction Window");
- evas_object_resize (_candidate_window, _candidate_port_width, _candidate_port_height_min);
- _candidate_width = _candidate_port_width;
- _candidate_height = _candidate_port_height_min;
+ if (_candidate_angle == 90 || _candidate_angle == 270) {
+ _candidate_width = _candidate_land_width;
+ _candidate_height = _candidate_land_height_min;
+ } else {
+ _candidate_width = _candidate_port_width;
+ _candidate_height = _candidate_port_height_min;
+ }
+ ecore_x_e_window_rotation_geometry_set (elm_win_xwindow_get (_candidate_window),
+ 0, 0, 0, _candidate_port_width, _candidate_port_height_min);
+ ecore_x_e_window_rotation_geometry_set (elm_win_xwindow_get (_candidate_window),
+ 90, 0, 0, _candidate_land_height_min, _candidate_land_width);
+ ecore_x_e_window_rotation_geometry_set (elm_win_xwindow_get (_candidate_window),
+ 180, 0, 0, _candidate_port_width, _candidate_port_height_min);
+ ecore_x_e_window_rotation_geometry_set (elm_win_xwindow_get (_candidate_window),
+ 270, 0, 0, _candidate_land_height_min, _candidate_land_width);
/* Add background */
_candidate_bg = edje_object_add (evas_object_evas_get (_candidate_window));
ui_create_native_candidate_window ();
- int angle = efl_get_angle_for_root_window (_candidate_window);
+ unsigned int set = 1;
+ ecore_x_window_prop_card32_set (elm_win_xwindow_get (_candidate_window),
+ ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
+ &set, 1);
+
+ int angle = efl_get_angle_for_app_window ();
if (_candidate_angle != angle) {
_candidate_angle = angle;
ui_candidate_window_rotate (angle);
spot_x = _spot_location_x;
spot_y = _spot_location_y;
- rectinfo ise_rect;
- _panel_agent->get_current_ise_geometry (ise_rect);
+ rectinfo ise_rect = {0, 0, _ise_width, _ise_height};
if (_candidate_angle == 90 || _candidate_angle == 270) {
if (ise_rect.height <= (uint32)0 || ise_rect.height >= (uint32)_screen_width)
ise_rect.height = ISE_DEFAULT_HEIGHT_LANDSCAPE * _width_rate;
//////////////////////////////////////////////////////////////////////
/**
- * @brief Get screen width and height.
- *
- * @param width The screen width.
- * @param height The screen height.
- */
-static void efl_get_screen_size (int &width, int &height)
-{
- SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
-
- Display *d = (Display *)ecore_x_display_get ();
- if (d) {
- int screen_num = DefaultScreen (d);
- width = DisplayWidth (d, screen_num);
- height = DisplayHeight (d, screen_num);
- } else {
- std::cerr << "ecore_x_display_get () is failed!!!\n";
- }
-}
-
-/**
* @brief Set transient for app window.
*
- * @param win_obj The Evas_Object handler of app window.
+ * @param window The Ecore_X_Window handler of app window.
*/
-static void efl_set_transient_for_app_window (Evas_Object *win_obj)
+static void efl_set_transient_for_app_window (Ecore_X_Window window)
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
/* Set a transient window for window stack */
- /* Gets the current XID of the active window into the root window property */
- int ret = 0;
- Atom type_return;
- int format_return;
- unsigned long nitems_return;
- unsigned long bytes_after_return;
- unsigned char *data = NULL;
- Ecore_X_Window xAppWindow;
- Ecore_X_Window xKeypadWin = elm_win_xwindow_get (win_obj);
+ Ecore_X_Window xAppWindow = efl_get_app_window ();
+ ecore_x_icccm_transient_for_set (window, xAppWindow);
- ret = XGetWindowProperty ((Display *)ecore_x_display_get (), ecore_x_window_root_get (xKeypadWin),
- ecore_x_atom_get ("_ISF_ACTIVE_WINDOW"),
- 0, G_MAXLONG, False, ((Atom) 33), &type_return,
- &format_return, &nitems_return, &bytes_after_return,
- &data);
-
- if (ret == Success) {
- if ((type_return == ((Atom) 33)) && (format_return == 32) && (data)) {
- xAppWindow = *(Window *)data;
- ecore_x_icccm_transient_for_set (xKeypadWin, xAppWindow);
- if (data)
- XFree (data);
- }
- } else {
- std::cerr << "XGetWindowProperty () is failed!!!\n";
- }
+ LOGD ("%x %x\n", window, xAppWindow);
}
/**
*
* @return The angle of root window.
*/
-static int efl_get_angle_for_root_window (Evas_Object *win_obj)
+static int efl_get_angle_for_app_window ()
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
int count;
int angle = 0;
unsigned char *prop_data = NULL;
- Ecore_X_Window root_win = ecore_x_window_root_first_get ();
- if (win_obj)
- root_win = ecore_x_window_root_get (elm_win_xwindow_get (win_obj));
- ret = ecore_x_window_prop_property_get (root_win, ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE, ECORE_X_ATOM_CARDINAL, 32, &prop_data, &count);
+ ret = ecore_x_window_prop_property_get (efl_get_app_window (),
+ ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE, ECORE_X_ATOM_CARDINAL, 32, &prop_data, &count);
if (ret && prop_data) {
memcpy (&angle, prop_data, sizeof (int));
} else {
}
/**
+ * @brief Create elementary control window.
+ *
+ * @return EINA_TRUE if successful, otherwise return EINA_FALSE
+ */
+static Eina_Bool efl_create_control_window (void)
+{
+ /* WMSYNC, #1 Creating and registering control window */
+ if (ecore_x_display_get () == NULL)
+ return EINA_FALSE;
+
+ Ecore_X_Window root = ecore_x_window_root_first_get ();
+ _control_window = ecore_x_window_input_new (root, -100, -100, 1, 1);
+ ecore_x_e_virtual_keyboard_control_window_set (root, _control_window, 0, EINA_TRUE);
+
+ return EINA_TRUE;
+}
+
+/**
+ * @brief Get app window's x window id.
+ *
+ * @param win_obj The Evas_Object handler of app window.
+ */
+static Ecore_X_Window efl_get_app_window (void)
+{
+ SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
+
+ /* Gets the current XID of the active window from the root window property */
+ int ret = 0;
+ Atom type_return;
+ int format_return;
+ unsigned long nitems_return;
+ unsigned long bytes_after_return;
+ unsigned char *data = NULL;
+ Ecore_X_Window xAppWindow = 0;
+
+ ret = XGetWindowProperty ((Display *)ecore_x_display_get (),
+ ecore_x_window_root_get (_control_window),
+ ecore_x_atom_get ("_ISF_ACTIVE_WINDOW"),
+ 0, G_MAXLONG, False, XA_WINDOW, &type_return,
+ &format_return, &nitems_return, &bytes_after_return,
+ &data);
+
+ if (ret == Success) {
+ if ((type_return == XA_WINDOW) && (format_return == 32) && (data)) {
+ xAppWindow = *(Window *)data;
+ if (data)
+ XFree (data);
+ }
+ } else {
+ std::cerr << "XGetWindowProperty () is failed!!!\n";
+ }
+
+ return xAppWindow;
+}
+/**
* @brief Get default zone geometry.
*
* @param x The zone x position.
height = scr_h;
}
-
//////////////////////////////////////////////////////////////////////
// Start of PanelAgent Functions
//////////////////////////////////////////////////////////////////////
_panel_agent->signal_connect_accept_connection (slot (slot_accept_connection));
_panel_agent->signal_connect_close_connection (slot (slot_close_connection));
_panel_agent->signal_connect_exit (slot (slot_exit));
- _panel_agent->get_active_ise_list (_load_ise_list);
+
+ _panel_agent->signal_connect_register_helper_properties (slot (slot_register_helper_properties));
+ _panel_agent->signal_connect_show_ise (slot (slot_show_ise));
+
+ _panel_agent->signal_connect_will_show_ack (slot (slot_will_show_ack));
+ _panel_agent->signal_connect_will_hide_ack (slot (slot_will_hide_ack));
+
+ std::vector<String> load_ise_list;
+ _panel_agent->get_active_ise_list (load_ise_list);
return true;
}
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
- //if (!_config.null ())
- // _config->reload ();
+ if (!_config.null ())
+ _config->reload ();
}
/**
TOOLBAR_MODE_T mode = _panel_agent->get_current_toolbar_mode ();
if (TOOLBAR_HELPER_MODE == mode)
- ise_name = get_ise_name (_panel_agent->get_current_helper_uuid ());
+ ise_name = _names[get_ise_index (_panel_agent->get_current_helper_uuid ())];
if (ise_name.length () > 0)
_panel_agent->set_current_ise_name (ise_name);
*/
static void slot_update_input_context (int type, int value)
{
- SCIM_DEBUG_MAIN (3) << __FUNCTION__ << " type=" << type << " value=" << value << "\n";
-
- if (type == ECORE_IMF_INPUT_PANEL_STATE_EVENT) {
- if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) {
- _ise_show = false;
- ui_candidate_hide (true, false);
- set_keyboard_geometry_atom_info (KEYBOARD_STATE_OFF);
- } else if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
- _ise_show = true;
- if (evas_object_visible_get (_candidate_area_1))
- ui_candidate_show (false);
- set_keyboard_geometry_atom_info (KEYBOARD_STATE_ON);
- }
- }
}
/**
_ise_height = height;
if (_candidate_window) {
- int angle = efl_get_angle_for_root_window (_candidate_window);
+ int angle = efl_get_angle_for_app_window ();
if (_candidate_angle != angle) {
_candidate_angle = angle;
ui_candidate_window_rotate (angle);
}
if (old_height != height && _ise_show)
- set_keyboard_geometry_atom_info (KEYBOARD_STATE_ON);
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_ON);
}
/**
info.width = _candidate_width;
info.height = _candidate_height;
}
- int angle = efl_get_angle_for_root_window (_candidate_window);
+ int angle = efl_get_angle_for_app_window ();
if (angle == 90 || angle == 270)
info.pos_y = _screen_width - info.height;
else
/* update ise list */
bool ret = isf_update_ise_list (ALL_ISE, _config);
- std::vector<String> langs, name_list;
- isf_get_all_languages (langs);
- isf_get_all_ises_in_languages (langs, list, name_list);
+ list.clear ();
+ list = _uuids;
_panel_agent->update_ise_list (list);
+
+ if (ret && _initial_ise_uuid.length () > 0) {
+ String active_uuid = _initial_ise_uuid;
+ String default_uuid = scim_global_config_read (String (SCIM_GLOBAL_CONFIG_DEFAULT_ISE_UUID), String (""));
+ int hw_kbd_detect = _config->read (ISF_CONFIG_HARDWARE_KEYBOARD_DETECT, 0);
+ if (std::find (_uuids.begin (), _uuids.end (), default_uuid) == _uuids.end ()) {
+ if (hw_kbd_detect && _modes[get_ise_index (_initial_ise_uuid)] != TOOLBAR_KEYBOARD_MODE) {
+ active_uuid = String (SCIM_COMPOSE_KEY_FACTORY_UUID);
+ }
+ set_active_ise (active_uuid);
+ } else if (!hw_kbd_detect) { // Check whether keyboard engine is installed
+ String IMENGINE_KEY = String (SCIM_CONFIG_DEFAULT_IMENGINE_FACTORY) + String ("/") + String ("~other");
+ String keyboard_uuid = _config->read (IMENGINE_KEY, String (""));
+ if (std::find (_uuids.begin (), _uuids.end (), keyboard_uuid) == _uuids.end ()) {
+ active_uuid = String (SCIM_COMPOSE_KEY_FACTORY_UUID);
+ _panel_agent->change_factory (active_uuid);
+ _config->write (IMENGINE_KEY, active_uuid);
+ _config->flush ();
+ delete_keyboard_ise_em ();
+ }
+ }
+ }
return ret;
}
{
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
- if (uuid.length () <= 0)
+ if (uuid.length () <= 0 || std::find (_uuids.begin (), _uuids.end (), uuid) == _uuids.end ())
return;
String default_uuid = scim_global_config_read (String (SCIM_GLOBAL_CONFIG_DEFAULT_ISE_UUID), String (""));
- if (get_ise_type (default_uuid) == TOOLBAR_KEYBOARD_MODE)
+ if (_modes[get_ise_index (default_uuid)] == TOOLBAR_KEYBOARD_MODE)
return;
uint32 ise_option = 0;
String ise_uuid, ise_name;
isf_get_keyboard_ise (_config, ise_uuid, ise_name, ise_option);
- if (ise_uuid == uuid)
+ if (ise_uuid == uuid) {
+ if (_keyboard_ise_em == NULL) {
+ add_keyboard_ise_em (uuid, _module_names[get_ise_index (uuid)]);
+ }
return;
+ }
String language = String ("~other");/*scim_get_locale_language (scim_get_current_locale ());*/
_config->write (String (SCIM_CONFIG_DEFAULT_IMENGINE_FACTORY) + String ("/") + language, uuid);
_panel_agent->change_factory (uuid);
_panel_agent->reload_config ();
- if (_candidate_window)
- ui_create_candidate_window ();
+ /* Add directory monitor for keyboard ISE */
+ if (_keyboard_ise_em == NULL) {
+ add_keyboard_ise_em (uuid, _module_names[get_ise_index (uuid)]);
+ }
}
/**
elm_exit ();
}
+static void slot_register_helper_properties (int id, const PropertyList &props)
+{
+ /* WMSYNC, #2 Receiving X window ID from ISE */
+ /* FIXME : We should add an API to set window id of ISE */
+ Property prop = props[0];
+ if (prop.get_label ().compare ("XID") == 0) {
+ Ecore_X_Window xwindow = atoi (prop.get_key ().c_str ());
+ _ise_window = xwindow;
+ LOGD ("ISE XID : %x\n", _ise_window);
+ }
+}
+
+static void slot_show_ise (void)
+{
+ /* WMSYNC, #3 Clear the existing application's conformant area and set transient_for */
+ // Unset conformant area
+ Ecore_X_Window current_app_window = efl_get_app_window ();
+ if (_app_window != current_app_window) {
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_OFF);
+ LOGD ("Conformant reset for window %x\n", _app_window);
+ _app_window = current_app_window;
+ }
+
+ _candidate_angle = efl_get_angle_for_app_window ();
+ efl_set_transient_for_app_window (_ise_window);
+}
+
+static void slot_will_show_ack (void)
+{
+ /* WMSYNC, #5 Let the Window Manager to actually show keyboard window */
+ // WILL_SHOW_REQUEST_DONE Ack to WM
+ Ecore_X_Window root_window = ecore_x_window_root_get (_control_window);
+ ecore_x_e_virtual_keyboard_on_prepare_done_send (root_window, _control_window);
+ LOGD ("_ecore_x_e_virtual_keyboard_on_prepare_done_send(%x, %x)\n",
+ root_window, _control_window);
+}
+
+static void slot_will_hide_ack (void)
+{
+ /* WMSYNC, #8 Let the Window Manager to actually hide keyboard window */
+ // WILL_HIDE_REQUEST_DONE Ack to WM
+ Ecore_X_Window root_window = ecore_x_window_root_get (_control_window);
+ ecore_x_e_virtual_keyboard_off_prepare_done_send (root_window, _control_window);
+ LOGD ("_ecore_x_e_virtual_keyboard_off_prepare_done_send(%x, %x)\n",
+ root_window, _control_window);
+}
+
//////////////////////////////////////////////////////////////////////
// End of PanelAgent-Functions
//////////////////////////////////////////////////////////////////////
* @param module_name The keyboard ISE module name.
* @param index The index of _module_names.
*
- * @return true if suceessful, otherwise return false.
+ * @return true if successful, otherwise return false.
*/
static bool update_keyboard_ise_locale (const String module_name, int index)
{
* @param module_name The helper ISE module name.
* @param index The index of _module_names.
*
- * @return true if suceessful, otherwise return false.
+ * @return true if successful, otherwise return false.
*/
static bool update_helper_ise_locale (const String module_name, int index)
{
isf_save_ise_information ();
String default_uuid = scim_global_config_read (String (SCIM_GLOBAL_CONFIG_DEFAULT_ISE_UUID), _initial_ise_uuid);
- String default_name = get_ise_name (default_uuid);
+ String default_name = _names[get_ise_index (default_uuid)];
_panel_agent->set_current_ise_name (default_name);
_config->reload ();
}
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
String default_uuid = scim_global_config_read (String (SCIM_GLOBAL_CONFIG_DEFAULT_ISE_UUID), _initial_ise_uuid);
- String default_name = get_ise_name (default_uuid);
if (!set_active_ise (default_uuid)) {
std::cerr << __FUNCTION__ << " Failed to launch default ISE(" << default_uuid << ")\n";
if (val != 0) {
_config->write (ISF_CONFIG_HARDWARE_KEYBOARD_DETECT, 1);
- if (get_ise_type (default_uuid) == TOOLBAR_HELPER_MODE) {
+ if (_modes[get_ise_index (default_uuid)] == TOOLBAR_HELPER_MODE) {
/* Get the keyboard ISE */
isf_get_keyboard_ise (_config, uuid, name, option);
if (option & SCIM_IME_NOT_SUPPORT_HARDWARE_KEYBOARD) {
}
/* Try to find reasonable keyboard ISE according to helper ISE language */
if (uuid == String (SCIM_COMPOSE_KEY_FACTORY_UUID)) {
- String helper_language = get_ise_language (default_uuid);
+ String helper_language = _langs [get_ise_index (default_uuid)];
if (helper_language.length () > 0) {
std::vector<String> ise_langs;
scim_split_string_list (ise_langs, helper_language);
if (event->win == rootwin && event->atom == ecore_x_atom_get (PROP_X_EXT_KEYBOARD_EXIST)) {
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
check_hardware_keyboard ();
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_OFF);
+ } else if (event->atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE) {
+ /* WMSYNC, #6 The keyboard window is displayed fully so set the conformant geometry */
+ LOGD ("ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE\n");
+ Ecore_X_Virtual_Keyboard_State state;
+ state = ecore_x_e_virtual_keyboard_state_get (event->win);
+ if (state == ECORE_X_VIRTUAL_KEYBOARD_STATE_ON) {
+ LOGD ("ECORE_X_VIRTUAL_KEYBOARD_STATE_ON\n");
+ _ise_show = true;
+
+ if (_candidate_window_pending) {
+ _candidate_window_pending = false;
+ ui_candidate_show (true);
+ } else {
+ if (evas_object_visible_get (_candidate_area_1))
+ ui_candidate_show (false);
+ }
+
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_ON);
+ _panel_agent->update_input_panel_event(
+ ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_SHOW);
+
+ vconf_set_int (VCONFKEY_PM_SIP_STATUS, 1);
+ }
+ else if (state == ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF) {
+ /* WMSYNC, #9 The keyboard window is hidden fully so send HIDE state */
+ LOGD ("ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF\n");
+ // For now don't send HIDE signal here
+ //_panel_agent->update_input_panel_event (
+ // ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_HIDE);
+ _ise_show = false;
+ ui_candidate_hide (true, false);
+
+ vconf_set_int (VCONFKEY_PM_SIP_STATUS, 0);
+ }
}
return ECORE_CALLBACK_PASS_ON;
SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
Ecore_X_Event_Client_Message *ev = (Ecore_X_Event_Client_Message *)event;
- if (ev->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE) {
- int angle = ev->data.l[0];
- SCIM_DEBUG_MAIN (3) << __FUNCTION__ << " : ANGLE (" << angle << ")\n";
- ui_candidate_hide (true);
- if (_candidate_window && _candidate_angle != angle) {
+ if ((ev->win == _control_window)) {
+ if (ev->message_type == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON_PREPARE_REQUEST) {
+ /* WMSYNC, #4 Send WILL_SHOW event when the keyboard window is about to displayed */
+ LOGD ("_ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON_PREPARE_REQUEST\n");
+ _panel_agent->update_input_panel_event (
+ ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW);
+ } else if (ev->message_type == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF_PREPARE_REQUEST) {
+ _ise_show = false;
+ /* WMSYNC, #7 Send WILL_HIDE event when the keyboard window is about to hidden */
+ LOGD ("_ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF_PREPARE_REQUEST\n");
+ // Clear conformant geometry information first
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_OFF);
+ _panel_agent->update_input_panel_event (
+ ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_HIDE);
+ // For now don't send WILL_HIDE signal here
+ //_panel_agent->update_input_panel_event(
+ // ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_WILL_HIDE);
+ // Instead send HIDE signal
+ } else if (ev->message_type == ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_PREPARE) {
+ /* WMSYNC, #10 Register size hints for candidate window and set conformant geometry */
+ // PRE_ROTATE_DONE Ack to WM
+ _candidate_angle = ev->data.l[1];
+ LOGD ("ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_PREPARE : %d\n", _candidate_angle);
+ if (_candidate_angle == 90 || _candidate_angle == 270) {
+ ui_candidate_window_resize (_candidate_land_width, _candidate_land_height_min);
+ } else {
+ ui_candidate_window_resize (_candidate_port_width, _candidate_port_height_min);
+ }
+ if (_ise_show) {
+ set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_ON);
+ }
+ ui_settle_candidate_window ();
+ Ecore_X_Window root_window = ecore_x_window_root_get (_control_window);
+ LOGD ("ecore_x_e_window_rotation_change_prepare_done_send(%d)\n", _candidate_angle);
+ ecore_x_e_window_rotation_change_prepare_done_send (root_window,
+ _control_window, _candidate_angle);
+ }
+ } else if (ev->win == elm_win_xwindow_get (_candidate_window)) {
+ if (ev->message_type == ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_REQUEST) {
+ /* WMSYNC, #11 Actual rotate the candidate window */
+ int angle = ev->data.l[1];
+ LOGD ("_ECORE_X_ATOM_E_WINDOW_ROTATION_REQUEST : %d\n", angle);
+ SCIM_DEBUG_MAIN (3) << __FUNCTION__ << " : ANGLE (" << angle << ")\n";
_candidate_angle = angle;
ui_candidate_window_rotate (angle);
- int hw_kbd_detect = _config->read (ISF_CONFIG_HARDWARE_KEYBOARD_DETECT, 0);
- if (hw_kbd_detect && evas_object_visible_get (_candidate_area_1))
- ui_candidate_show ();
}
}
return ECORE_CALLBACK_RENEW;
}
+/**
+ * @brief : Checks whether the window manager is launched or not
+ * @return true if window manager launched, else false
+ */
+static bool check_wm_ready ()
+{
+#ifdef WAIT_WM
+ int try_count = 0;
+ while (check_file (ISF_SYSTEM_WM_READY_FILE) == false) {
+ if (ISF_SYSTEM_WAIT_COUNT >= (try_count++)) return false;
+ }
+#endif
+
+ return true;
+}
+
+/**
+ * @brief : Checks whether the system service is ready or not
+ * @return true if all system service are ready, else false
+ */
+static bool check_system_ready ()
+{
+ int ret = 0;
+ int val = 0;
+ ret = vconf_get_int (ISF_SYSTEM_APPSERVICE_READY_VCONF, &val);
+
+ if (ret == 0 && val == ISF_SYSTEM_APPSERVICE_READY_STATE) {
+ return true;
+ } else {
+ /* Register a call back function for checking system ready */
+ if (!_appsvc_callback_regist) {
+ if (vconf_notify_key_changed (ISF_SYSTEM_APPSERVICE_READY_VCONF, launch_default_soft_keyboard, NULL)) {
+ _appsvc_callback_regist = true;
+ }
+ }
+
+ return false;
+ }
+}
+
+/**
+ * @brief : Launches default soft keyboard for performance enhancement (It's not mandatory)
+ */
+static void launch_default_soft_keyboard (keynode_t *key, void* data)
+{
+ /* Soft keyboard will be started when all system service are ready */
+ if (check_system_ready ()) {
+ if (_appsvc_callback_regist)
+ vconf_ignore_key_changed (ISF_SYSTEM_APPSERVICE_READY_VCONF, launch_default_soft_keyboard);
+
+ /* Start default ISE */
+ start_default_ise ();
+ check_hardware_keyboard ();
+ }
+}
+
int main (int argc, char *argv [])
{
struct tms tiks_buf;
_clock_start = times (&tiks_buf);
int i;
-#ifdef WAIT_WM
- int try_count = 0;
-#endif
int ret = 0;
bool daemon = false;
setenv ("ELM_ENGINE", "software_x11", 1); /* Avoid the inheritance of ELM_ENGINE */
set_language_and_locale ();
-#ifdef WAIT_WM
- while (1) {
- if (check_file ("/tmp/.wm_ready"))
- break;
-
- if (try_count == 6000) {
- std::cerr << "[ISF-PANEL-EFL] Timeout. cannot check the state of window manager....\n";
- break;
- }
-
- try_count++;
- usleep (50000);
- }
-#endif
-
- elm_init (argc, argv);
- check_time ("elm_init");
-
/* Get current display. */
{
const char *p = getenv ("DISPLAY");
_line_items [i] = NULL;
}
+ try {
+ _panel_agent->send_display_name (display_name);
+ } catch (scim::Exception & e) {
+ std::cerr << e.what() << "\n";
+ ret = -1;
+ goto cleanup;
+ }
+
+ if (daemon) {
+ check_time ("ISF Panel EFL run as daemon");
+ scim_daemon ();
+ }
+
+ /* Connect the configuration reload signal. */
+ _config->signal_connect_reload (slot (config_reload_cb));
+
+ if (!check_wm_ready ()) {
+ std::cerr << "[ISF-PANEL-EFL] WM ready timeout\n";
+ }
+
+ elm_init (argc, argv);
+ check_time ("elm_init");
+
+ if (!efl_create_control_window ())
+ goto cleanup;
+
efl_get_screen_resolution (_screen_width, _screen_height);
_width_rate = (float)(_screen_width / 720.0);
load_config ();
check_time ("load_config");
- try {
- _panel_agent->send_display_name (display_name);
- } catch (scim::Exception & e) {
- std::cerr << e.what() << "\n";
- ret = -1;
- goto cleanup;
- }
-
- if (daemon) {
- check_time ("ISF Panel EFL run as daemon");
- scim_daemon ();
- }
-
- /* Connect the configuration reload signal. */
- _config->signal_connect_reload (slot (config_reload_cb));
-
helper_manager_handler = ecore_main_fd_handler_add (_panel_agent->get_helper_manager_id (), ECORE_FD_READ, helper_manager_input_handler, NULL, NULL, NULL);
panel_agent_read_handler = ecore_main_fd_handler_add (_panel_agent->get_server_id (), ECORE_FD_READ, panel_agent_handler, NULL, NULL, NULL);
_read_handler_list.push_back (panel_agent_read_handler);
/* Load initial ISE information */
_initial_ise_uuid = scim_global_config_read (String (SCIM_GLOBAL_CONFIG_INITIAL_ISE_UUID), String (SCIM_COMPOSE_KEY_FACTORY_UUID));
- /* Start default ISE */
- start_default_ise ();
- check_hardware_keyboard ();
+ /* Launches default soft keyboard when all conditions are satisfied */
+ launch_default_soft_keyboard();
} catch (scim::Exception & e) {
std::cerr << e.what () << "\n";
}
- /* Create hibernation ready file */
- FILE *rfd;
- rfd = fopen (ISF_READY_FILE, "w+");
- if (rfd)
- fclose (rfd);
-
xclient_message_handler = ecore_event_handler_add (ECORE_X_EVENT_CLIENT_MESSAGE, x_event_client_message_cb, NULL);
ecore_x_event_mask_set (ecore_x_window_root_first_get (), ECORE_X_EVENT_MASK_WINDOW_PROPERTY);
xwindow_property_handler = ecore_event_handler_add (ECORE_X_EVENT_WINDOW_PROPERTY, x_event_window_property_cb, NULL);
ui_candidate_delete_check_size_timer ();
ui_candidate_delete_longpress_timer ();
ui_candidate_delete_destroy_timer ();
+ delete_keyboard_ise_em ();
+ delete_helper_ise_em ();
if (!_config.null ())
_config.reset ();
#include "scim_stl_map.h"
#include "isf_panel_utility.h"
#include "isf_query_utility.h"
+#include <unistd.h>
/////////////////////////////////////////////////////////////////////////////
std::vector<uint32> _options;
std::vector<TOOLBAR_MODE_T> _modes;
-std::vector<String> _load_ise_list;
-
/////////////////////////////////////////////////////////////////////////////
// Declaration of internal variables.
/////////////////////////////////////////////////////////////////////////////
-static std::vector<String> _current_modules_list;
/////////////////////////////////////////////////////////////////////////////
lang_name = scim_get_language_name_english (it->first);
if (std::find (lang_list.begin (), lang_list.end (), lang_name) != lang_list.end ()) {
for (size_t i = 0; i < it->second.size (); i++) {
- if (_current_modules_list.size () > 0 &&
- std::find (_current_modules_list.begin (), _current_modules_list.end (), _module_names[it->second[i]]) == _current_modules_list.end ())
- continue;
// Avoid to add the same ISE
if (std::find (uuid_list.begin (), uuid_list.end (), _uuids[it->second[i]]) == uuid_list.end ()) {
uuid_list.push_back (_uuids[it->second[i]]);
continue;
if (bCheckOption && (_options[it->second[i]] & SCIM_IME_NOT_SUPPORT_HARDWARE_KEYBOARD))
continue;
- if (_current_modules_list.size () > 0 &&
- std::find (_current_modules_list.begin (), _current_modules_list.end (), _module_names[it->second[i]]) == _current_modules_list.end ())
- continue;
if (std::find (uuid_list.begin (), uuid_list.end (), _uuids[it->second[i]]) == uuid_list.end ()) {
uuid_list.push_back (_uuids[it->second[i]]);
name_list.push_back (_names[it->second[i]]);
if (_modes[it->second[i]]!= TOOLBAR_HELPER_MODE)
continue;
- if (_current_modules_list.size () > 0 &&
- std::find (_current_modules_list.begin (), _current_modules_list.end (), _module_names[it->second[i]]) == _current_modules_list.end ())
- continue;
// Avoid to add the same ISE
if (std::find (uuid_list.begin (), uuid_list.end (), _uuids[it->second[i]]) == uuid_list.end ()) {
uuid_list.push_back (_uuids[it->second[i]]);
* @param icons The ISE icon list.
* @param modes The ISE type list.
* @param options The ISE option list.
- * @param ise_list The already loaded ISE list.
*/
void isf_get_factory_list (LOAD_ISE_TYPE type,
const ConfigPointer &config,
std::vector<String> &langs,
std::vector<String> &icons,
std::vector<TOOLBAR_MODE_T> &modes,
- std::vector<uint32> &options,
- const std::vector<String> &ise_list)
+ std::vector<uint32> &options)
{
uuids.clear ();
names.clear ();
void isf_load_ise_information (LOAD_ISE_TYPE type, const ConfigPointer &config)
{
/* Load ISE engine info */
- isf_get_factory_list (type, config, _uuids, _names, _module_names, _langs, _icons, _modes, _options, _load_ise_list);
-
- _current_modules_list.clear ();
- scim_get_helper_module_list (_current_modules_list);
- /* Check keyboard ISEs */
- if (type != HELPER_ONLY) {
- _current_modules_list.push_back (COMPOSE_KEY_MODULE);
- std::vector<String> imengine_list;
- scim_get_imengine_module_list (imengine_list);
- for (size_t i = 0; i < imengine_list.size (); ++i)
- _current_modules_list.push_back (imengine_list [i]);
- }
+ isf_get_factory_list (type, config, _uuids, _names, _module_names, _langs, _icons, _modes, _options);
/* Update _groups */
std::vector<String> ise_langs;
std::vector<String> helper_list;
scim_get_helper_module_list (helper_list);
- _current_modules_list.clear ();
+ std::vector<String> install_modules, uninstall_modules;
/* Check keyboard ISEs */
if (type != HELPER_ONLY) {
- _current_modules_list.push_back (COMPOSE_KEY_MODULE);
+ install_modules.push_back (COMPOSE_KEY_MODULE);
std::vector<String> imengine_list;
scim_get_imengine_module_list (imengine_list);
for (size_t i = 0; i < imengine_list.size (); ++i) {
- _current_modules_list.push_back (imengine_list [i]);
+ install_modules.push_back (imengine_list [i]);
if (std::find (_module_names.begin (), _module_names.end (), imengine_list [i]) == _module_names.end ()) {
if (add_keyboard_ise_module (imengine_list [i], config))
ret = true;
/* Check helper ISEs */
for (size_t i = 0; i < helper_list.size (); ++i) {
- _current_modules_list.push_back (helper_list [i]);
+ install_modules.push_back (helper_list [i]);
if (std::find (_module_names.begin (), _module_names.end (), helper_list [i]) == _module_names.end ()) {
if (add_helper_ise_module (helper_list [i]))
ret = true;
}
}
+ /* Try to find uninstall ISEs */
+ bool bFindUninstall = false;
+ for (size_t i = 0; i < _module_names.size (); ++i) {
+ if (std::find (install_modules.begin (), install_modules.end (), _module_names [i]) == install_modules.end ()) {
+ ret = true;
+ bFindUninstall = true;
+ /* Avoid to add the same module */
+ if (std::find (uninstall_modules.begin (), uninstall_modules.end (), _module_names [i]) == uninstall_modules.end ()) {
+ uninstall_modules.push_back (_module_names [i]);
+ String filename = String (USER_ENGINE_FILE_NAME);
+ isf_remove_ise_info_from_file (filename.c_str (), _module_names [i].c_str ());
+ }
+ }
+ }
+ if (bFindUninstall) {
+ std::vector<String> tmp_uuids = _uuids;
+ std::vector<String> tmp_names = _names;
+ std::vector<String> tmp_module_names = _module_names;
+ std::vector<String> tmp_langs = _langs;
+ std::vector<String> tmp_icons = _icons;
+ std::vector<uint32> tmp_options = _options;
+ std::vector<TOOLBAR_MODE_T> tmp_modes = _modes;
+
+ _uuids.clear ();
+ _names.clear ();
+ _module_names.clear ();
+ _langs.clear ();
+ _icons.clear ();
+ _options.clear ();
+ _modes.clear ();
+ _groups.clear ();
+
+ for (size_t i = 0; i < tmp_module_names.size (); ++i) {
+ if (std::find (uninstall_modules.begin (), uninstall_modules.end (), tmp_module_names [i]) == uninstall_modules.end ()) {
+ _uuids.push_back (tmp_uuids [i]);
+ _names.push_back (tmp_names [i]);
+ _module_names.push_back (tmp_module_names [i]);
+ _langs.push_back (tmp_langs [i]);
+ _icons.push_back (tmp_icons [i]);
+ _options.push_back (tmp_options [i]);
+ _modes.push_back (tmp_modes [i]);
+ }
+ }
+ }
+
/* Update _groups */
if (ret) {
std::vector<String> ise_langs;
}
}
- /* When load ise list is empty, all ISEs can be loaded. */
- _load_ise_list.clear ();
return ret;
}
#define Uses_SCIM_IMENGINE_MODULE
#define Uses_SCIM_COMPOSE_KEY
-
#include <stdio.h>
#include <Elementary.h>
#include <Ecore_IMF.h>
#include "scim_setup_module_efl.h"
#include "isf_control.h"
-
using namespace scim;
#define _EDJ(x) elm_layout_edje_get(x)
#define SETTING_LOCALEDIR "/usr/ug/res/locale"
#define _T(s) dgettext(SETTING_PACKAGE, s)
-
-enum {
- F_CONNECTION_AUTO = 0,
- F_CONNECTION_ALWAYS_USED,
- F_CONNECTION_END,
-};
-
-enum {
- TYPE_PHONEPAD = 0,
- TYPE_QWERTY,
- TYPE_KEYBOARD_END,
-};
-
enum {
AUTO_CAPITALIZATION_ITEM = 0,
AUTO_CAPITALIZATION_TXT_ITEM,
ITEM_TOTAL_COUNT
};
+typedef enum {
+ SEPARATOR_TYPE1,
+ SEPARATOR_TYPE2
+} separator_type;
+
+enum {
+ ITEM_STYLE_NONE,
+ ITEM_STYLE_TOP,
+ ITEM_STYLE_CENTER,
+ ITEM_STYLE_BOTTOM
+};
+
struct ItemData
{
char *text;
char *sub_text;
int mode;
+ int item_style_type;
};
-
static struct ug_data *_common_ugd = NULL;
static ItemData *_p_items[ITEM_TOTAL_COUNT];
static ConfigPointer _config;
static Connection _reload_signal_connection;
-static Elm_Genlist_Item_Class itc1, itc2, itc3, itc4, itc5, itcText, itcTitle, itcSeparator;
-
+static Elm_Genlist_Item_Class itc1, itc2, itc3, itc4, itc5, itcText, itcTitle, itcSeparator[2];
extern std::vector <String> _names;
extern std::vector <String> _uuids;
extern std::vector <String> _langs;
extern std::vector<TOOLBAR_MODE_T> _modes;
-
static Evas_Object *_gl_icon_get (void *data, Evas_Object *obj, const char *part);
static char *_gl_label_get (void *data, Evas_Object *obj, const char *part);
static Eina_Bool _gl_state_get (void *data, Evas_Object *obj, const char *part);
static void create_sw_keyboard_selection_view (ug_data *ugd);
static void create_hw_keyboard_selection_view (ug_data *ugd);
+static void append_separator (Evas_Object *genlist, separator_type style_type)
+{
+ // Separator
+ Elm_Object_Item *item;
+ item = elm_genlist_item_append (
+ genlist, // genlist object
+ &itcSeparator[style_type], // item class
+ NULL, // data
+ NULL,
+ ELM_GENLIST_ITEM_NONE,
+ NULL,
+ NULL);
+ elm_genlist_item_select_mode_set (item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+}
static Evas_Object *create_bg (Evas_Object *win)
{
snprintf (_sw_ise_bak, sizeof (_sw_ise_bak), "%s", _sw_ise_name);
}
}
+
static void sw_keyboard_selection_view_set_cb (void *data, Evas_Object *obj, void *event_info)
{
if (data == NULL)
String langlist_str, normal_langlist_str;
for (unsigned int i = 0; i < _names.size (); i++) {
- if (strcmp (_names[i].c_str (), _sw_ise_list[index].c_str()) == 0)
+ if (strcmp (_names[i].c_str (), _sw_ise_list[index].c_str ()) == 0)
langlist_str = _langs[i];
}
std::vector<String> langlist_vec,normal_langlist_vec;
struct ug_data *ugd = (struct ug_data *)data;
ugd->key_end_cb = back_cb;
_mdl->save_config (_config);
- _config->reload ();
helper_ise_reload_config ();
}
static char *_gl_text_get (void *data, Evas_Object *obj, const char *part)
{
- int index = (int)data;
- return strdup (_p_items[index]->text);
+ ItemData *item_data = (ItemData *)data;
+
+ if (item_data)
+ return strdup (item_data->text);
+ else
+ return strdup ("");
}
static char *_gl_label_get (void *data, Evas_Object *obj, const char *part)
return NULL;
}
+static void onoff_check_cb (void *data, Evas_Object *obj, void *event_info)
+{
+ int id = (int)(data);
+
+ if (id == AUTO_CAPITALIZATION_ITEM) {
+ _auto_capitalisation = (_auto_capitalisation == EINA_TRUE ? EINA_FALSE : EINA_TRUE);
+ set_autocap_mode ();
+ } else if (id == AUTO_FULL_STOP_ITEM) {
+ _auto_full_stop = (_auto_full_stop == EINA_TRUE ? EINA_FALSE : EINA_TRUE);
+ set_auto_full_stop_mode ();
+ }
+}
+
static Evas_Object *_gl_icon_get (void *data, Evas_Object *obj, const char *part)
{
ItemData *item_data = (ItemData *)data;
if (!strcmp (part, "elm.icon")) {
Evas_Object *onoff_ck = elm_check_add (obj);
elm_object_style_set (onoff_ck, "on&off");
+ evas_object_smart_callback_add (onoff_ck, "changed", onoff_check_cb, (void *) (item_data->mode));
if (item_data->mode == AUTO_CAPITALIZATION_ITEM) {
elm_check_state_set (onoff_ck, _auto_capitalisation);
} else if (item_data->mode == AUTO_FULL_STOP_ITEM) {
return NULL;
}
+static void _gl_exp_sw_realized (void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *it = (Elm_Object_Item *)event_info;
+ int index;
+
+ if (!it) return;
+
+ index = (int)elm_object_item_data_get (it);
+
+ if (_sw_ise_list.size () < 2)
+ return;
+
+ if (index == 0)
+ elm_object_item_signal_emit (it, "elm,state,top", "");
+ else if (index == (int)(_sw_ise_list.size () - 1))
+ elm_object_item_signal_emit (it, "elm,state,bottom", "");
+ else
+ elm_object_item_signal_emit (it, "elm,state,center", "");
+}
+
static char *_gl_exp_hw_label_get (void *data, Evas_Object *obj, const char *part)
{
int index = (int)(data);
return NULL;
}
+static void _gl_exp_hw_realized (void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *it = (Elm_Object_Item *)event_info;
+ int index;
+
+ if (!it) return;
+
+ index = (int)elm_object_item_data_get (it);
+
+ if (_hw_ise_list.size () < 2)
+ return;
+
+ if (index == 0)
+ elm_object_item_signal_emit (it, "elm,state,top", "");
+ else if (index == (int)(_hw_ise_list.size () - 1))
+ elm_object_item_signal_emit (it, "elm,state,bottom", "");
+ else
+ elm_object_item_signal_emit (it, "elm,state,center", "");
+}
+
+static void _gl_realized (void *data, Evas_Object *obj, void *event_info)
+{
+ Elm_Object_Item *it = (Elm_Object_Item *)event_info;
+ ItemData *item_data;
+
+ if (!it) return;
+
+ item_data = (ItemData *)elm_object_item_data_get (it);
+ if (!item_data) return;
+
+ switch (item_data->item_style_type) {
+ case ITEM_STYLE_TOP:
+ elm_object_item_signal_emit (it, "elm,state,top", "");
+ break;
+ case ITEM_STYLE_BOTTOM:
+ elm_object_item_signal_emit (it, "elm,state,bottom", "");
+ break;
+ case ITEM_STYLE_CENTER:
+ elm_object_item_signal_emit (it, "elm,state,center", "");
+ break;
+ default:
+ break;
+ }
+}
+
static void create_sw_keyboard_selection_view (ug_data *ugd)
{
ugd->key_end_cb = sw_keyboard_selection_view_set_cb;
}
Evas_Object *genlist = elm_genlist_add (ugd->naviframe);
+ evas_object_smart_callback_add (genlist, "realized", _gl_exp_sw_realized, NULL);
elm_object_style_set (genlist, "dialogue");
evas_object_show (genlist);
std::sort (_sw_ise_list.begin (), _sw_ise_list.end ());
if (_sw_ise_list.size () > 0) {
- // Set item class for dialogue group seperator
- itcSeparator.item_style = "dialogue/separator/21/with_line";
- itcSeparator.func.text_get = NULL;
- itcSeparator.func.content_get = NULL;
- itcSeparator.func.state_get = NULL;
- itcSeparator.func.del = NULL;
-
// Separator
- Elm_Object_Item *item;
- item = elm_genlist_item_append (
- genlist, // genlist object
- &itcSeparator, // item class
- NULL, // data
- NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL,
- NULL);
- elm_genlist_item_select_mode_set (item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ append_separator (genlist, SEPARATOR_TYPE1);
}
for (i = 0; i < _sw_ise_list.size (); i++) {
}
}
-static void set_active_hw_ise()
+static void set_active_hw_ise (void)
{
if (strcmp (_hw_ise_bak, _hw_ise_name) != 0) {
// If ISE is changed, active it.
struct ug_data *ugd = (struct ug_data *)data;
- set_active_hw_ise();
+ set_active_hw_ise ();
update_setting_main_view (ugd);
Evas_Object *genlist = elm_genlist_add (ugd->naviframe);
elm_object_style_set (genlist, "dialogue");
+ evas_object_smart_callback_add (genlist, "realized", _gl_exp_hw_realized, NULL);
evas_object_show (genlist);
// Push the layout along with function buttons and title
isf_get_keyboard_ises_in_languages (all_langs, uuid_list, _hw_ise_list);
if (_hw_ise_list.size () > 0) {
- // Set item class for dialogue group seperator
- itcSeparator.item_style = "dialogue/separator/21/with_line";
- itcSeparator.func.text_get = NULL;
- itcSeparator.func.content_get = NULL;
- itcSeparator.func.state_get = NULL;
- itcSeparator.func.del = NULL;
-
- // Separator
- Elm_Object_Item *item;
- item = elm_genlist_item_append (
- genlist, // genlist object
- &itcSeparator, // item class
- NULL, // data
- NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL,
- NULL);
- elm_genlist_item_select_mode_set (item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ // Seperator
+ append_separator (genlist, SEPARATOR_TYPE1);
}
std::sort (_hw_ise_list.begin (), _hw_ise_list.end ());
Evas_Object *genlist = elm_genlist_add (ugd->naviframe);
elm_object_style_set (genlist, "dialogue");
+ evas_object_smart_callback_add (genlist, "realized", _gl_realized, NULL);
elm_genlist_mode_set (genlist, ELM_LIST_COMPRESS);
// Set item class for 1text.1icon(text+radiobutton)
itc1.item_style = "dialogue/1text.1icon";
itc3.func.del = _gl_del;
// Set item class for dialogue group seperator
- itcSeparator.item_style = "dialogue/separator/21/with_line";
- itcSeparator.func.text_get = NULL;
- itcSeparator.func.content_get = NULL;
- itcSeparator.func.state_get = NULL;
- itcSeparator.func.del = NULL;
+ itcSeparator[SEPARATOR_TYPE1].item_style = "dialogue/separator";
+ itcSeparator[SEPARATOR_TYPE1].func.text_get = NULL;
+ itcSeparator[SEPARATOR_TYPE1].func.content_get = NULL;
+ itcSeparator[SEPARATOR_TYPE1].func.state_get = NULL;
+ itcSeparator[SEPARATOR_TYPE1].func.del = NULL;
+
+ itcSeparator[SEPARATOR_TYPE2].item_style = "dialogue/separator.2";
+ itcSeparator[SEPARATOR_TYPE2].func.text_get = NULL;
+ itcSeparator[SEPARATOR_TYPE2].func.content_get = NULL;
+ itcSeparator[SEPARATOR_TYPE2].func.state_get = NULL;
+ itcSeparator[SEPARATOR_TYPE2].func.del = NULL;
// Set item class for dialogue group title
- itcTitle.item_style = "dialogue/title";
+ itcTitle.item_style = "dialogue/grouptitle";
itcTitle.func.text_get = _gl_label_get;
itcTitle.func.content_get = NULL;
itcTitle.func.state_get = _gl_state_get;
ItemData *item_data = NULL;
// Separator
- item = elm_genlist_item_append(
- genlist, // genlist object
- &itcSeparator, // item class
- NULL, // data
- NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL,
- NULL);
- elm_genlist_item_select_mode_set (item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ append_separator (genlist, SEPARATOR_TYPE1);
// Group1 item1
item_data = (ItemData *)malloc (sizeof (ItemData));
elm_object_item_disabled_set (ugd->autocapital_item, EINA_TRUE);
}
+ // Separator
+ append_separator (genlist, SEPARATOR_TYPE2);
+
// Text
item_data = (ItemData *)malloc (sizeof (ItemData));
if (item_data != NULL) {
item = elm_genlist_item_append (
genlist, // genlist object
&itcText, // item class
- (void *)(AUTO_CAPITALIZATION_TXT_ITEM), // data
+ item_data, // data
NULL,
ELM_GENLIST_ITEM_NONE,
NULL,
if (fullstop) {
// Separator
- item = elm_genlist_item_append (
- genlist, // genlist object
- &itcSeparator, // item class
- NULL, // data
- NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL,
- NULL);
- elm_genlist_item_select_mode_set (item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ append_separator (genlist, SEPARATOR_TYPE1);
// Group1 item2
item_data = (ItemData *)malloc (sizeof (ItemData));
(void *)(item_data->mode));
}
+ // Separator
+ append_separator (genlist, SEPARATOR_TYPE2);
+
// Text
item_data = (ItemData *)malloc (sizeof (ItemData));
if (item_data != NULL) {
item = elm_genlist_item_append (
genlist, // genlist object
&itcText, // item class
- (void *)(AUTO_FULL_STOP_TXT_ITEM), // data
+ item_data, // data
NULL,
ELM_GENLIST_ITEM_NONE,
NULL,
}
}
+ // Separator
+ append_separator (genlist, SEPARATOR_TYPE1);
+
// Group2 title
item_data = (ItemData *)malloc (sizeof (ItemData));
if (item_data != NULL) {
_p_items[SW_KEYBOARD_SEL_ITEM] = item_data;
item_data->text = strdup (_T("Keyboard selection"));
item_data->sub_text = strdup (_sw_ise_name);
+ item_data->item_style_type = ITEM_STYLE_TOP;
ugd->sw_ise_item_tizen = elm_genlist_item_append (
genlist, // genlist object
_p_items[SW_ISE_OPTION_ITEM] = item_data;
item_data->text = strdup (_T("Keyboard settings"));
item_data->mode = SW_ISE_OPTION_ITEM;
+ item_data->item_style_type = ITEM_STYLE_BOTTOM;
ugd->sw_ise_opt_item_tizen = elm_genlist_item_append (
genlist, // genlist object
&itc3, // item class
elm_object_item_disabled_set (ugd->sw_ise_opt_item_tizen, EINA_TRUE);
}
+ // Separator
+ append_separator (genlist, SEPARATOR_TYPE1);
+
// Group3 title
item_data = (ItemData *)malloc (sizeof (ItemData));
if (item_data != NULL) {
_p_items[HW_KEYBOARD_SEL_ITEM] = item_data;
item_data->text = strdup (_T("Keyboard selection"));
item_data->sub_text = strdup (_hw_ise_name);
+ item_data->item_style_type = ITEM_STYLE_TOP;
ugd->hw_ise_item_tizen = elm_genlist_item_append (
genlist, // genlist object
&itc2, // item class
(void *)ugd);
if (!_hw_kbd_connected)
- elm_object_item_disabled_set (ugd->hw_ise_item_tizen,EINA_TRUE);
+ elm_object_item_disabled_set (ugd->hw_ise_item_tizen, EINA_TRUE);
}
// Group3 item2
item_data = (ItemData *)malloc (sizeof (ItemData));
_p_items[HW_ISE_OPTION_ITEM] = item_data;
item_data->text = strdup (_T("Keyboard settings"));
item_data->mode = HW_ISE_OPTION_ITEM;
+ item_data->item_style_type = ITEM_STYLE_BOTTOM;
ugd->hw_ise_opt_item_tizen = elm_genlist_item_append (
genlist, // genlist object
&itc3, // item class
}
// Separator
- item = elm_genlist_item_append (
- genlist, // genlist object
- &itcSeparator, // item class
- NULL, // data
- NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL,
- NULL);
- elm_genlist_item_select_mode_set (item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ append_separator (genlist, SEPARATOR_TYPE1);
//==================================group end =========================
Evas_Object *back_btn = elm_button_add (ugd->naviframe);
if (ug == NULL || priv == NULL)
return;
struct ug_data *ugd = (struct ug_data *) priv;
- if (ugd->key_end_cb == ise_option_view_set_cb)
- {//inside ise setup module
+ if (ugd->key_end_cb == ise_option_view_set_cb) { //inside ise setup module
_mdl->save_config (_config);
- _config->reload ();
-
helper_ise_reload_config ();
- elm_naviframe_item_pop_to(nf_main_it);
- ugd->key_end_cb = back_cb;
+ } else if (ugd->key_end_cb == sw_keyboard_selection_view_set_cb) {
+ set_active_sw_ise ();
+ } else if (ugd->key_end_cb == hw_keyboard_selection_view_set_cb) {
+ set_active_hw_ise ();
}
- else if (ugd->key_end_cb == sw_keyboard_selection_view_set_cb)
- set_active_sw_ise();
- else if (ugd->key_end_cb == hw_keyboard_selection_view_set_cb)
- set_active_hw_ise();
}
static void on_resume (ui_gadget_h ug, service_h s, void *priv)
{
+ if (ug == NULL || priv == NULL)
+ return;
+ if (_mdl != NULL) {
+ _mdl->query_changed();
+ }
}
static void on_destroy (ui_gadget_h ug, service_h s, void *priv)
if (vconf_set_bool (VCONFKEY_AUTOPERIOD_ALLOW_BOOL, false) == -1)
return -1;
+ if (_imf_context == NULL) {
+ const char *ctx_id = ecore_imf_context_default_id_get ();
+ if (ctx_id) {
+ _imf_context = ecore_imf_context_add (ctx_id);
+ }
+ }
+
load_config_module ();
isf_load_ise_information (ALL_ISE, _config);
}
}
- _config->reload ();
helper_ise_reload_config ();
+
+ if (_imf_context != NULL) {
+ ecore_imf_context_del (_imf_context);
+ _imf_context = NULL;
+ }
return 0;
}
bool
SocketFrontEnd::get_surrounding_text (int id, WideString &text, int &cursor, int maxlen_before, int maxlen_after)
{
+ bool ret = false;
text.clear ();
cursor = 0;
if (m_current_instance == id && m_current_socket_client >= 0 && (maxlen_before != 0 || maxlen_after != 0)) {
+ bool cont = false;
if (maxlen_before < 0) maxlen_before = -1;
if (maxlen_after < 0) maxlen_after = -1;
+ Socket socket_client (m_current_socket_client);
+ if ( m_send_trans.get_data_type () != SCIM_TRANS_DATA_UNKNOWN) {
+ m_send_trans.put_command (ISM_TRANS_CMD_TRANSACTION_CONTINUE);
+ m_send_trans.write_to_socket (socket_client);
+ cont = true;
+ }
m_temp_trans.clear ();
m_temp_trans.put_command (SCIM_TRANS_CMD_REPLY);
m_temp_trans.put_data ((uint32) maxlen_before);
m_temp_trans.put_data ((uint32) maxlen_after);
- Socket socket_client (m_current_socket_client);
-
if (m_temp_trans.write_to_socket (socket_client) &&
m_temp_trans.read_from_socket (socket_client, m_socket_timeout)) {
m_temp_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_GET_SURROUNDING_TEXT &&
m_temp_trans.get_data (text) && m_temp_trans.get_data (cur)) {
cursor = (int) cur;
- return true;
+ ret = true;
}
}
+ if (cont) {
+ int cmd;
+ m_send_trans.clear ();
+ m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+
+ // Move the read ptr to the end.
+ m_send_trans.get_command (cmd);
+ }
}
- return false;
+ return ret;
+
}
bool
SocketFrontEnd::delete_surrounding_text (int id, int offset, int len)
{
+ bool ret = false;
if (m_current_instance == id && m_current_socket_client >= 0 && len > 0) {
+ bool cont = false;
+
+ Socket socket_client (m_current_socket_client);
+ if (m_send_trans.get_data_type () != SCIM_TRANS_DATA_UNKNOWN) {
+ m_send_trans.put_command (ISM_TRANS_CMD_TRANSACTION_CONTINUE);
+ m_send_trans.write_to_socket (socket_client);
+ cont = true;
+ }
m_temp_trans.clear ();
m_temp_trans.put_command (SCIM_TRANS_CMD_REPLY);
m_temp_trans.put_command (SCIM_TRANS_CMD_DELETE_SURROUNDING_TEXT);
m_temp_trans.put_data ((uint32) offset);
m_temp_trans.put_data ((uint32) len);
- Socket socket_client (m_current_socket_client);
-
if (m_temp_trans.write_to_socket (socket_client) &&
m_temp_trans.read_from_socket (socket_client, m_socket_timeout)) {
m_temp_trans.get_data (key) && key == m_current_socket_client_key &&
m_temp_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_DELETE_SURROUNDING_TEXT &&
m_temp_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK)
- return true;
+ ret = true;
+ }
+ if (cont) {
+ int cmd;
+ m_send_trans.clear ();
+ m_send_trans.put_command (SCIM_TRANS_CMD_REPLY);
+
+ // Move the read ptr to the end.
+ m_send_trans.get_command (cmd);
}
}
- return false;
+ return ret;
}
void
SocketFrontEnd::socket_update_ise_list (int /*client_id*/)
{
String strName;
- //std::vector<String> name_list;
+ std::vector<String> install_modules;
std::vector<String> imengine_list;
std::vector<String> helper_list;
scim_get_helper_module_list (helper_list);
for (size_t i = 0; i < imengine_list.size (); ++i) {
+ install_modules.push_back (imengine_list [i]);
if (std::find (__load_engine_list.begin (), __load_engine_list.end (), imengine_list [i]) == __load_engine_list.end ()) {
SCIM_DEBUG_FRONTEND (3) << "add_module " << imengine_list [i] << " in " << __FUNCTION__ << "\n";
//add_module (m_config, imengine_list [i], true);
HelperModule module;
HelperInfo info;
for (size_t i = 0; i < helper_list.size (); ++i) {
+ install_modules.push_back (helper_list [i]);
if (std::find (__load_engine_list.begin (), __load_engine_list.end (), helper_list [i]) == __load_engine_list.end ()) {
if (module.load (helper_list [i]) && module.valid ()) {
size_t num = module.number_of_helpers ();
module.unload ();
}
}
+
+ /* Try to find uninstall ISEs */
+ for (size_t i = 0; i < __load_engine_list.size (); ++i) {
+ if (std::find (install_modules.begin (), install_modules.end (), __load_engine_list [i]) == install_modules.end ()) {
+ HelperRepository tmp_helpers = __helpers;
+ __helpers.clear ();
+ for (size_t i = 0; i < tmp_helpers.size (); ++i) {
+ if (std::find (install_modules.begin (), install_modules.end (), tmp_helpers [i].second) != install_modules.end ())
+ __helpers.push_back (tmp_helpers [i]);
+ }
+ __load_engine_list = install_modules;
+ break;
+ }
+ }
}
m_send_trans.put_command (SCIM_TRANS_CMD_OK);
set_candidate_style ((ISF_CANDIDATE_PORTRAIT_LINE_T)portrait_line, (ISF_CANDIDATE_MODE_T)mode);
break;
}
+ case ISM_TRANS_CMD_TRANSACTION_CONTINUE:
+ {
+ cont = true;
+ }
default:
SCIM_DEBUG_IMENGINE(3) << " Strange cmd: " << cmd << "\n";
}
bin_PROGRAMS = scim isf-log isf-query-engines
scim_SOURCES = scim.cpp
+scim_CXXFLAGS = @PRIVILEGE_CONTROL_CFLAGS@
scim_LDADD = libscim@SCIM_EPOCH@.la
-scim_LDFLAGS = @LTLIBINTL@
+scim_LDFLAGS = @LTLIBINTL@ @PRIVILEGE_CONTROL_LIBS@
isf_log_SOURCES = isf_log.cpp
isf_log_LDADD = libscim@SCIM_EPOCH@.la
*
*/
+#define Uses_SCIM_CONFIG_PATH
#define Uses_SCIM_TRANSACTION
#define Uses_ISF_IMCONTROL_CLIENT
#include "isf_control.h"
-namespace scim
-{
+using namespace scim;
+
int isf_control_set_active_ise_by_uuid (const char *uuid)
{
return count;
}
-int isf_control_get_ise_info (const char *uuid, char** name, char** language, ISE_TYPE_T &type, int &option)
+int isf_control_get_ise_info (const char *uuid, char **name, char **language, ISE_TYPE_T *type, int *option)
{
if (uuid == NULL || name == NULL || language == NULL)
return -1;
*name = strName.length () ? strdup (strName.c_str ()) : strdup ("");
*language = strLanguage.length () ? strdup (strLanguage.c_str ()) : strdup ("");
- type = (ISE_TYPE_T)nType;
- option = nOption;
+ *type = (ISE_TYPE_T)nType;
+ *option = nOption;
+
+ return 0;
+}
+
+int isf_control_set_active_ise_to_default (void)
+{
+ IMControlClient imcontrol_client;
+ imcontrol_client.open_connection ();
+ imcontrol_client.prepare ();
+ imcontrol_client.set_active_ise_to_default ();
+ imcontrol_client.send ();
+ imcontrol_client.close_connection ();
return 0;
}
return 0;
}
-};
-
/*
vi:ts=4:nowrap:ai:expandtab
*/
#ifndef __ISF_CONTROL_H
#define __ISF_CONTROL_H
-namespace scim
-{
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
/////////////////////////////////////////////////////////////////////////////
// Declaration of global data types.
/////////////////////////////////////////////////////////////////////////////
*
* @return 0 if successfully, otherwise return -1;
*/
-int isf_control_get_ise_info (const char *uuid, char** name, char** language, ISE_TYPE_T &type, int &option);
+int isf_control_get_ise_info (const char *uuid, char **name, char **language, ISE_TYPE_T *type, int *option);
+
+/**
+ * @brief Set active ISE to default ISE.
+ *
+ * @return 0 if successfully, otherwise return -1;
+ */
+int isf_control_set_active_ise_to_default (void);
/**
* @brief Reset all ISEs' options.
*/
int isf_control_reset_ise_option (void);
+#ifdef __cplusplus
}
+#endif /* __cplusplus */
#endif /* __ISF_CONTROL_H */
void focus_out (void) {
m_trans.put_command (SCIM_TRANS_CMD_FOCUS_OUT);
}
+
+ void send_will_show_ack (void) {
+ m_trans.put_command (ISM_TRANS_CMD_SEND_WILL_SHOW_ACK);
+ }
+
+ void send_will_hide_ack (void) {
+ m_trans.put_command (ISM_TRANS_CMD_SEND_WILL_HIDE_ACK);
+ }
+
+ void set_active_ise_to_default (void) {
+ m_trans.put_command (ISM_TRANS_CMD_RESET_DEFAULT_ISE);
+ }
};
IMControlClient::IMControlClient ()
m_impl->focus_out ();
}
+void IMControlClient::send_will_show_ack (void)
+{
+ m_impl->send_will_show_ack ();
+}
+
+void IMControlClient::send_will_hide_ack (void)
+{
+ m_impl->send_will_hide_ack ();
+}
+
+void IMControlClient::set_active_ise_to_default (void)
+{
+ m_impl->set_active_ise_to_default ();
+}
+
};
/*
void set_caps_mode (int mode);
void focus_in (void);
void focus_out (void);
+ void send_will_show_ack (void);
+ void send_will_hide_ack (void);
+ void set_active_ise_to_default (void);
};
}
#include <sys/times.h>
#include <unistd.h>
#include <signal.h>
+#include <privilege-control.h>
using namespace scim;
using std::cout;
int new_argc = 0;
char *new_argv [80];
+ set_app_privilege ("isf", NULL, NULL);
+
/* Display version info */
cout << "Input Service Manager " << ISF_VERSION << "\n\n";
#include <malloc.h>
#include <string.h>
+#include <unistd.h>
#include "scim_private.h"
#include "scim.h"
#include "scim_stl_map.h"
};
+enum InputPanelStateEvent
+{
+ SCIM_INPUT_PANEL_STATE_SHOW,
+ SCIM_INPUT_PANEL_STATE_HIDE,
+ SCIM_INPUT_PANEL_STATE_WILL_SHOW,
+ SCIM_INPUT_PANEL_STATE_WILL_HIDE
+};
/** @} */
} // namespace scim
}
}
-void
-scim_global_config_update ()
-{
- __initialize_config ();
-}
-
bool
scim_global_config_flush ()
{
void scim_global_config_reset (const String &key);
/**
-* @brief update the global config
-*/
-void scim_global_config_update();
-/**
* @brief Flush the updated global config into user global config file.
* @return true if success.
*/
#include "scim_private.h"
#include "scim.h"
#include <privilege-control.h>
+#include <unistd.h>
using namespace scim;
if (!config_pointer.null ())
config_pointer.reset ();
-
- exit (0);
}
/*
PanelAgentSignalVoid m_signal_lock;
PanelAgentSignalVoid m_signal_unlock;
+ PanelAgentSignalVoid m_signal_show_ise;
+ PanelAgentSignalVoid m_signal_hide_ise;
+
+ PanelAgentSignalVoid m_signal_will_show_ack;
+ PanelAgentSignalVoid m_signal_will_hide_ack;
public:
PanelAgentImpl ()
: m_should_exit (false),
lock ();
- if (m_current_toolbar_mode != TOOLBAR_HELPER_MODE || m_current_helper_uuid.compare (uuid) != 0) {
+ /*if (m_current_toolbar_mode != TOOLBAR_HELPER_MODE || m_current_helper_uuid.compare (uuid) != 0)*/ {
SCIM_DEBUG_MAIN(1) << "Run_helper\n";
m_helper_manager.run_helper (uuid, m_config_name, m_display_name);
}
trans.write_to_socket (client_socket);
if (data != NULL)
delete[] data;
+
+ m_signal_show_ise ();
}
void hide_ise_panel (int client_id)
hide_helper (m_current_helper_uuid, ctx);
}
}
+
+ m_signal_hide_ise ();
}
void set_default_ise (const DEFAULT_ISE_T &ise)
update_keyboard_ise_list ();
}
+ void will_show_ack (int client_id)
+ {
+ SCIM_DEBUG_MAIN(4) << "PanelAgent::will_show_ack ()\n";
+
+ m_signal_will_show_ack ();
+ }
+
+ void will_hide_ack (int client_id)
+ {
+ SCIM_DEBUG_MAIN(4) << "PanelAgent::will_hide_ack ()\n";
+
+ m_signal_will_hide_ack ();
+ }
+
+ void reset_default_ise (int client_id)
+ {
+ SCIM_DEBUG_MAIN(4) << __func__ << "\n";
+
+ String initial_ise = scim_global_config_read (String (SCIM_GLOBAL_CONFIG_INITIAL_ISE_UUID), String (""));
+ if (initial_ise.length () > 0)
+ m_signal_set_active_ise_by_uuid (initial_ise.c_str (), 1);
+ else
+ std::cerr << "Read SCIM_GLOBAL_CONFIG_INITIAL_ISE_UUID is failed!!!\n";
+ }
+
Connection signal_connect_reload_config (PanelAgentSlotVoid *slot)
{
return m_signal_reload_config.connect (slot);
return m_signal_update_input_context.connect (slot);
}
+ Connection signal_connect_show_ise (PanelAgentSlotVoid *slot)
+ {
+ return m_signal_show_ise.connect (slot);
+ }
+
+ Connection signal_connect_hide_ise (PanelAgentSlotVoid *slot)
+ {
+ return m_signal_hide_ise.connect (slot);
+ }
+
+ Connection signal_connect_will_show_ack (PanelAgentSlotVoid *slot)
+ {
+ return m_signal_will_show_ack.connect (slot);
+ }
+
+ Connection signal_connect_will_hide_ack (PanelAgentSlotVoid *slot)
+ {
+ return m_signal_will_hide_ack.connect (slot);
+ }
private:
bool socket_check_client_connection (const Socket &client)
{
reset_ise_context (client_id);
else if (cmd == SCIM_TRANS_CMD_FOCUS_IN)
m_current_active_imcontrol_id = client_id;
+ else if (cmd == ISM_TRANS_CMD_SEND_WILL_SHOW_ACK)
+ will_show_ack (client_id);
+ else if (cmd == ISM_TRANS_CMD_SEND_WILL_HIDE_ACK)
+ will_hide_ack (client_id);
+ else if (cmd == ISM_TRANS_CMD_RESET_DEFAULT_ISE)
+ reset_default_ise (client_id);
}
socket_transaction_end ();
return m_impl->signal_connect_update_input_context (slot);
}
+Connection
+PanelAgent::signal_connect_show_ise (PanelAgentSlotVoid *slot)
+{
+ return m_impl->signal_connect_show_ise (slot);
+}
+
+Connection
+PanelAgent::signal_connect_hide_ise (PanelAgentSlotVoid *slot)
+{
+ return m_impl->signal_connect_hide_ise (slot);
+}
+
+Connection
+PanelAgent::signal_connect_will_show_ack (PanelAgentSlotVoid *slot)
+{
+ return m_impl->signal_connect_will_show_ack (slot);
+}
+
+Connection
+PanelAgent::signal_connect_will_hide_ack (PanelAgentSlotVoid *slot)
+{
+ return m_impl->signal_connect_will_hide_ack (slot);
+}
+
} /* namespace scim */
/*
* slot prototype: void update_input_context (int type, int value);
*/
Connection signal_connect_update_input_context (PanelAgentSlotIntInt *slot);
+
+ /**
+ * @brief Signal: Show ISE.
+ *
+ * slot prototype: void show_ise (void);
+ */
+ Connection signal_connect_show_ise (PanelAgentSlotVoid *slot);
+
+ /**
+ * @brief Signal: Hide ISE.
+ *
+ * slot prototype: void hide_ise (void);
+ */
+ Connection signal_connect_hide_ise (PanelAgentSlotVoid *slot);
+
+ /**
+ * @brief Signal: Notifies the client finished handling WILL_SHOW event
+ *
+ * slot prototype: void will_show_ack (void);
+ */
+ Connection signal_connect_will_show_ack (PanelAgentSlotVoid *slot);
+
+ /**
+ * @brief Signal: Notifies the client finished handling WILL_HIDE event
+ *
+ * slot prototype: void will_hide_ack (void);
+ */
+ Connection signal_connect_will_hide_ack (PanelAgentSlotVoid *slot);
};
/** @} */
#include "scim_private.h"
#include "scim.h"
+#include <unistd.h>
+
namespace scim {
typedef Signal1<void, int>
const int ISM_TRANS_CMD_SHOW_ASSOCIATE_TABLE = 170;
const int ISM_TRANS_CMD_HIDE_ASSOCIATE_TABLE = 171;
const int ISM_TRANS_CMD_UPDATE_ASSOCIATE_TABLE = 172;
+const int ISM_TRANS_CMD_TRANSACTION_CONTINUE = 173;
// Socket IMEngine to Socket FrontEnd
const int SCIM_TRANS_CMD_NEW_INSTANCE = 200;
const int ISM_TRANS_CMD_GET_ACTIVE_ISE = 1010;
const int ISM_TRANS_CMD_GET_ISE_LIST = 1011;
const int ISM_TRANS_CMD_GET_ISE_INFORMATION = 1012;
+const int ISM_TRANS_CMD_SEND_WILL_SHOW_ACK = 1013;
+const int ISM_TRANS_CMD_SEND_WILL_HIDE_ACK = 1014;
+const int ISM_TRANS_CMD_RESET_DEFAULT_ISE = 1015;
+
/* IMControl to ISE */
const int ISM_TRANS_CMD_SET_ISE_MODE = 1108;
if (socket.valid () && valid ()) {
unsigned char buf [sizeof (uint32) * 2];
uint32 sign1, sign2;
- uint32 checksum;
int size;
int nbytes;
if (((uint32)nbytes) < sizeof (uint32))
return false;
- checksum = scim_bytestouint32 (buf);
+ uint32 checksum = scim_bytestouint32 (buf);
#endif
if (size <= 0 || size > SCIM_TRANS_MAX_BUFSIZE)
return false;
{ "en_GB", NULL, N_("English (British)"), "British English", ".iso885915" },
{ "en_IE", NULL, N_("English (Ireland)"), "Irish English", NULL },
{ "en_US", NULL, N_("English (American)"), "American English", ".iso885915" },
+ { "eo", NULL, N_("Esperanto"), "Esperanto", NULL },
{ "es", "es_ES", N_("Spanish"), "Español", NULL },
{ "es_ES", NULL, N_("Spanish"), "Español", "@euro" },
{ "es_MX", NULL, N_("Spanish (Mexico)"), "Español (Mexico)", NULL },
{ "pt_PT", NULL, N_("Portuguese"), "Português", "@euro" },
{ "ro_RO", NULL, N_("Romanian"), "Română", NULL },
{ "ru_RU", NULL, N_("Russian"), "русский", ".koi8r" },
+ { "sd", "sd_IN", N_("Sindhi"), "ﺲﻧڌﻱ", NULL },
+ { "sd_IN", NULL, N_("Sindhi"), "सिन्धी", "@devanagari" },
{ "si_LK", NULL, N_("Sinhala"), "සිංහල", NULL },
{ "sk_SK", NULL, N_("Slovak"), "Slovenský", NULL },
{ "sl_SI", NULL, N_("Slovenian"), "Slovenščina", NULL },
+* Thu Jan 31 2013 Jihoon Kim <jihoon48.kim@samsung.com> submit/master/20130130.000238@1871df6
+- Remove code to hide IME in case of Search, go return key type
+- Remove debian directory
+- [setting] code format
+- [panel] fix logic to create control window
+- [panel] code cleanup
+- [immodule] fix bug not to send will hide ack
+- [immodule] add dlog for debugging
+- disable autoreorder in hangul engine
+- Fixed build break
+- upload isf-2.3.6129-2
+- The feature for synchronization with window manager newly added
+- [setting]fix : reset option couldn't work well
+- fix for GCC 4.7 build
+- Upload isf-2.3.6128
+- [demo] add language demo
+- [immodule] fix bug that language information hasn't be transfered in ISE Context.
+- Remove exit (0) from scim_helper_launcher.cpp
+- [immodule] change input panel state when root window property is changed
+- [immodule] display a variety of event logs in dlog
+- [immodule] remove unused code
+- [immodule] Use notification library instead of syspopup.
+- [demo] fix build warning
+- [immodule] Add dlog related to conformant status and geometry information
+- [demo] code refactoring
+- ignore input panel event when hardware keyboard is connected.
+- upload isf-2.3.6122
+- fix memory leak related to ecore_x_e_window_profile_get
+- Remove unused ISF logs
+- [immodule] fix IME issue not to hide IME in account
+- [immodule] Compare window ID in X window focus out callback function
+- change file permission to 644
+- [immodule] Hide IME after rendering conformant area
+- Add modifications in boilerplate
+- add X window focus out handler for X based application
+- [panel] Call elm_win_raise () when expand button is clicked
+- Update boilerplate
+- [panel] fix candidate window blink issue when candidate window is expanded.
+- [immodule] use ecore_imf API to show or hide for debugging easily
+- [isf-demo-efl] Remove "ocr_ug_api.h" header file
+- [immodule] use dlog for printing error
+- change boilerplate
+- upload isf-2.3.6114
+
* Mon Jan 14 2013 Jihoon Kim <jihoon48.kim@samsung.com> submit/master/20130110.033407@539fda6
- Add interface to get imdata from isf_imf_context
- [demo] Add changed and preedit,changed event
Name: isf
Summary: Input Service Framework
-Version: 2.3.6117
-Release: 5
+Version: 2.4.6312
+Release: 1
Group: System Environment/Libraries
License: LGPL
Source0: %{name}-%{version}.tar.gz
BuildRequires: pkgconfig(ecore)
BuildRequires: pkgconfig(edje)
BuildRequires: pkgconfig(x11)
-BuildRequires: pkgconfig(syspopup-caller)
+BuildRequires: pkgconfig(notification)
BuildRequires: pkgconfig(dlog)
-Requires(post): /sbin/ldconfig /usr/bin/vconftool
+Requires(post): /sbin/ldconfig /usr/bin/vconftool e17 net-config libmm-sound
Requires(postun): /sbin/ldconfig
-requires: e17, net-config
%description
Input Service Framewok (ISF) is an input method (IM) platform, and it has been derived from SCIM.
%files
-%manifest isf.manifest
+%manifest %{name}.manifest
+/etc/smack/accesses2.d/%{name}.rule
%defattr(-,root,root,-)
%{_libdir}/systemd/user/core-efl.target.wants/scim.service
%{_libdir}/systemd/user/scim.service
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-02-18 15:57+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ism/extras/efl_setting/isf_setting_efl.cpp:394
+#: ism/extras/efl_setting/isf_setting_efl.cpp:961
+#: ism/extras/efl_setting/isf_setting_efl.cpp:1031
+msgid "Keyboard settings"
+msgstr "Configuración del teclado"
+
+#. Push the layout along with function buttons and title
+#: ism/extras/efl_setting/isf_setting_efl.cpp:608
+#: ism/extras/efl_setting/isf_setting_efl.cpp:703
+#: ism/extras/efl_setting/isf_setting_efl.cpp:940
+#: ism/extras/efl_setting/isf_setting_efl.cpp:1012
+msgid "Keyboard selection"
+msgstr "Selección de teclado"
+
+#: ism/extras/efl_setting/isf_setting_efl.cpp:829
+msgid "Auto capitalization"
+msgstr "Uso de mayúsculas automático"
+
+#: ism/extras/efl_setting/isf_setting_efl.cpp:849
+msgid "Automatically capitalize first letter of sentence"
+msgstr "Escribir automáticamente en mayúscula la primera letra de una oración"
+
+#: ism/extras/efl_setting/isf_setting_efl.cpp:882
+msgid "Automatic full stop"
+msgstr "Detención automática completa"
+
+#: ism/extras/efl_setting/isf_setting_efl.cpp:899
+msgid "Automatically insert a full stop by tapping the space bar twice"
+msgstr ""
+"Pulse dos veces la barra de espacio para insertar automáticamente un punto final cuando usa el teclado Qwerty"
+
+#: ism/extras/efl_setting/isf_setting_efl.cpp:917
+msgid "Software keyboard"
+msgstr "Software del teclado"
+
+#: ism/extras/efl_setting/isf_setting_efl.cpp:981
+msgid "Hardware keyboard"
+msgstr "Hardware del teclado"
+
+#: ism/extras/efl_setting/isf_setting_efl.cpp:1062
+msgid "Keyboard"
+msgstr "Teclado"
SRCROOT=../..
POTFILES=POTFILES.in
-ALL_LINGUAS="hy az eu bg ca zh_CN zh_HK zh_TW hr cs da nl_NL en en_US et fi fr_FR gl ka de_DE el_GR hu is ga it_IT ja_JP kk ko_KR lv lt mk nb pl pt_PT pt_BR ro ru_RU sr sk sl es_ES es_US sv tr_TR uk uz ar zh_SG hi en_PH fr_CA"
+ALL_LINGUAS="hy az eu bg ca zh_CN zh_HK zh_TW hr cs da nl_NL en en_US et fi fr_FR gl ka de_DE el_GR hu is ga it_IT ja_JP kk ko_KR lv lt mk nb pl pt_PT pt_BR ro ru_RU sr sk sl es_ES es_US es_MX sv tr_TR uk uz ar zh_SG hi en_PH fr_CA"
XGETTEXT=/usr/bin/xgettext
MSGMERGE=/usr/bin/msgmerge
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-02-18 16:42+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ism/extras/efl_setting/isf_setting_wizard.cpp:312
+#: ism/extras/efl_setting/isf_setting_wizard.cpp:317
+msgid "Keyboard"
+msgstr ""
SRCROOT=../..
POTFILES=POTFILES.in
-ALL_LINGUAS="hy az eu bg ca zh_CN zh_HK zh_TW hr cs da nl_NL en en_US et fi fr_FR gl ka de_DE el_GR hu is ga it_IT ja_JP kk ko_KR lv lt mk nb pl pt_PT pt_BR ro ru_RU sr sk sl es_ES es_US sv tr_TR uk uz ar zh_SG hi en_PH fr_CA"
+ALL_LINGUAS="hy az eu bg ca zh_CN zh_HK zh_TW hr cs da nl_NL en en_US et fi fr_FR gl ka de_DE el_GR hu is ga it_IT ja_JP kk ko_KR lv lt mk nb pl pt_PT pt_BR ro ru_RU sr sk sl es_ES es_US es_MX sv tr_TR uk uz ar zh_SG hi en_PH fr_CA"
XGETTEXT=/usr/bin/xgettext
MSGMERGE=/usr/bin/msgmerge
--- /dev/null
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-02-18 16:42+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ism/src/scim_compose_key.cpp:126 ism/src/scim_imengine.cpp:765
+#: ism/src/scim_panel_agent.cpp:369 ism/src/scim_panel_agent.cpp:3817
+#: ism/src/scim_utility.cpp:706
+#: ism/extras/gtk2_immodule/gtkimcontextscim.cpp:1716
+msgid "English/Keyboard"
+msgstr ""
+
+#. return WideString ();
+#: ism/src/scim_compose_key.cpp:145
+msgid "English input service"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:707
+msgid "Amharic"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:708
+msgid "Arabic"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:709 ism/src/scim_utility.cpp:898
+msgid "Arabic (Egypt)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:710 ism/src/scim_utility.cpp:907
+msgid "Arabic (Lebanon)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:711
+msgid "Assamese"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:712 ism/src/scim_utility.cpp:923
+msgid "Azerbaijani"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:713
+msgid "Belarusian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:714 ism/src/scim_utility.cpp:879
+msgid "Bulgarian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:715 ism/src/scim_utility.cpp:716
+#: ism/src/scim_utility.cpp:918
+msgid "Bengali"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:717
+msgid "Bengali (India)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:718
+msgid "Tibetan"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:719
+msgid "Bosnian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:720 ism/src/scim_utility.cpp:858
+msgid "Catalan"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:721 ism/src/scim_utility.cpp:868
+#: ism/src/scim_keyboard_layout_data.h:4596
+msgid "Czech"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:722 ism/src/scim_utility.cpp:928
+msgid "Welsh"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:723 ism/src/scim_utility.cpp:859
+#: ism/src/scim_keyboard_layout_data.h:4598
+msgid "Danish"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:724 ism/src/scim_utility.cpp:829
+#: ism/src/scim_keyboard_layout_data.h:4606
+msgid "German"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:725
+msgid "Divehi"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:726 ism/src/scim_utility.cpp:878
+#: ism/src/scim_keyboard_layout_data.h:4609
+msgid "Greek"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:727
+msgid "English"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:728 ism/src/scim_utility.cpp:813
+msgid "English (Australian)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:729 ism/src/scim_utility.cpp:814
+msgid "English (Canadian)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:730
+msgid "English (British)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:731
+msgid "English (Ireland)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:732
+msgid "English (American)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:733 ism/src/scim_utility.cpp:734
+#: ism/src/scim_keyboard_layout_data.h:4622
+msgid "Spanish"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:735
+msgid "Spanish (Mexico)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:736 ism/src/scim_utility.cpp:875
+#: ism/src/scim_keyboard_layout_data.h:4601
+msgid "Estonian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:737 ism/src/scim_utility.cpp:857
+msgid "Basque"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:738
+msgid "Persian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:739 ism/src/scim_utility.cpp:862
+#: ism/src/scim_keyboard_layout_data.h:4602
+msgid "Finnish"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:740 ism/src/scim_utility.cpp:823
+#: ism/src/scim_keyboard_layout_data.h:4603
+msgid "French"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:741 ism/src/scim_utility.cpp:926
+msgid "Irish"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:742 ism/src/scim_utility.cpp:924
+msgid "Galician"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:743 ism/src/scim_utility.cpp:919
+msgid "Gujarati"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:744 ism/src/scim_utility.cpp:753
+#: ism/src/scim_utility.cpp:895
+msgid "Hebrew"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:745 ism/src/scim_utility.cpp:914
+msgid "Hindi"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:746 ism/src/scim_keyboard_layout_data.h:4595
+msgid "Croatian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:747 ism/src/scim_utility.cpp:869
+#: ism/src/scim_keyboard_layout_data.h:4610
+msgid "Hungarian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:748
+msgid "Armenian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:749
+msgid "Interlingua"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:750
+msgid "Indonesian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:751 ism/src/scim_utility.cpp:861
+#: ism/src/scim_keyboard_layout_data.h:4628
+msgid "Icelandic"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:752 ism/src/scim_utility.cpp:834
+#: ism/src/scim_keyboard_layout_data.h:4611
+msgid "Italian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:754 ism/src/scim_utility.cpp:887
+#: ism/src/scim_keyboard_layout_data.h:4612
+msgid "Japanese"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:755 ism/src/scim_utility.cpp:922
+msgid "Georgian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:756 ism/src/scim_utility.cpp:880
+msgid "Kazakh"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:757
+msgid "Cambodian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:758
+msgid "Kannada"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:759 ism/src/scim_utility.cpp:888
+msgid "Korean"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:760
+msgid "Laothian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:761 ism/src/scim_utility.cpp:877
+#: ism/src/scim_keyboard_layout_data.h:4629
+msgid "Lithuanian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:762 ism/src/scim_utility.cpp:876
+msgid "Latvian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:763 ism/src/scim_utility.cpp:881
+msgid "Macedonian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:764 ism/src/scim_utility.cpp:920
+msgid "Malayalam"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:765
+msgid "Mongolian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:766 ism/src/scim_utility.cpp:916
+msgid "Marathi"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:767
+msgid "Malay"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:768
+msgid "Burmese"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:769
+msgid "Nepali"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:770 ism/src/scim_utility.cpp:809
+#: ism/src/scim_keyboard_layout_data.h:4599
+msgid "Dutch"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:771
+msgid "Norwegian (Nynorsk)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:772
+msgid "Norwegian (Bokmal)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:773
+msgid "Oriya"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:774 ism/src/scim_utility.cpp:921
+msgid "Punjabi"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:775 ism/src/scim_utility.cpp:870
+#: ism/src/scim_keyboard_layout_data.h:4614
+msgid "Polish"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:776 ism/src/scim_utility.cpp:778
+#: ism/src/scim_utility.cpp:837 ism/src/scim_keyboard_layout_data.h:4615
+msgid "Portuguese"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:777 ism/src/scim_keyboard_layout_data.h:4616
+msgid "Portuguese (Brazil)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:779 ism/src/scim_utility.cpp:871
+msgid "Romanian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:780 ism/src/scim_utility.cpp:882
+#: ism/src/scim_keyboard_layout_data.h:4618
+msgid "Russian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:781 ism/src/scim_utility.cpp:927
+msgid "Sinhala"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:782 ism/src/scim_utility.cpp:873
+#: ism/src/scim_keyboard_layout_data.h:4619
+msgid "Slovak"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:783 ism/src/scim_utility.cpp:874
+#: ism/src/scim_keyboard_layout_data.h:4621
+msgid "Slovenian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:784
+msgid "Albanian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:785 ism/src/scim_utility.cpp:786
+#: ism/src/scim_utility.cpp:787
+msgid "Serbian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:788 ism/src/scim_utility.cpp:790
+#: ism/src/scim_utility.cpp:866 ism/src/scim_keyboard_layout_data.h:4625
+msgid "Swedish"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:789 ism/src/scim_utility.cpp:867
+msgid "Swedish (Finland)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:791 ism/src/scim_utility.cpp:917
+msgid "Tamil"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:792 ism/src/scim_utility.cpp:915
+msgid "Telugu"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:793 ism/src/scim_utility.cpp:894
+msgid "Thai"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:794 ism/src/scim_utility.cpp:885
+#: ism/src/scim_keyboard_layout_data.h:4626
+msgid "Turkish"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:795
+msgid "Uighur"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:796 ism/src/scim_utility.cpp:884
+#: ism/src/scim_keyboard_layout_data.h:4630
+msgid "Ukrainian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:797 ism/src/scim_utility.cpp:912
+msgid "Urdu"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:798
+msgid "Uzbek"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:799 ism/src/scim_utility.cpp:913
+msgid "Vietnamese"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:800
+msgid "Walloon"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:801 ism/src/scim_utility.cpp:802
+msgid "Yiddish"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:803
+msgid "Chinese"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:804 ism/src/scim_utility.cpp:806
+msgid "Chinese (Simplified)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:805
+msgid "Chinese (Hongkong)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:807
+msgid "Chinese (Traditional)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:810
+msgid "Dutch (Belgian)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:811
+msgid "English (United States)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:812
+msgid "English (United Kingdom)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:815
+msgid "English (New Zealand)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:816
+msgid "English (Irish)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:817
+msgid "English (South Africa)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:818
+msgid "English (Jamaica)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:819
+msgid "English (Belize)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:820
+msgid "English (Trinidad)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:821
+msgid "English (Zimbabwe)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:822
+msgid "English (Philippines)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:824
+msgid "French (Belgian)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:825 ism/src/scim_keyboard_layout_data.h:4604
+msgid "French (Canadian)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:826
+msgid "French (Swiss)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:827
+msgid "French (Luxembourg)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:828
+msgid "French (Monaco)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:830 ism/src/scim_keyboard_layout_data.h:4608
+msgid "German (Swiss)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:831
+msgid "German (Austrian)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:832
+msgid "German (Luxembourg)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:833
+msgid "German (Liechtenstein)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:835
+msgid "Italian (Swiss)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:836
+msgid "Portuguese (Brazilian)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:838
+msgid "Spanish (Traditional Sort)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:839
+msgid "Spanish (Mexican)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:840
+msgid "Spanish (Guatemala)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:841
+msgid "Spanish (Costa Rica)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:842
+msgid "Spanish (Panama)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:843
+msgid "Spanish (Dominican Republic)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:844
+msgid "Spanish (Venezuela)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:845
+msgid "Spanish (Colombia)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:846
+msgid "Spanish (Peru)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:847
+msgid "Spanish (Argentina)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:848
+msgid "Spanish (Ecuador)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:849
+msgid "Spanish (Chile)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:850
+msgid "Spanish (Uruguay)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:851
+msgid "Spanish (Paraguay)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:852
+msgid "Spanish (Bolivia)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:853
+msgid "Spanish (El Salvador)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:854
+msgid "Spanish (Honduras)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:855
+msgid "Spanish (Nicaragua)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:856
+msgid "Spanish (Puerto Rico)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:860
+msgid "Afrikaans"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:863
+msgid "Malay (Malaysia)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:864
+msgid "Malay (Brunei Darussalam)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:865 ism/src/scim_keyboard_layout_data.h:4613
+msgid "Norwegian"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:872
+msgid "Serbian (Latin)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:883
+msgid "Serbian (Cyrillic)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:886
+msgid "Uzbek (Latin)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:889
+msgid "Chinese (Taiwan)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:890
+msgid "Chinese (Hong Kong)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:891
+msgid "Chinese (Macau)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:892
+msgid "Chinese (PRC)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:893
+msgid "Chinese (Singapore)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:896
+msgid "Arabic (Saudi Arabia)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:897
+msgid "Arabic (Iraq)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:899
+msgid "Arabic (Libya)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:900
+msgid "Arabic (Algeria)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:901
+msgid "Arabic (Morocco)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:902
+msgid "Arabic (Tunisia)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:903
+msgid "Arabic (Oman)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:904
+msgid "Arabic (Yemen)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:905
+msgid "Arabic (Syria)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:906
+msgid "Arabic (Jordan)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:908
+msgid "Arabic (Kuwait)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:909
+msgid "Arabic (UAE)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:910
+msgid "Arabic (Bahrain)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:911
+msgid "Arabic (Qatar)"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:925
+msgid "Hausa"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:929
+msgid "Xhosa"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:930
+msgid "Yoruba"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:931
+msgid "Zulu"
+msgstr ""
+
+#: ism/src/scim_utility.cpp:1029
+msgid "Other"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4592
+#: ism/modules/imengine/scim_socket_imengine.cpp:418
+#: ism/modules/imengine/scim_socket_imengine.cpp:477
+#: ism/modules/imengine/scim_socket_imengine.cpp:507
+#: ism/modules/imengine/scim_socket_imengine.cpp:537
+msgid "Unknown"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4593
+msgid "English (US)"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4594
+msgid "Belgian"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4597
+msgid "Czech (qwerty)"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4600
+msgid "Dvorak"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4605
+msgid "French (Switzerland)"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4607
+msgid "German (with deadkeys)"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4617
+msgid "Portuguese (Brazil US accents)"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4620
+msgid "Slovak (qwerty)"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4623
+msgid "Spanish (CP 850)"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4624
+msgid "Spanish (Latin America)"
+msgstr ""
+
+#: ism/src/scim_keyboard_layout_data.h:4627
+msgid "English (UK)"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:57
+msgid "Simplified-Traditional Chinese Conversion"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:60
+msgid "Convert between Simplified Chinese and Traditional Chinese"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:71
+msgid "SC-TC"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:73
+#: ism/modules/filter/scim_sctc_filter.cpp:78
+msgid "Simplified-Traditional Chinese conversion"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:76
+msgid "No Conversion"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:81
+msgid "Simplified to Traditional"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:83
+msgid "Convert Simplified Chinese to Traditional Chinese"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:86
+msgid "Traditional to Simplified"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:88
+msgid "Convert Traditional Chinese to Simplified Chinese"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:300
+msgid "James Su <suzhe@tsinghua.org.cn>"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:425
+#: ism/modules/filter/scim_sctc_filter.cpp:555
+#: ism/modules/filter/scim_sctc_filter.cpp:571
+msgid "SC->TC"
+msgstr ""
+
+#: ism/modules/filter/scim_sctc_filter.cpp:431
+#: ism/modules/filter/scim_sctc_filter.cpp:559
+#: ism/modules/filter/scim_sctc_filter.cpp:575
+msgid "TC->SC"
+msgstr ""
+
+#: ism/extras/gtk2_immodule/gtkimcontextscim.cpp:1666
+msgid "Smart Common Input Method platform "
+msgstr ""
+
+#: ism/extras/gtk2_immodule/gtkimcontextscim.cpp:1668
+msgid ""
+"\n"
+"(C) 2002-2005 James Su <suzhe@tsinghua.org.cn>\n"
+"\n"
+msgstr ""
+
+#: ism/extras/gtk2_immodule/gtkimcontextscim.cpp:1674
+msgid ""
+":\n"
+"\n"
+msgstr ""
+
+#: ism/extras/gtk2_immodule/gtkimcontextscim.cpp:1677
+msgid ""
+"\n"
+"\n"
+msgstr ""
+
+#: ism/extras/gtk_panel/scim_panel_gtk.cpp:969
+msgid "Enable"
+msgstr ""
+
+#. gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
+#. gtk_tree_view_column_set_fixed_width (column, 232);
+#: ism/extras/gtk_panel/scim_panel_gtk.cpp:990
+msgid "Name"
+msgstr ""
+
+#: ism/utils/scimstringview.c:201
+msgid "Cursor Position"
+msgstr ""
+
+#: ism/utils/scimstringview.c:202
+msgid "The current position of the insertion cursor in chars."
+msgstr ""
+
+#: ism/utils/scimstringview.c:211
+msgid "Maximum length"
+msgstr ""
+
+#: ism/utils/scimstringview.c:212
+msgid "Maximum number of characters for this string view. Zero if no maximum."
+msgstr ""
+
+#: ism/utils/scimstringview.c:221
+msgid "Maximum width"
+msgstr ""
+
+#: ism/utils/scimstringview.c:222
+msgid "Maximum width of this string view."
+msgstr ""
+
+#: ism/utils/scimstringview.c:231
+msgid "Has Frame"
+msgstr ""
+
+#: ism/utils/scimstringview.c:232
+msgid "FALSE removes outside bevel from string view."
+msgstr ""
+
+#: ism/utils/scimstringview.c:239
+msgid "Draw cursor"
+msgstr ""
+
+#: ism/utils/scimstringview.c:240
+msgid "TRUE draw blinking cursor."
+msgstr ""
+
+#: ism/utils/scimstringview.c:247
+msgid "Auto move cursor"
+msgstr ""
+
+#: ism/utils/scimstringview.c:248
+msgid "TRUE auto move cursor position when mouse clicking."
+msgstr ""
+
+#: ism/utils/scimstringview.c:255
+msgid "Forward button press/release event"
+msgstr ""
+
+#: ism/utils/scimstringview.c:256
+msgid "TRUE forward button press/release event to user program."
+msgstr ""
+
+#: ism/utils/scimstringview.c:263
+msgid "Auto resize the widget to fit the string"
+msgstr ""
+
+#: ism/utils/scimstringview.c:264
+msgid "TRUE Auto resize on."
+msgstr ""
+
+#: ism/utils/scimstringview.c:271
+msgid "Emit move_cursor signal when press/release the string"
+msgstr ""
+
+#: ism/utils/scimstringview.c:272
+msgid "TRUE Emit move_cursor signal when press the string."
+msgstr ""
+
+#: ism/utils/scimstringview.c:279
+msgid "Width in chars"
+msgstr ""
+
+#: ism/utils/scimstringview.c:280
+msgid "Number of characters to leave space for in the string view."
+msgstr ""
+
+#: ism/utils/scimstringview.c:289
+msgid "Scroll offset"
+msgstr ""
+
+#: ism/utils/scimstringview.c:290
+msgid "Number of pixels of the string view scrolled off the screen to the left"
+msgstr ""
+
+#: ism/utils/scimstringview.c:299
+msgid "Text"
+msgstr ""
+
+#: ism/utils/scimstringview.c:300
+msgid "The contents of the string view"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:161
+msgid "Selected _Keys:"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:206
+msgid "Key Code:"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:224
+msgid "....."
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:229
+msgid "Modifiers:"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:242
+msgid "_Ctrl"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:246
+msgid "A_lt"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:250
+msgid "_Shift"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:254
+msgid "_Release"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:264
+msgid "_Meta"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:268
+msgid "S_uper"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:272
+msgid "_Hyper"
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:337
+msgid "Please enter a Key Code first."
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:391
+msgid ""
+"Press a key (or a key combination).\n"
+"This dialog will be closed \n"
+"when the key is released."
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:395
+msgid "Grabbing a key."
+msgstr ""
+
+#: ism/utils/scimkeyselection.cpp:686
+msgid "Key Selection"
+msgstr ""
+
+#: ism/utils/scimtrayicon.c:108
+msgid "Orientation"
+msgstr ""
+
+#: ism/utils/scimtrayicon.c:109
+msgid "The orientation of the tray."
+msgstr ""
+
+#. Normal Layout
+#: ism/demos/isf_layout_efl.cpp:200
+msgid "NORMAL LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:200
+msgid "click to enter TEXT"
+msgstr ""
+
+#. Number Layout
+#: ism/demos/isf_layout_efl.cpp:204
+msgid "NUMBER LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:204
+msgid "click to enter NUMBER"
+msgstr ""
+
+#. Email Layout
+#: ism/demos/isf_layout_efl.cpp:208
+msgid "EMAIL LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:208
+msgid "click to enter EMAIL"
+msgstr ""
+
+#. URL Layout
+#: ism/demos/isf_layout_efl.cpp:212
+msgid "URL LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:212
+msgid "click to enter URL"
+msgstr ""
+
+#. Phonenumber Layout
+#: ism/demos/isf_layout_efl.cpp:216
+msgid "PHONENUMBER LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:216
+msgid "click to enter PHONENUMBER"
+msgstr ""
+
+#. IP Layout
+#: ism/demos/isf_layout_efl.cpp:220
+msgid "IP LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:220
+msgid "click to enter IP"
+msgstr ""
+
+#. Month Layout
+#: ism/demos/isf_layout_efl.cpp:224
+msgid "MONTH LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:224
+msgid "click to enter MONTH"
+msgstr ""
+
+#. Number Only Layout
+#: ism/demos/isf_layout_efl.cpp:228
+msgid "NUMBERONLY LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:228
+msgid "click to enter NUMBERONLY"
+msgstr ""
+
+#. Password Layout
+#: ism/demos/isf_layout_efl.cpp:232
+msgid "PASSWORD LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:232
+msgid "click to enter PASSWORD"
+msgstr ""
+
+#. Terminal Layout
+#: ism/demos/isf_layout_efl.cpp:236
+msgid "TERMINAL LAYOUT"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:236
+msgid "click to enter TERMINAL"
+msgstr ""
+
+#: ism/demos/isf_layout_efl.cpp:256
+msgid "Layout"
+msgstr ""
+
+#: ism/demos/isf_demo_efl.cpp:169
+msgid "Previous"
+msgstr ""
+
+#. service_add_extra_data (ad->data, "navi_btn_left", NULL);
+#: ism/demos/isf_demo_efl.cpp:171
+msgid "Next"
+msgstr ""
+
+#: ism/demos/isf_demo_efl.cpp:200
+msgid "ISF Demo"
+msgstr ""
+
+#: ism/demos/isf_entry_event_efl.cpp:149
+msgid "Entry Event"
+msgstr ""
+
+#: ism/demos/isf_event_efl.cpp:231
+msgid "Label Event"
+msgstr ""
+
+#: ism/demos/isf_event_efl.cpp:261
+msgid "Event"
+msgstr ""
+
+#: ism/demos/isf_imcontrol_efl.cpp:236
+msgid "IM Control"
+msgstr ""
SRCROOT=../..
POTFILES=POTFILES.in
-ALL_LINGUAS="hy az eu bg ca zh_CN zh_HK zh_TW hr cs da nl_NL en en_US et fi fr_FR gl ka de_DE el_GR hu is ga it_IT ja_JP kk ko_KR lv lt mk nb pl pt_PT pt_BR ro ru_RU sr sk sl es_ES es_US sv tr_TR uk uz ar zh_SG hi en_PH fr_CA"
+ALL_LINGUAS="hy az eu bg ca zh_CN zh_HK zh_TW hr cs da nl_NL en en_US et fi fr_FR gl ka de_DE el_GR hu is ga it_IT ja_JP kk ko_KR lv lt mk nb pl pt_PT pt_BR ro ru_RU sr sk sl es_ES es_US es_MX sv tr_TR uk uz ar zh_SG hi en_PH fr_CA"
XGETTEXT=/usr/bin/xgettext
MSGMERGE=/usr/bin/msgmerge
+ISF 2.4.6312 :
+ 1. [setting] change separate and dialogue style
+
+
+ISF 2.4.6311 :
+ 1. fix delete/get_surrounding_text call sequence problem
+
+
+ISF 2.4.6309 :
+ 1. [isf-panel-efl] remove ui_create_candidate_window() in slot_set_keyboard_ise
+ 2. [panel] fix bug panel hasn't handled onnection during booting
+
+
+ISF 2.4.6308 :
+ 1. [demo] change code for implementing editfield
+
+
+ISF 2.4.6307 :
+ 1. Split SMACK rule from manifest file
+ 2. Add SMACK rule
+ 3. [panel] Check X display to avoid crash
+
+
+ISF 2.4.6306 :
+ 1. [systemd] Fix Smack labels for systemd units
+ 2. [isfcontrol] Add isf_control_set_active_ise_to_default API
+ 3. [panel] Modified the keyboard size to be 0 when OFF mode specified
+ 4. [panel] set keyboard state and geometry in only window not zone
+ 5. Add Esperanto and Sindhi language.
+ 6. IME won't be hidden when lockscreen appears
+
+
+ISF 2.4.6228 :
+ 1. [panel] Add monitor for active ISE file
+
+
+ISF 2.4.6227 :
+ 1. [panel] Add timer for system status check function, move elm_init() position
+ 2. Update control APIs for C application
+
+
+ISF 2.4.6226 :
+ 1. change smack label about app_loging
+ 2. add svi-data, sound_server, sys-assert rule in manifest
+
+
+ISF 2.4.6222 :
+ 1. [demo] IME will be hidden when back key in naviframe is pressed
+ 2. add smack rule for shared library
+ 3. [immodule] input panel event callback is moved into ecore_imf
+
+
+ISF 2.4.6221 :
+ 1. fix: "onoff" style genlist item, drag the check button to enable/disable
+ 2. [immodule] IME will be hidden when END_KEY is released.
+
+
+ISF 2.4.6218 :
+ 1.add po for es_MX
+
+
+ISF 2.4.6214 :
+ 1. modify isf.manifest to give permission for the executable files
+
+
+ISF 2.4.6213 :
+ 1. [isf-panel-efl] Fix 'v' button issue
+ 2. [immodule] display warning in case that mouse up event occurs without focus
+ 3. [immodule] fix bug hide event callback is delivered when canvas lost focus and IME is already hidden state
+ 4. [panel] set vconf value for power management
+ 5. [panel] set transient_for before showing window
+
+
+ISF 2.4.6207 :
+ 1. [setting] on_pause on_resume function update
+ 2. Set app privilege for scim process
+ 3. change trigger hotkey to shift+space according to H/W keyboard UI guide
+ 4. Check hardware keyboard when update ISE information
+ 5. [isf-panel-efl] Update candidate window resize
+ 6. [isf-panel-efl ] Added code for sending GEOMETRY_EVENT when there is a change
+ 7. [immodule] display the language on the notification bar when trigger key is pressed.
+
+
+ISF 2.4.6205 :
+ 1. Launch initial ISE when active soft ISE is removed
+
+
+ISF 2.4.6202 :
+ 1. [isf-panel-efl] Call config->reload () in PanelAgent reload slot fucntion
+
+
+ISF 2.3.6131 :
+ 1. [panel] fix logic to create control window
+ 2. [immodule] fix bug preedit doesn't appear sometimes
+
+
+ISF 2.3.6130 :
+ 1. [immodule] fix bug not to send will hide ack
+
+
+ISF 2.3.6129 :
+ 1. [setting] fix: reset couldn't work well
+ 2. The feature for synchronization with window manager newly added
+
+
+ISF 2.3.6128 :
+ 1. [immodule] display a variety of event logs in dlog
+ 2. [immodule] change input panel state when root window property is changed
+ 3. [immodule] fix bug that language information hasn't be transfered in ISE Context.
+ 4. [demo] Add language demo
+ 5. fix for GCC 4.7 build
+
+
+ISF 2.3.6123 :
+ 1. ignore input panel event when hardware keyboard is connected.
+ 2. [immodule] Add dlog related to conformant status and geometry information
+ 3. [immodule] Use notification library instead of syspopup
+
+
+ISF 2.3.6122 :
+ 1. Remove unused ISF logs
+ 2. fix memory leak related to ecore_x_e_window_profile_get
+
+
+ISF 2.3.6119 :
+ 1. [immodule] Compare window ID in X window focus out callback function
+
+
+ISF 2.3.6118 :
+ 1. [immodule] Hide IME after rendering conformant area
+ 2. [immodule] add X window focus out handler for X based application
+
+
ISF 2.3.6117 :
1. [panel] Call elm_win_raise () when expand button is clicked
2. Update boilerplate