merge with master
authorJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:19:59 +0000 (01:19 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Fri, 15 Mar 2013 16:19:59 +0000 (01:19 +0900)
59 files changed:
Makefile.am
configure.ac
isf.manifest
isf.rule [new file with mode: 0755]
ism/configs/config
ism/demos/Makefile.am
ism/demos/include/isf_demo_efl.h
ism/demos/include/isf_language_efl.h [new file with mode: 0644]
ism/demos/isf_autocapital_efl.cpp
ism/demos/isf_demo_efl.cpp
ism/demos/isf_entry_event_efl.cpp
ism/demos/isf_event_efl.cpp
ism/demos/isf_imcontrol_efl.cpp
ism/demos/isf_imdata_set_efl.cpp
ism/demos/isf_language_efl.cpp [new file with mode: 0644]
ism/demos/isf_layout_efl.cpp
ism/demos/isf_prediction_efl.cpp
ism/demos/isf_return_key_disable_efl.cpp
ism/demos/isf_return_key_type_efl.cpp
ism/extras/efl_immodule/Makefile.am
ism/extras/efl_immodule/isf_imf_context.cpp
ism/extras/efl_immodule/isf_imf_context.h
ism/extras/efl_immodule/isf_imf_control.cpp
ism/extras/efl_immodule/isf_imf_control.h
ism/extras/efl_immodule/isf_imf_control_ui.cpp
ism/extras/efl_immodule/isf_imf_control_ui.h
ism/extras/efl_immodule/isf_imf_module.cpp
ism/extras/efl_panel/Makefile.am
ism/extras/efl_panel/isf_panel_efl.cpp
ism/extras/efl_panel/isf_panel_utility.cpp
ism/extras/efl_setting/isf_setting_efl.cpp
ism/modules/frontend/scim_socket_frontend.cpp
ism/modules/imengine/scim_socket_imengine.cpp
ism/src/Makefile.am
ism/src/isf_control.cpp
ism/src/isf_control.h
ism/src/isf_imcontrol_client.cpp
ism/src/isf_imcontrol_client.h
ism/src/scim.cpp
ism/src/scim_backend.cpp
ism/src/scim_event.h
ism/src/scim_global_config.cpp
ism/src/scim_global_config.h
ism/src/scim_helper_launcher.cpp
ism/src/scim_panel_agent.cpp
ism/src/scim_panel_agent.h
ism/src/scim_panel_client.cpp
ism/src/scim_trans_commands.h
ism/src/scim_transaction.cpp
ism/src/scim_utility.cpp
packaging/isf.changes
packaging/isf.spec
po/isfsetting_efl/es_MX.po [new file with mode: 0644]
po/isfsetting_efl/update-po.sh
po/kbwizard_efl/es_MX.po [new file with mode: 0644]
po/kbwizard_efl/update-po.sh
po/scim/es_MX.po [new file with mode: 0644]
po/scim/update-po.sh
releasenote.txt

index d1fc456..835a835 100644 (file)
@@ -56,6 +56,9 @@ endif
 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
index 376bc1b..e8b953a 100755 (executable)
@@ -1,6 +1,6 @@
 # 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_])
 
@@ -10,8 +10,8 @@ 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
 
@@ -84,7 +84,7 @@ AM_CONFIG_HEADER([config.h])
 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
@@ -248,8 +248,8 @@ PKG_CHECK_MODULES(DLOG, [dlog >= 0])
 # 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],
index db5b143..17dcacb 100755 (executable)
@@ -1,14 +1,6 @@
 <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"/>
diff --git a/isf.rule b/isf.rule
new file mode 100755 (executable)
index 0000000..a3fd5f5
--- /dev/null
+++ b/isf.rule
@@ -0,0 +1,9 @@
+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
index 67a99ae..c765f09 100755 (executable)
@@ -8,8 +8,9 @@
 /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
index 5b19573..41af462 100644 (file)
@@ -37,7 +37,8 @@ isf_demo_efl_SOURCES  = isf_demo_efl.cpp \
                         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@ \
@@ -49,4 +50,4 @@ isf_demo_efl_LDFLAGS  = @EFL_LIBS@ @LTLIBINTL@ -rpath $(libdir) \
                         @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
index e392648..22d7116 100644 (file)
@@ -48,6 +48,12 @@ struct appdata {
     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
diff --git a/ism/demos/include/isf_language_efl.h b/ism/demos/include/isf_language_efl.h
new file mode 100644 (file)
index 0000000..3a34b2d
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * 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
+*/
index 39705ae..557e4cd 100644 (file)
@@ -28,7 +28,7 @@
 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);
index 8bc98f4..c4093a8 100644 (file)
 #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)
 {
@@ -81,7 +102,7 @@ static void layout_cb (ui_gadget_h ug, enum ug_mode mode, void *priv)
         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;
@@ -158,6 +179,7 @@ static void keyboard_setting_wizard_bt (void *data, Evas_Object *obj, void *even
 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");
@@ -168,34 +190,10 @@ static int create_demo_view (struct appdata *ad)
     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);
 
@@ -274,33 +272,42 @@ static Evas_Object* create_win (const char *name)
 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);
 
@@ -329,7 +336,7 @@ static Eina_Bool _keydown_event (void *data, int type, void *event)
     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 {
@@ -366,7 +373,7 @@ static int app_create (void *data)
         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);
@@ -398,17 +405,25 @@ static int app_create (void *data)
 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;
 }
@@ -449,44 +464,85 @@ int main (int argc, char *argv[])
     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;
@@ -496,7 +552,13 @@ void add_layout_to_naviframe (void *data, Evas_Object *lay_in, const char *title
     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);
 }
 
 /*
index 4dcd446..d44c4a7 100644 (file)
@@ -25,7 +25,6 @@
 #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;
@@ -34,13 +33,12 @@ static Evas_Object * _commit_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__);
     }
 }
 
@@ -86,10 +84,10 @@ static Eina_Bool _ecore_imf_event_commit_cb (void *data, int type, void *event)
     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;
index 260ded6..f20dd1f 100644 (file)
@@ -121,8 +121,7 @@ static void nf_back_event_cb (void *data, Evas_Object *obj, void *event_info)
     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;
@@ -151,8 +150,8 @@ static void isf_label_event_demo_bt (void *data, Evas_Object *obj, void *event_i
     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 ();
 
index 8d8d5b3..5acf925 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include "isf_demo_efl.h"
+#include "isf_control.h"
 
 static Ecore_IMF_Context *imf_context = NULL;
 static Elm_Genlist_Item_Class itci;
@@ -36,8 +37,10 @@ enum {
     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[]={
@@ -49,8 +52,10 @@ 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)
@@ -129,18 +134,60 @@ void test_input_panel_state_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)
@@ -177,11 +224,17 @@ static void test_api (void *data, Evas_Object *obj, void *event_info)
     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;
@@ -191,7 +244,7 @@ static void test_api (void *data, Evas_Object *obj, void *event_info)
 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;
     }
 }
index 08e1fab..c9009e7 100644 (file)
@@ -50,12 +50,12 @@ static Evas_Object * create_inner_layout (void *data)
 
     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;
diff --git a/ism/demos/isf_language_efl.cpp b/ism/demos/isf_language_efl.cpp
new file mode 100644 (file)
index 0000000..bb0b9fa
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * 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
+*/
index 31ed012..e698344 100644 (file)
 #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)
 {
@@ -132,11 +138,9 @@ _print_keyboard_geometry (Ecore_X_Window xwin)
 }
 
 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) {
@@ -152,19 +156,19 @@ _prop_change (void *data, int type, void *event)
 
 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);
@@ -238,6 +242,16 @@ static Evas_Object * create_inner_layout (void *data)
     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");
@@ -247,7 +261,7 @@ static Evas_Object * create_inner_layout (void *data)
     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;
 }
index 93b8baf..4bb93a1 100644 (file)
@@ -28,7 +28,7 @@
 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;
index 578a5e6..55526e6 100644 (file)
@@ -43,7 +43,7 @@ _cursor_changed_cb(void *data, Evas_Object *obj, void *event_info)
 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;
index 2a3451b..8eec587 100644 (file)
@@ -29,7 +29,7 @@
 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;
index d79f664..f94a4f5 100644 (file)
@@ -37,7 +37,7 @@ libisf_imf_module_la_CXXFLAGS = @EFL_CFLAGS@ \
                                 @UTILX_CFLAGS@ \
                                 @VCONF_CFLAGS@ \
                                 @DLOG_CFLAGS@\
-                                @SYSPOPUP_CFLAGS@
+                                @NOTIFICATION_CFLAGS@
 
 libisf_imf_module_la_LDFLAGS  = -rpath $(moduledir) \
                                 -avoid-version \
@@ -49,5 +49,5 @@ libisf_imf_module_la_LIBADD  =  -lstdc++ \
                                 @UTILX_LIBS@ \
                                 @VCONF_LIBS@ \
                                 @DLOG_LIBS@ \
-                                @SYSPOPUP_LIBS@\
+                                @NOTIFICATION_LIBS@\
                                 $(top_builddir)/ism/src/libscim@SCIM_EPOCH@.la
index 69c8772..a48e14d 100644 (file)
@@ -45,7 +45,7 @@
 #include <utilX.h>
 #include <vconf.h>
 #include <vconf-keys.h>
-#include <syspopup_caller.h>
+#include <notification.h>
 
 #include "scim_private.h"
 #include "scim.h"
@@ -56,7 +56,7 @@
 # define CODESET "INVALID"
 #endif
 
-const double DOUBLE_SPACE_INTERVAL = 1.0;
+#define ENABLE_BACKKEY 1
 
 using namespace scim;
 
@@ -233,6 +233,7 @@ static void     reload_config_callback                  (const ConfigPointer
 
 static void     fallback_commit_string_cb               (IMEngineInstanceBase   *si,
                                                          const WideString       &str);
+static void     _display_input_language                 (EcoreIMFContextISF *ic);
 
 /* Local variables declaration */
 static String                                           _language;
@@ -268,7 +269,8 @@ static Ecore_Fd_Handler                                *_panel_iochannel_read_ha
 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;
@@ -431,20 +433,35 @@ find_ic (int id)
 }
 
 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;
@@ -484,9 +501,13 @@ register_key_handler ()
 {
     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;
 }
@@ -496,9 +517,14 @@ unregister_key_handler ()
 {
     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;
@@ -1197,6 +1223,7 @@ EAPI void
 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;
 
@@ -1223,12 +1250,19 @@ isf_imf_context_focus_out (Ecore_IMF_Context *ctx)
             _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;
     }
 }
@@ -1702,6 +1736,8 @@ isf_imf_context_filter_event (Ecore_IMF_Context *ctx, Ecore_IMF_Event_Type type,
             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 {
@@ -2389,14 +2425,20 @@ filter_hotkeys (EcoreIMFContextISF *ic, const KeyEvent &key)
             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);
@@ -2516,8 +2558,10 @@ turn_on_ic (EcoreIMFContextISF *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);
@@ -2545,8 +2589,10 @@ turn_off_ic (EcoreIMFContextISF *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), false);
+            _config->flush ();
+        }
 
         if (ic->impl->use_preedit && ic->impl->preedit_string.length ()) {
             ecore_imf_context_preedit_changed_event_add (ic->ctx);
@@ -2784,25 +2830,23 @@ _popup_message (const char *_ptext)
     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
@@ -2897,6 +2941,8 @@ open_specific_factory (EcoreIMFContextISF *ic,
         }
     } 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) {
@@ -2910,8 +2956,10 @@ open_specific_factory (EcoreIMFContextISF *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), false);
+                _config->flush ();
+            }
 
             if (ic->impl->use_preedit && ic->impl->preedit_string.length ()) {
                 ecore_imf_context_preedit_changed_event_add (ic->ctx);
@@ -3532,7 +3580,7 @@ slot_get_surrounding_text (IMEngineInstanceBase *si,
             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);
index cc1c027..9091bd3 100644 (file)
@@ -31,6 +31,9 @@
 
 #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;
 
index f62abdc..7aae068 100644 (file)
@@ -329,6 +329,24 @@ EAPI int _isf_imf_context_control_focus_out (void)
     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
 */
index e5e8fe5..5ab3f40 100644 (file)
@@ -59,6 +59,9 @@ extern "C"
     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 */
index 246083e..386580f 100644 (file)
 
 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;
@@ -58,7 +50,21 @@ static unsigned int       hw_kbd_num = 0;
 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 ()
 {
@@ -71,24 +77,50 @@ 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;
 }
@@ -122,6 +154,9 @@ static void _save_current_xid (Ecore_IMF_Context *ctx)
         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 ();
@@ -130,9 +165,6 @@ static void _save_current_xid (Ecore_IMF_Context *ctx)
 
 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)
@@ -147,28 +179,49 @@ static void _event_callback_call (Ecore_IMF_Input_Panel_Event type, int value)
         }
     }
 
-    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 ();
     }
 }
 
@@ -195,10 +248,27 @@ static int _get_context_id (Ecore_IMF_Context *ctx)
     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;
 }
@@ -214,10 +284,10 @@ static Eina_Bool _hide_timer_handler (void *data)
 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)
@@ -226,16 +296,18 @@ 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);
     }
 }
@@ -255,11 +327,41 @@ static Eina_Bool _compare_context (Ecore_IMF_Context *ctx1, Ecore_IMF_Context *c
     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) {
@@ -289,7 +391,7 @@ EAPI void isf_imf_input_panel_init (void)
         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;
     }
 
@@ -303,6 +405,8 @@ EAPI void isf_imf_input_panel_shutdown (void)
         _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;
@@ -334,6 +438,13 @@ EAPI void isf_imf_context_input_panel_show (Ecore_IMF_Context* ctx)
         _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);
 
@@ -358,6 +469,9 @@ EAPI void isf_imf_context_input_panel_show (Ecore_IMF_Context* ctx)
         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);
 
@@ -368,7 +482,6 @@ EAPI void isf_imf_context_input_panel_show (Ecore_IMF_Context* ctx)
 
     if (hw_kbd_num != 0) {
         LOGD ("H/W keyboard is existed.\n");
-        printf ("H/W keyboard is existed.\n");
         return;
     }
 
@@ -426,7 +539,6 @@ EAPI void isf_imf_context_input_panel_show (Ecore_IMF_Context* ctx)
         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);
@@ -536,7 +648,7 @@ EAPI void isf_imf_context_input_panel_imdata_get (Ecore_IMF_Context *ctx, void*
 }
 
 /**
- * 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
@@ -632,7 +744,7 @@ EAPI Eina_Bool isf_imf_context_input_panel_return_key_disabled_get (Ecore_IMF_Co
 }
 
 /**
- * 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.
@@ -680,66 +792,16 @@ EAPI Ecore_IMF_Input_Panel_State isf_imf_context_input_panel_state_get (Ecore_IM
     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
@@ -785,6 +847,33 @@ EAPI void isf_imf_context_control_focus_out (Ecore_IMF_Context *ctx)
     _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()
  */
@@ -797,6 +886,8 @@ static bool _process_ise_panel_showed (void)
     /* 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;
 }
 
@@ -814,6 +905,9 @@ static bool _process_ise_panel_hided (void)
     /* 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;
 }
 
@@ -829,8 +923,7 @@ static bool _process_update_input_context (Transaction &trans)
         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;
@@ -840,6 +933,8 @@ static bool _process_update_input_context (Transaction &trans)
             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;
         }
@@ -847,6 +942,11 @@ static bool _process_update_input_context (Transaction &trans)
 
     _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;
 }
 
index 0163440..a0ac30b 100644 (file)
@@ -31,6 +31,8 @@
 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 ();
@@ -50,8 +52,6 @@ extern "C"
     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);
@@ -60,10 +60,11 @@ extern "C"
     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
 }
index 29149f6..fb67dd9 100644 (file)
@@ -71,8 +71,8 @@ extern "C"
         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
     };
index 89fbb51..d5ff1bd 100644 (file)
@@ -28,12 +28,13 @@ bin_PROGRAMS           = $(CONFIG_SCIM_PANEL_EFL)
 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
 
index 5321062..52e03b4 100644 (file)
@@ -29,6 +29,8 @@
 #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>
@@ -45,6 +47,7 @@
 #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"
@@ -55,6 +58,7 @@
 #endif
 #include <privilege-control.h>
 #include "isf_panel_utility.h"
+#include <dlog.h>
 
 
 using namespace scim;
@@ -74,8 +78,13 @@ 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.
@@ -89,8 +98,6 @@ extern std::vector<String>          _icons;
 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;
 
 
@@ -108,8 +115,8 @@ typedef enum _VIRTUAL_KEYBOARD_STATE {
 // 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);
@@ -119,6 +126,10 @@ static void       ui_candidate_show                    (bool bSetVirtualKbd = tr
 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);
 
@@ -154,8 +165,16 @@ static void       slot_accept_connection               (int fd);
 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.
@@ -178,6 +197,8 @@ static Evas_Object       *_line_items [SCIM_LOOKUP_TABLE_MAX_PAGESIZE];
 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;
@@ -252,7 +273,7 @@ static int                _click_object                     = 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;
@@ -264,6 +285,15 @@ static Ecore_Timer       *_check_size_timer                 = NULL;
 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.
@@ -318,29 +348,40 @@ static void get_ise_geometry (RECT_INFO &info, VIRTUAL_KEYBOARD_STATE kbd_state)
 {
     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;
 }
 
 /**
@@ -348,135 +389,197 @@ static void get_ise_geometry (RECT_INFO &info, VIRTUAL_KEYBOARD_STATE kbd_state)
  *
  * @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";
 
@@ -489,8 +592,13 @@ static bool set_keyboard_ise (const String &uuid)
         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);
@@ -498,6 +606,10 @@ static bool set_keyboard_ise (const String &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;
 }
 
@@ -505,10 +617,11 @@ static bool set_keyboard_ise (const String &uuid)
  * @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";
 
@@ -516,7 +629,7 @@ static bool set_helper_ise (const String &uuid)
 
     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);
@@ -532,11 +645,19 @@ static bool set_helper_ise (const String &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;
 }
 
@@ -559,9 +680,9 @@ static bool set_active_ise (const String &uuid)
     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]);
@@ -633,7 +754,7 @@ static int ui_candidate_get_valid_height (void)
 
     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)
@@ -663,14 +784,9 @@ static void ui_candidate_window_resize (int new_width, int new_height)
     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;
@@ -682,10 +798,47 @@ static void ui_candidate_window_resize (int new_width, int 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);
 }
 
 /**
@@ -701,59 +854,64 @@ static void ui_candidate_window_adjust (void)
     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]);
         }
     }
 }
@@ -769,7 +927,6 @@ static void ui_candidate_window_rotate (int angle)
     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);
@@ -786,12 +943,14 @@ static void ui_candidate_window_rotate (int angle)
         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);
 }
 
 /**
@@ -916,15 +1075,15 @@ static void ui_candidate_show (bool bSetVirtualKbd)
 {
     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);
@@ -934,7 +1093,7 @@ static void ui_candidate_show (bool bSetVirtualKbd)
                 _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);
         }
 
@@ -944,8 +1103,9 @@ static void ui_candidate_show (bool bSetVirtualKbd)
 
     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);
 }
 
 /**
@@ -957,6 +1117,7 @@ static void ui_candidate_show (bool bSetVirtualKbd)
 static void ui_candidate_hide (bool bForce, bool bSetVirtualKbd)
 {
     SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
+    _candidate_window_pending = false;
     if (!_candidate_window)
         return;
 
@@ -978,10 +1139,10 @@ static void ui_candidate_hide (bool bForce, bool bSetVirtualKbd)
             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);
                 }
             }
@@ -1197,9 +1358,21 @@ static void ui_create_native_candidate_window (void)
     /* 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));
@@ -1313,7 +1486,12 @@ static void ui_create_candidate_window (void)
 
     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);
@@ -1418,8 +1596,7 @@ static void ui_settle_candidate_window (void)
         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;
@@ -1500,61 +1677,19 @@ static void ui_settle_candidate_window (void)
 //////////////////////////////////////////////////////////////////////
 
 /**
- * @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);
 }
 
 /**
@@ -1564,7 +1699,7 @@ static void efl_set_transient_for_app_window (Evas_Object *win_obj)
  *
  * @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";
 
@@ -1572,11 +1707,9 @@ static int efl_get_angle_for_root_window (Evas_Object *win_obj)
     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 {
@@ -1630,6 +1763,61 @@ static Evas_Object *efl_create_window (const char *strWinName, const char *strEf
 }
 
 /**
+ * @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.
@@ -1703,7 +1891,6 @@ static void efl_get_screen_resolution (int &width, int &height)
     height = scr_h;
 }
 
-
 //////////////////////////////////////////////////////////////////////
 // Start of PanelAgent Functions
 //////////////////////////////////////////////////////////////////////
@@ -1757,7 +1944,15 @@ static bool initialize_panel_agent (const String &config, const String &display,
     _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;
 }
@@ -1769,8 +1964,8 @@ static void slot_reload_config (void)
 {
     SCIM_DEBUG_MAIN (3) << __FUNCTION__ << "...\n";
 
-    //if (!_config.null ())
-    //    _config->reload ();
+    if (!_config.null ())
+        _config->reload ();
 }
 
 /**
@@ -1854,7 +2049,7 @@ static void slot_update_factory_info (const PanelFactoryInfo &info)
     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);
@@ -1888,20 +2083,6 @@ static void slot_update_spot_location (int x, int y, int top_y)
  */
 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);
-        }
-    }
 }
 
 /**
@@ -1926,7 +2107,7 @@ static void slot_update_ise_geometry (int x, int y, int width, int height)
     _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);
@@ -1936,7 +2117,7 @@ static void slot_update_ise_geometry (int x, int y, int width, int height)
     }
 
     if (old_height != height && _ise_show)
-        set_keyboard_geometry_atom_info (KEYBOARD_STATE_ON);
+        set_keyboard_geometry_atom_info (_app_window, KEYBOARD_STATE_ON);
 }
 
 /**
@@ -2483,7 +2664,7 @@ static void slot_get_input_panel_geometry (struct rectinfo &info)
             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
@@ -2535,11 +2716,32 @@ static bool slot_get_ise_list (std::vector<String> &list)
     /* 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;
 }
 
@@ -2689,18 +2891,22 @@ static void slot_set_keyboard_ise (const String &uuid)
 {
     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);
@@ -2710,8 +2916,10 @@ static void slot_set_keyboard_ise (const String &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)]);
+    }
 }
 
 /**
@@ -2771,6 +2979,53 @@ static void slot_exit (void)
     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
 //////////////////////////////////////////////////////////////////////
@@ -2847,7 +3102,7 @@ static void signalhandler (int sig)
  * @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)
 {
@@ -2885,7 +3140,7 @@ 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)
 {
@@ -2964,7 +3219,7 @@ static void display_language_changed_cb (keynode_t *key, void* data)
     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 ();
 }
@@ -2980,7 +3235,6 @@ static void start_default_ise (void)
     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";
 
@@ -3012,7 +3266,7 @@ static void check_hardware_keyboard (void)
         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) {
@@ -3021,7 +3275,7 @@ static void check_hardware_keyboard (void)
                 }
                 /* 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);
@@ -3064,6 +3318,41 @@ static Eina_Bool x_event_window_property_cb (void *data, int ev_type, void *ev)
     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;
@@ -3083,31 +3372,119 @@ static Eina_Bool x_event_client_message_cb (void *data, int type, void *event)
     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;
@@ -3251,24 +3628,6 @@ int main (int argc, char *argv [])
     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");
@@ -3313,6 +3672,32 @@ int main (int argc, char *argv [])
         _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);
@@ -3331,22 +3716,6 @@ int main (int argc, char *argv [])
     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);
@@ -3367,19 +3736,12 @@ int main (int argc, char *argv [])
         /* 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);
@@ -3418,6 +3780,8 @@ cleanup:
     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 ();
index fc0ac48..c0b5df3 100644 (file)
@@ -34,6 +34,7 @@
 #include "scim_stl_map.h"
 #include "isf_panel_utility.h"
 #include "isf_query_utility.h"
+#include <unistd.h>
 
 
 /////////////////////////////////////////////////////////////////////////////
@@ -48,13 +49,10 @@ std::vector<String>          _icons;
 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;
 
 
 /////////////////////////////////////////////////////////////////////////////
@@ -94,9 +92,6 @@ void isf_get_all_ises_in_languages (std::vector<String> lang_list, std::vector<S
         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]]);
@@ -156,9 +151,6 @@ void isf_get_keyboard_ises_in_languages (const std::vector<String> &lang_list,
                     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]]);
@@ -186,9 +178,6 @@ void isf_get_helper_ises_in_languages (const std::vector<String> &lang_list, std
 
                 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]]);
@@ -241,7 +230,6 @@ void isf_save_ise_information (void)
  * @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,
@@ -251,8 +239,7 @@ void isf_get_factory_list (LOAD_ISE_TYPE  type,
                            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 ();
@@ -310,18 +297,7 @@ void isf_get_factory_list (LOAD_ISE_TYPE  type,
 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;
@@ -474,15 +450,15 @@ bool isf_update_ise_list (LOAD_ISE_TYPE type, const ConfigPointer &config)
     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;
@@ -492,13 +468,58 @@ bool isf_update_ise_list (LOAD_ISE_TYPE type, const ConfigPointer &config)
 
     /* 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;
@@ -512,8 +533,6 @@ bool isf_update_ise_list (LOAD_ISE_TYPE type, const ConfigPointer &config)
         }
     }
 
-    /* When load ise list is empty, all ISEs can be loaded. */
-    _load_ise_list.clear ();
     return ret;
 }
 
index 892dae1..72a5190 100644 (file)
@@ -32,7 +32,6 @@
 #define Uses_SCIM_IMENGINE_MODULE
 #define Uses_SCIM_COMPOSE_KEY
 
-
 #include <stdio.h>
 #include <Elementary.h>
 #include <Ecore_IMF.h>
@@ -50,7 +49,6 @@
 #include "scim_setup_module_efl.h"
 #include "isf_control.h"
 
-
 using namespace scim;
 
 #define _EDJ(x)                                   elm_layout_edje_get(x)
@@ -61,19 +59,6 @@ using namespace scim;
 #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,
@@ -88,14 +73,26 @@ enum {
     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];
 
@@ -129,8 +126,7 @@ static Eina_Bool                    _auto_full_stop           = EINA_FALSE;
 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;
@@ -138,7 +134,6 @@ extern std::vector <String>         _module_names;
 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);
@@ -153,6 +148,20 @@ static Evas_Object *_gl_exp_sw_icon_get (void *data, Evas_Object *obj, const cha
 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)
 {
@@ -289,6 +298,7 @@ static void set_active_sw_ise()
         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)
@@ -328,7 +338,7 @@ static void show_language_cb (void *data, Evas_Object *obj, void *event_info)
     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;
@@ -390,7 +400,6 @@ static void ise_option_view_set_cb (void *data, Evas_Object *obj, void *event_in
     struct ug_data *ugd = (struct ug_data *)data;
     ugd->key_end_cb = back_cb;
     _mdl->save_config (_config);
-    _config->reload ();
 
     helper_ise_reload_config ();
 }
@@ -426,8 +435,12 @@ static void ise_option_show (ug_data *ugd, const char *ise_name)
 
 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)
@@ -445,6 +458,19 @@ 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;
@@ -452,6 +478,7 @@ static Evas_Object *_gl_icon_get (void *data, Evas_Object *obj, const char *part
     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) {
@@ -571,6 +598,26 @@ static Evas_Object *_gl_exp_sw_icon_get (void *data, Evas_Object *obj, const cha
     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);
@@ -599,6 +646,51 @@ static Evas_Object *_gl_exp_hw_icon_get (void *data, Evas_Object *obj, const cha
     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;
@@ -609,6 +701,7 @@ static void create_sw_keyboard_selection_view (ug_data *ugd)
     }
 
     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);
 
@@ -627,24 +720,8 @@ static void create_sw_keyboard_selection_view (ug_data *ugd)
     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++) {
@@ -665,7 +742,7 @@ static void create_sw_keyboard_selection_view (ug_data *ugd)
     }
 }
 
-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.
@@ -687,7 +764,7 @@ static void hw_keyboard_selection_view_set_cb (void *data, Evas_Object *obj, voi
 
     struct ug_data *ugd = (struct ug_data *)data;
 
-    set_active_hw_ise();
+    set_active_hw_ise ();
 
     update_setting_main_view (ugd);
 
@@ -705,6 +782,7 @@ static void create_hw_keyboard_selection_view (ug_data * 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
@@ -721,24 +799,8 @@ static void create_hw_keyboard_selection_view (ug_data * ugd)
     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 ());
@@ -773,6 +835,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
 
         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";
@@ -796,14 +859,20 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
         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;
@@ -819,15 +888,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
         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));
@@ -849,6 +910,9 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
                 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) {
@@ -858,7 +922,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
             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,
@@ -872,15 +936,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
 
         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));
@@ -899,6 +955,9 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
                         (void *)(item_data->mode));
             }
 
+            // Separator
+            append_separator (genlist, SEPARATOR_TYPE2);
+
             // Text
             item_data = (ItemData *)malloc (sizeof (ItemData));
             if (item_data != NULL) {
@@ -908,7 +967,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
                 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,
@@ -917,6 +976,9 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
             }
         }
 
+        // Separator
+        append_separator (genlist, SEPARATOR_TYPE1);
+
         // Group2 title
         item_data = (ItemData *)malloc (sizeof (ItemData));
         if (item_data != NULL) {
@@ -947,6 +1009,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
             _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
@@ -968,6 +1031,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
             _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
@@ -981,6 +1045,9 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
                 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) {
@@ -1019,6 +1086,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
             _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
@@ -1029,7 +1097,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
                     (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));
@@ -1038,6 +1106,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
             _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
@@ -1052,15 +1121,7 @@ static Evas_Object *create_setting_main_view (ug_data *ugd)
         }
 
         // 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);
@@ -1259,24 +1320,24 @@ static void on_pause (ui_gadget_h ug, service_h s, void *priv)
     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)
@@ -1434,6 +1495,13 @@ extern "C"
         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);
 
@@ -1471,8 +1539,12 @@ extern "C"
             }
         }
 
-        _config->reload ();
         helper_ise_reload_config ();
+
+        if (_imf_context != NULL) {
+            ecore_imf_context_del (_imf_context);
+            _imf_context = NULL;
+        }
         return 0;
     }
 
index 6f7b1fd..7ca7ef5 100644 (file)
@@ -510,12 +510,20 @@ SocketFrontEnd::send_helper_event (int id, const String &helper_uuid, const Tran
 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);
@@ -523,8 +531,6 @@ SocketFrontEnd::get_surrounding_text (int id, WideString &text, int &cursor, int
         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)) {
 
@@ -537,25 +543,41 @@ SocketFrontEnd::get_surrounding_text (int id, WideString &text, int &cursor, int
                 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)) {
 
@@ -566,10 +588,18 @@ SocketFrontEnd::delete_surrounding_text (int id, int offset, int len)
                 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
@@ -1754,7 +1784,7 @@ 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;
 
@@ -1766,6 +1796,7 @@ SocketFrontEnd::socket_update_ise_list (int /*client_id*/)
         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);
@@ -1777,6 +1808,7 @@ SocketFrontEnd::socket_update_ise_list (int /*client_id*/)
         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 ();
@@ -1789,6 +1821,20 @@ SocketFrontEnd::socket_update_ise_list (int /*client_id*/)
                 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);
index 7a90411..0d35fc1 100644 (file)
@@ -1225,6 +1225,10 @@ SocketInstance::do_transaction (Transaction &trans, bool &ret)
                         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";
             }
index f36da12..8f078c0 100644 (file)
@@ -155,8 +155,9 @@ libscim@SCIM_EPOCH@_la_LIBADD       = libltdlc.la
 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
index b43d5ad..17b3a28 100644 (file)
@@ -22,6 +22,7 @@
  *
  */
 
+#define Uses_SCIM_CONFIG_PATH
 #define Uses_SCIM_TRANSACTION
 #define Uses_ISF_IMCONTROL_CLIENT
 
@@ -31,8 +32,8 @@
 #include "isf_control.h"
 
 
-namespace scim
-{
+using namespace scim;
+
 
 int isf_control_set_active_ise_by_uuid (const char *uuid)
 {
@@ -78,7 +79,7 @@ int isf_control_get_ise_list (char ***uuid_list)
     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;
@@ -95,8 +96,20 @@ int isf_control_get_ise_info (const char *uuid, char** name, char** language, IS
 
     *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;
 }
@@ -111,8 +124,6 @@ int isf_control_reset_ise_option (void)
     return 0;
 }
 
-};
-
 /*
 vi:ts=4:nowrap:ai:expandtab
 */
index 3c03492..b5b280e 100644 (file)
 #ifndef __ISF_CONTROL_H
 #define __ISF_CONTROL_H
 
-namespace scim
-{
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
 /////////////////////////////////////////////////////////////////////////////
 // Declaration of global data types.
 /////////////////////////////////////////////////////////////////////////////
@@ -80,7 +82,14 @@ int isf_control_get_ise_list (char ***uuid_list);
  *
  * @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.
@@ -89,7 +98,9 @@ int isf_control_get_ise_info (const char *uuid, char** name, char** language, IS
  */
 int isf_control_reset_ise_option (void);
 
+#ifdef __cplusplus
 }
+#endif /* __cplusplus */
 
 #endif /* __ISF_CONTROL_H */
 
index e17238a..02dc0c4 100644 (file)
@@ -475,6 +475,18 @@ public:
     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 ()
@@ -646,6 +658,21 @@ void IMControlClient::focus_out (void)
     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 ();
+}
+
 };
 
 /*
index 1807594..5a45d25 100644 (file)
@@ -76,6 +76,9 @@ public:
     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);
 };
 
 }
index 1687b30..eeefd4a 100644 (file)
@@ -40,6 +40,7 @@
 #include <sys/times.h>
 #include <unistd.h>
 #include <signal.h>
+#include <privilege-control.h>
 
 using namespace scim;
 using std::cout;
@@ -97,6 +98,8 @@ int main (int argc, char *argv [])
     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";
 
index 10dac78..8f4f11a 100644 (file)
@@ -41,6 +41,7 @@
 
 #include <malloc.h>
 #include <string.h>
+#include <unistd.h>
 #include "scim_private.h"
 #include "scim.h"
 #include "scim_stl_map.h"
index c9b1e3a..ad14e13 100644 (file)
@@ -2297,6 +2297,13 @@ struct KeyEvent
 
 };
 
+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
index 197d9dd..58571b7 100644 (file)
@@ -403,12 +403,6 @@ scim_global_config_reset (const String &key)
     }
 }
 
-void
-scim_global_config_update ()
-{
-    __initialize_config ();
-}
-
 bool
 scim_global_config_flush ()
 {
index 34a65ac..29816b5 100644 (file)
@@ -162,10 +162,6 @@ void scim_global_config_write (const String &key, const std::vector <int> &val);
 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.
  */
index b8418cb..0e5930c 100644 (file)
@@ -36,6 +36,7 @@
 #include "scim_private.h"
 #include "scim.h"
 #include <privilege-control.h>
+#include <unistd.h>
 
 using namespace scim;
 
@@ -181,8 +182,6 @@ int main (int argc, char *argv [])
 
     if (!config_pointer.null ())
         config_pointer.reset ();
-
-    exit (0);
 }
 
 /*
index 0b3525e..5efd176 100644 (file)
@@ -347,6 +347,11 @@ class PanelAgent::PanelAgentImpl
     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),
@@ -1193,7 +1198,7 @@ public:
 
         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);
         }
@@ -1610,6 +1615,8 @@ public:
         trans.write_to_socket (client_socket);
         if (data != NULL)
             delete[] data;
+
+        m_signal_show_ise ();
     }
 
     void hide_ise_panel (int client_id)
@@ -1628,6 +1635,8 @@ public:
                 hide_helper (m_current_helper_uuid, ctx);
             }
         }
+
+        m_signal_hide_ise ();
     }
 
     void set_default_ise (const DEFAULT_ISE_T &ise)
@@ -2505,6 +2514,31 @@ public:
         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);
@@ -2805,6 +2839,25 @@ public:
         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)
     {
@@ -3234,6 +3287,12 @@ private:
                     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 ();
@@ -5916,6 +5975,30 @@ PanelAgent::signal_connect_update_input_context       (PanelAgentSlotIntInt
     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 */
 
 /*
index 0aebd79..d94ea2a 100644 (file)
@@ -1126,6 +1126,34 @@ public:
      * 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);
 };
 
 /**  @} */
index 6d0948e..c0a6cc0 100644 (file)
@@ -51,6 +51,8 @@
 #include "scim_private.h"
 #include "scim.h"
 
+#include <unistd.h>
+
 namespace scim {
 
 typedef Signal1<void, int>
index 5700b2d..b224acc 100644 (file)
@@ -528,6 +528,7 @@ const int SCIM_TRANS_CMD_DELETE_SURROUNDING_TEXT          = 169;
 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;
@@ -621,6 +622,10 @@ const int ISM_TRANS_CMD_SET_ACTIVE_ISE_BY_UUID            = 1009;
 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;
index ec6c92e..2309cc3 100644 (file)
@@ -174,7 +174,6 @@ Transaction::read_from_socket (const Socket &socket, int timeout)
     if (socket.valid () && valid ()) {
         unsigned char buf [sizeof (uint32) * 2];
         uint32 sign1, sign2;
-        uint32 checksum;
         int size;
         int nbytes;
 
@@ -201,7 +200,7 @@ Transaction::read_from_socket (const Socket &socket, int timeout)
         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;
index 5335f6d..2254cbd 100644 (file)
@@ -730,6 +730,7 @@ static __Language __languages [] = {
     { "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 },
@@ -778,6 +779,8 @@ static __Language __languages [] = {
     { "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 },
index 3b29677..c911fbd 100644 (file)
@@ -1,3 +1,47 @@
+* 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
index 887bc36..f955497 100755 (executable)
@@ -3,8 +3,8 @@
 
 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
@@ -21,11 +21,10 @@ BuildRequires:  pkgconfig(ui-gadget-1)
 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.
@@ -74,7 +73,8 @@ mkdir -p /opt/usr/apps/scim/lib/scim-1.0/1.4.0/Helper
 
 
 %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
diff --git a/po/isfsetting_efl/es_MX.po b/po/isfsetting_efl/es_MX.po
new file mode 100644 (file)
index 0000000..17b27e1
--- /dev/null
@@ -0,0 +1,61 @@
+# 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"
index 4a61370..1c57d23 100755 (executable)
@@ -4,7 +4,7 @@ PACKAGE=isfsetting-efl
 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
diff --git a/po/kbwizard_efl/es_MX.po b/po/kbwizard_efl/es_MX.po
new file mode 100644 (file)
index 0000000..73fdedd
--- /dev/null
@@ -0,0 +1,23 @@
+# 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 ""
index 251f710..865f600 100755 (executable)
@@ -4,7 +4,7 @@ PACKAGE=keyboard-setting-wizard-efl
 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
diff --git a/po/scim/es_MX.po b/po/scim/es_MX.po
new file mode 100644 (file)
index 0000000..5cddb6b
--- /dev/null
@@ -0,0 +1,1139 @@
+# 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 ""
index d1dc194..5dfe999 100755 (executable)
@@ -4,7 +4,7 @@ PACKAGE=scim
 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
index 22d6ea9..2cbce3f 100644 (file)
@@ -1,3 +1,136 @@
+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