From 4f8747e78328995f1aea7566c30a8c2b551e6181 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 17 Feb 2016 09:49:42 +0900 Subject: [PATCH 01/16] Fix the option window's position issue in rotate mode Change-Id: I90732f5532a5af61eb64869ec78f3b5ca527ebb0 --- src/sclcoreui-efl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sclcoreui-efl.cpp b/src/sclcoreui-efl.cpp index 996b741..d303585 100644 --- a/src/sclcoreui-efl.cpp +++ b/src/sclcoreui-efl.cpp @@ -645,8 +645,7 @@ sclwindow CSCLCoreUIEFL::create_option_window(SCLOptionWindowType type) Evas_Object *window = elm_win_util_standard_add("Option window", "Option window"); - elm_win_borderless_set(window, EINA_TRUE); - +#ifndef WAYLAND Evas_Coord win_w = 0, win_h = 0; elm_win_screen_size_get(window, NULL, NULL, &win_w, &win_h); int degree = get_screen_rotation_degree(); @@ -655,6 +654,7 @@ sclwindow CSCLCoreUIEFL::create_option_window(SCLOptionWindowType type) } else { evas_object_resize(window, win_w, win_h); } +#endif int rots[] = { 0, 90, 180, 270 }; elm_win_wm_rotation_available_rotations_set(window, rots, (sizeof(rots) / sizeof(int))); -- 2.7.4 From a0246d8d3c030f43d74e99c2430c6b09f53f7182 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 17 Feb 2016 14:25:25 +0900 Subject: [PATCH 02/16] Fix trailing character issue in log Change-Id: I4364afe8f8ace494033c02c4fa597e895109b5d0 --- src/sclconnection-isf.cpp | 3 +-- src/sclcoreui-efl.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/sclconnection-isf.cpp b/src/sclconnection-isf.cpp index ce77fa8..5d2f74c 100644 --- a/src/sclconnection-isf.cpp +++ b/src/sclconnection-isf.cpp @@ -572,7 +572,7 @@ CSCLConnectionISF::~CSCLConnectionISF() sclboolean CSCLConnectionISF::init() { - LOGD("Enter"); + LOGD("Enter\n"); CSCLCoreImpl *impl = CSCLCoreImpl::get_instance(); if (impl) { @@ -1024,4 +1024,3 @@ extern "C" } } } - diff --git a/src/sclcoreui-efl.cpp b/src/sclcoreui-efl.cpp index d303585..39a50c3 100644 --- a/src/sclcoreui-efl.cpp +++ b/src/sclcoreui-efl.cpp @@ -351,7 +351,7 @@ _wayland_setup(struct WaylandKeyboard *wlkb, Evas_Object *main_window) wlkb->ee = ecore_evas_ecore_evas_get(evas_object_evas_get(main_window)); if (!wlkb->ee) { - LOGW("ERROR: Unable to create Ecore_Evas object"); + LOGW("ERROR: Unable to create Ecore_Evas object\n"); return false; } @@ -567,7 +567,7 @@ set_transient_for_app_window(Evas_Object *window) if (data) { if (type_return == XA_WINDOW) { xAppWindow = *(Window *)data; - LOGD("TRANSIENT_FOR SET : %x , %x", xAppWindow, xWindow); + LOGD("TRANSIENT_FOR SET : %x , %x\n", xAppWindow, xWindow); ecore_x_icccm_transient_for_set(xWindow, xAppWindow); } XFree(data); @@ -605,7 +605,7 @@ set_transient_for_isf_setting_window(Evas_Object *window) ecore_x_window_prop_xid_get(xControlWindow, ecore_x_atom_get("ISF Setting window"), ECORE_X_ATOM_WINDOW, &xSettingWindow, 1); - LOGD("TRANSIENT_FOR SET : %x , %x", xSettingWindow, xWindow); + LOGD("TRANSIENT_FOR SET : %x , %x\n", xSettingWindow, xWindow); ecore_x_icccm_transient_for_set(xWindow, xSettingWindow); } XFree(data); @@ -628,7 +628,7 @@ sclwindow CSCLCoreUIEFL::create_option_window(SCLOptionWindowType type) sclboolean ret = false; callback->on_check_option_window_availability(&ret); if (ret == false) { - LOGW("on_create_option_window() is not available"); + LOGW("on_create_option_window() is not available\n"); return SCLWINDOW_INVALID; } } -- 2.7.4 From 7d32fbdebcb8b60e9e2b70f76055bda748f3a3f6 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 17 Feb 2016 16:46:01 +0900 Subject: [PATCH 03/16] Update package version to 0.4.13 Change-Id: Ie673f91ff0ebffce731d4aa4c727f5d9098bd54f --- packaging/libscl-core.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/libscl-core.spec b/packaging/libscl-core.spec index b5d38ea..45ae01d 100644 --- a/packaging/libscl-core.spec +++ b/packaging/libscl-core.spec @@ -6,7 +6,7 @@ Name: libscl-core Summary: A library for developing software keyboards -Version: 0.4.12 +Version: 0.4.13 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From bf7e174824d517126b8159e26eec09baab82ff10 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 8 Mar 2016 20:54:20 +0900 Subject: [PATCH 04/16] Support executable type of IME Change-Id: Ia7e8a69324e457e11bfd9bf49ece7f86811cc46f --- CMakeLists.txt | 1 + packaging/libscl-core.spec | 1 + src/sclcoreimpl.cpp | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index e065ab3..18d7cea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,6 +32,7 @@ SET(PKGS_CHECK_MODULES isf vconf libscl-common + capi-appfw-application ) IF (with_wayland) diff --git a/packaging/libscl-core.spec b/packaging/libscl-core.spec index 45ae01d..8f50dde 100644 --- a/packaging/libscl-core.spec +++ b/packaging/libscl-core.spec @@ -26,6 +26,7 @@ BuildRequires: pkgconfig(ecore-x) BuildRequires: pkgconfig(x11) %endif BuildRequires: pkgconfig(libscl-common) +BuildRequires: pkgconfig(capi-appfw-application) %description diff --git a/src/sclcoreimpl.cpp b/src/sclcoreimpl.cpp index 66b20a3..84a6935 100644 --- a/src/sclcoreimpl.cpp +++ b/src/sclcoreimpl.cpp @@ -16,6 +16,8 @@ */ #include "sclcoreimpl.h" +#include +#include using namespace scl; @@ -284,6 +286,27 @@ void CSCLCoreImpl::on_run(const sclchar *uuid, const sclchar *display) void CSCLCoreImpl::run() { + m_core_ui.init(); + m_connection.init(); + + if (!m_uuid) { + char *appid = NULL; + app_get_id(&appid); + + LOGD("appid : '%s'\n", appid); + + if (appid) { + m_uuid = strdup(appid); + free(appid); + } + } + + if (!m_display) { + const char *display = getenv("DISPLAY"); + LOGD("display env : '%s'\n", display); + m_display = display ? strdup(display) : strdup(":0"); + } + m_core_ui.run(m_display); m_connection.fini(); -- 2.7.4 From 9987fd786a84130026bdaff935bf670a17b9d2de Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Thu, 10 Mar 2016 10:39:10 +0900 Subject: [PATCH 05/16] Remove unused code Change-Id: I9ae56b2f1288d0ec5ea27bdf1e7dc2734fc59ef7 --- src/sclcoreui-efl.cpp | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/src/sclcoreui-efl.cpp b/src/sclcoreui-efl.cpp index 39a50c3..c2ea36b 100644 --- a/src/sclcoreui-efl.cpp +++ b/src/sclcoreui-efl.cpp @@ -50,7 +50,6 @@ struct WaylandKeyboard wlkb = {0}; using namespace scl; - CSCLCoreUIEFL::CSCLCoreUIEFL() { m_initialized = FALSE; @@ -111,36 +110,6 @@ void CSCLCoreUIEFL::set_keyboard_size_hints(SclSize portrait, SclSize landscape) #endif } -const char * extract_themename_from_theme_file_path(const char *filepath) { - static char themename[_POSIX_PATH_MAX] = {0}; - memset(themename, 0x00, sizeof(themename)); - - if (filepath) { - /* There could be more than 1 theme filepath, separated by : */ - char pathstr[_POSIX_PATH_MAX] = {0}; - strncpy(pathstr, filepath, _POSIX_PATH_MAX - 1); - for (int loop = 0;loop < _POSIX_PATH_MAX;loop++) { - if (pathstr[loop] == ':') { - /* FIXME : Let's consider the 1st theme filepath only for now */ - pathstr[loop] = '\0'; - } - } - - if (pathstr[0]) { - const char *filename = ecore_file_file_get(pathstr); - if (filename) { - char *stripname = ecore_file_strip_ext(filename); - if (stripname) { - strncpy(themename, stripname, _POSIX_PATH_MAX - 1); - free(stripname); - } - } - } - } - - return themename; -} - static void language_changed_cb(keynode_t *key, void* data) { char clang[_POSIX_PATH_MAX] = {0}; -- 2.7.4 From e7a366f088fee89c53b9a6110915506931e43d67 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Mon, 14 Mar 2016 07:43:33 +0900 Subject: [PATCH 06/16] Add -Werror build option Change-Id: Idc3e06fe2211c79fbc3f84de8df39978a98cb20f --- packaging/libscl-core.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/libscl-core.spec b/packaging/libscl-core.spec index 8f50dde..a6f470c 100644 --- a/packaging/libscl-core.spec +++ b/packaging/libscl-core.spec @@ -45,8 +45,8 @@ A devel package of libscl-core library that helps developing S/W Keyboard %build -export CFLAGS+=" -DTIZEN_DEBUG_ENABLE" -export CXXFLAGS+=" -DTIZEN_DEBUG_ENABLE" +export CFLAGS+=" -DTIZEN_DEBUG_ENABLE -Werror" +export CXXFLAGS+=" -DTIZEN_DEBUG_ENABLE -Werror" export FFLAGS+=" -DTIZEN_DEBUG_ENABLE" rm -rf CMakeFiles -- 2.7.4 From 6559f718bbca9da5588d5880596ab79d07aa4996 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 15 Mar 2016 17:34:03 +0900 Subject: [PATCH 07/16] Update package version to 0.4.14 Change-Id: I9720a3fc5a90193e5f0fa131806121fb5c341455 --- packaging/libscl-core.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/libscl-core.spec b/packaging/libscl-core.spec index a6f470c..dc29117 100644 --- a/packaging/libscl-core.spec +++ b/packaging/libscl-core.spec @@ -6,7 +6,7 @@ Name: libscl-core Summary: A library for developing software keyboards -Version: 0.4.13 +Version: 0.4.14 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From e9baabf32b4612127381beba73c9c316a11813c3 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Fri, 8 Apr 2016 09:27:52 +0900 Subject: [PATCH 08/16] Use %license to create license file Change-Id: I79271d76be50155c2619a19915f876bc4b8268de --- packaging/libscl-core.spec | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packaging/libscl-core.spec b/packaging/libscl-core.spec index dc29117..3b02946 100644 --- a/packaging/libscl-core.spec +++ b/packaging/libscl-core.spec @@ -61,8 +61,6 @@ make %{?jobs:-j%jobs} %install rm -rf %{buildroot} -mkdir -p %{buildroot}/usr/share/license -cp LICENSE %{buildroot}/usr/share/license/%{name} %make_install @@ -76,7 +74,7 @@ cp LICENSE %{buildroot}/usr/share/license/%{name} %manifest %{name}.manifest %defattr(-,root,root,-) %{_libdir}/libscl-core.so -/usr/share/license/%{name} +%license LICENSE %files devel %defattr(-,root,root,-) -- 2.7.4 From 31858d998a762c1985478c2cb4ad345d9b10fc22 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 20 Apr 2016 08:46:12 +0900 Subject: [PATCH 09/16] Add ldconfig in %post and %postun Share library package should call ldconfig in %post and %postun. https://wiki.tizen.org/wiki/Packaging/Guidelines Change-Id: I1f296215ca3fbb7e90ad28a4b340050e63a499ce --- packaging/libscl-core.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packaging/libscl-core.spec b/packaging/libscl-core.spec index 3b02946..f6674d2 100644 --- a/packaging/libscl-core.spec +++ b/packaging/libscl-core.spec @@ -57,7 +57,7 @@ cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DLIB_INSTALL_DIR:PATH=%{_libdir} -Dwi %else cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DLIB_INSTALL_DIR:PATH=%{_libdir} %endif -make %{?jobs:-j%jobs} +make %{?_smp_mflags} %install rm -rf %{buildroot} @@ -66,9 +66,9 @@ rm -rf %{buildroot} -%post +%post -p /sbin/ldconfig -%postun +%postun -p /sbin/ldconfig %files %manifest %{name}.manifest -- 2.7.4 From 4f07df27e4b079bd04b803fdf216747a853e528f Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Mon, 25 Apr 2016 16:36:36 +0900 Subject: [PATCH 10/16] Fix indentation Change-Id: I964306dedd066528cbb0f20ea0a4ffd24c083930 --- src/sclconnection.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sclconnection.cpp b/src/sclconnection.cpp index f12daca..fba5e8f 100644 --- a/src/sclconnection.cpp +++ b/src/sclconnection.cpp @@ -269,15 +269,15 @@ void CSCLConnection::update_geometry(sclint x, sclint y, sclint width, sclint he void CSCLConnection::get_surrounding_text(const sclchar *ic_uuid, sclint maxlen_before, sclint maxlen_after) const { if (m_impl) { - m_impl->get_surrounding_text(ic_uuid, maxlen_before, maxlen_after); - } + m_impl->get_surrounding_text(ic_uuid, maxlen_before, maxlen_after); + } } void CSCLConnection::delete_surrounding_text(sclint offset, sclint len) const { if (m_impl) { - m_impl->delete_surrounding_text(offset, len); - } + m_impl->delete_surrounding_text(offset, len); + } } void CSCLConnection::set_candidate_position(sclint left, sclint top) -- 2.7.4 From d91cb5c3f6decef774a789232603afb4e8dc7094 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 26 Apr 2016 08:48:20 +0900 Subject: [PATCH 11/16] Fix doxygen in header Change-Id: I84cec62269bb2678ca2066ce1c5ef0c84915b6f4 --- src/sclcore.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/sclcore.h b/src/sclcore.h index 6119381..7669d40 100644 --- a/src/sclcore.h +++ b/src/sclcore.h @@ -229,7 +229,7 @@ public: void update_associate_string(const SclCandidateTable &table) const; /** - * @ brief When the input context of ISE is changed, + * @brief When the input context of ISE is changed, * ISE can call this function to notify application * * @param[in] type type of event. @@ -238,7 +238,7 @@ public: void update_input_context(sclu32 type, sclu32 value); /** - * @ brief When the geometry of ISE is changed, + * @brief When the geometry of ISE is changed, * ISE can call this function to notify application * * @param[in] x x position of ISE geometry. @@ -249,7 +249,7 @@ public: void update_geometry(sclint x, sclint y, sclint width, sclint height); /** - * @ brief Request to get surrounding text. + * @brief Request to get surrounding text. * * @param[in] ic_uuid The helper ISE UUID. * @param[in] maxlen_before The max length of before. @@ -258,7 +258,7 @@ public: void get_surrounding_text(const sclchar *ic_uuid, sclint maxlen_before, sclint maxlen_after) const; /** - * @ brief Request to delete surrounding text. + * @brief Request to delete surrounding text. * * @param[in] offset The offset for cursor position. * @param[in] len The length for delete text. @@ -266,7 +266,7 @@ public: void delete_surrounding_text(sclint offset, sclint len) const; /** - * @ brief Set candidate position in screen. + * @brief Set candidate position in screen. * * @param[in] left The x position in screen. * @param[in] top The y position in screen. @@ -274,40 +274,40 @@ public: void set_candidate_position(sclint left, sclint top); /** - * @ brief Set soft candidate style. + * @brief Set soft candidate style. * * @param[in] enable The flag for soft candidate style. */ void enable_soft_candidate(sclboolean enable); /** - * @ brief Request to hide candidate window. + * @brief Request to hide candidate window. */ void candidate_hide(void); /** - * @ brief Request to get candidate window size and position. + * @brief Request to get candidate window size and position. * * @param[in] uuid The helper ISE UUID. */ //void get_candidate_window_geometry (const String &uuid) const; /** - * @ brief Set current keyboard ISE. + * @brief Set current keyboard ISE. * * @param[in] uuid The keyboard ISE UUID. */ void set_keyboard_ise_by_uuid(const sclchar *uuid); /** - * @ brief Request to get current keyboard ISE information. + * @brief Request to get current keyboard ISE information. * * @param[in] uuid The helper ISE UUID. */ void get_keyboard_ise(const sclchar *uuid); /** - * @ brief Request to get uuid list of all keyboard ISEs. + * @brief Request to get uuid list of all keyboard ISEs. * * @param[in] uuid The helper ISE UUID. */ @@ -334,7 +334,7 @@ public: void destroy_option_window(sclwindow window); /** - * @ brief Request to select text. + * @brief Request to select text. * * @param[in] start The start cursor position in text. * @param[in] end The end cursor position in text. -- 2.7.4 From cff9627c6b0cb424e8f7dc5b70403379d856a259 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 26 Apr 2016 09:54:13 +0900 Subject: [PATCH 12/16] Remove unused define in spec file Change-Id: I8f9a1e6aee55b30730eaccf5bab4eba858fb1e2b --- packaging/libscl-core.spec | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/packaging/libscl-core.spec b/packaging/libscl-core.spec index f6674d2..b828b6b 100644 --- a/packaging/libscl-core.spec +++ b/packaging/libscl-core.spec @@ -1,17 +1,13 @@ %bcond_with x %bcond_with wayland -%define _optdir /opt -%define _appdir %{_optdir}/apps - Name: libscl-core Summary: A library for developing software keyboards Version: 0.4.14 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -Source0: libscl-core-%{version}.tar.gz -BuildRequires: gettext-tools +Source0: %{name}-%{version}.tar.gz BuildRequires: cmake BuildRequires: pkgconfig(elementary) BuildRequires: pkgconfig(vconf) @@ -73,10 +69,10 @@ rm -rf %{buildroot} %files %manifest %{name}.manifest %defattr(-,root,root,-) -%{_libdir}/libscl-core.so +%{_libdir}/%{name}.so %license LICENSE %files devel %defattr(-,root,root,-) %{_includedir}/* -%{_libdir}/pkgconfig/libscl-core.pc +%{_libdir}/pkgconfig/%{name}.pc -- 2.7.4 From 5698366bc58852662f4d3db24832c993221fe426 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 26 Apr 2016 11:29:11 +0900 Subject: [PATCH 13/16] Add synchronous API to get surrounding text Change-Id: I4f83a0b96a65584bdf180b74d31464fcb0868501 --- src/sclconnection-isf.cpp | 11 +++++++++++ src/sclconnection-isf.h | 1 + src/sclconnection.cpp | 7 +++++++ src/sclconnection.h | 1 + src/sclcore.cpp | 7 +++++++ src/sclcore.h | 11 ++++++++++- src/sclcoreimpl.cpp | 5 +++++ src/sclcoreimpl.h | 1 + 8 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/sclconnection-isf.cpp b/src/sclconnection-isf.cpp index 5d2f74c..f4dbdfe 100644 --- a/src/sclconnection-isf.cpp +++ b/src/sclconnection-isf.cpp @@ -949,6 +949,17 @@ void CSCLConnectionISF::get_surrounding_text(const sclchar *ic_uuid, sclint maxl } } +void CSCLConnectionISF::get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor) +{ + if (m_initialized) { + scim::String surrounding_text; + m_helper_agent.get_surrounding_text(maxlen_before, maxlen_after, surrounding_text, cursor); + + if (text) + *text = strdup(surrounding_text.c_str()); + } +} + void CSCLConnectionISF::delete_surrounding_text(sclint offset, sclint len) const { if (m_initialized) { diff --git a/src/sclconnection-isf.h b/src/sclconnection-isf.h index 26781a5..bdce63e 100644 --- a/src/sclconnection-isf.h +++ b/src/sclconnection-isf.h @@ -83,6 +83,7 @@ public: void get_keyboard_ise(const sclchar *uuid); void set_selection(sclint start, sclint end); void send_private_command(const char *command); + void get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor); private: sclboolean m_initialized; diff --git a/src/sclconnection.cpp b/src/sclconnection.cpp index fba5e8f..2ab7aa1 100644 --- a/src/sclconnection.cpp +++ b/src/sclconnection.cpp @@ -273,6 +273,13 @@ void CSCLConnection::get_surrounding_text(const sclchar *ic_uuid, sclint maxlen_ } } +void CSCLConnection::get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor) +{ + if (m_impl) { + m_impl->get_surrounding_text(maxlen_before, maxlen_after, text, cursor); + } +} + void CSCLConnection::delete_surrounding_text(sclint offset, sclint len) const { if (m_impl) { diff --git a/src/sclconnection.h b/src/sclconnection.h index c6cb71e..a8a6388 100644 --- a/src/sclconnection.h +++ b/src/sclconnection.h @@ -83,6 +83,7 @@ public: virtual void get_keyboard_ise(const sclchar *uuid); virtual void set_selection(sclint start, sclint end); virtual void send_private_command(const sclchar *command); + virtual void get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor); protected: std::string m_backend_identifier; diff --git a/src/sclcore.cpp b/src/sclcore.cpp index 7fa21c2..001488c 100644 --- a/src/sclcore.cpp +++ b/src/sclcore.cpp @@ -242,6 +242,13 @@ void CSCLCore::get_surrounding_text(const sclchar *ic_uuid, sclint maxlen_before } } +void CSCLCore::get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor) const +{ + if (m_impl) { + m_impl->get_surrounding_text(maxlen_before, maxlen_after, text, cursor); + } +} + void CSCLCore::delete_surrounding_text(sclint offset, sclint len) const { if (m_impl) { diff --git a/src/sclcore.h b/src/sclcore.h index 7669d40..d560553 100644 --- a/src/sclcore.h +++ b/src/sclcore.h @@ -249,7 +249,7 @@ public: void update_geometry(sclint x, sclint y, sclint width, sclint height); /** - * @brief Request to get surrounding text. + * @brief Request to get surrounding text asynchronously. * * @param[in] ic_uuid The helper ISE UUID. * @param[in] maxlen_before The max length of before. @@ -343,6 +343,15 @@ public: void send_private_command(const sclchar *command); + /** + * @brief Request to get surrounding text synchronously. + * + * @param[in] maxlen_before The max length of before. + * @param[in] maxlen_after The max length of after. + * @param[out] text The surrounding text. + * @param[out] cursor The cursor position. + */ + void get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor) const; private: CSCLCoreImpl *m_impl; }; diff --git a/src/sclcoreimpl.cpp b/src/sclcoreimpl.cpp index 84a6935..8c2da0c 100644 --- a/src/sclcoreimpl.cpp +++ b/src/sclcoreimpl.cpp @@ -232,6 +232,11 @@ void CSCLCoreImpl::get_surrounding_text(const sclchar* ic_uuid, sclint maxlen_be m_connection.get_surrounding_text(ic_uuid, maxlen_before, maxlen_after); } +void CSCLCoreImpl::get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor) +{ + m_connection.get_surrounding_text(maxlen_before, maxlen_after, text, cursor); +} + void CSCLCoreImpl::delete_surrounding_text(sclint offset, sclint len) const { m_connection.delete_surrounding_text(offset, len); diff --git a/src/sclcoreimpl.h b/src/sclcoreimpl.h index 40d774a..4df0782 100644 --- a/src/sclcoreimpl.h +++ b/src/sclcoreimpl.h @@ -101,6 +101,7 @@ public: void set_selection(sclint start, sclint end); void send_private_command(const sclchar *command); + void get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor); private: ISCLCoreEventCallback *m_event_callback; -- 2.7.4 From fe5c6e269509f18b9497c2b66d096b0fe3d0a453 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Tue, 26 Apr 2016 14:48:57 +0900 Subject: [PATCH 14/16] Update package version to 0.4.15 Change-Id: Ia1aaa55ee6a3e9074060742648c9724b385ce6ae --- packaging/libscl-core.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/libscl-core.spec b/packaging/libscl-core.spec index b828b6b..0f3a8c8 100644 --- a/packaging/libscl-core.spec +++ b/packaging/libscl-core.spec @@ -3,7 +3,7 @@ Name: libscl-core Summary: A library for developing software keyboards -Version: 0.4.14 +Version: 0.4.15 Release: 1 Group: Graphics & UI Framework/Input License: Apache-2.0 -- 2.7.4 From 4646d5118eff5b0bb99598f44f7601dbfc80ac43 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 27 Apr 2016 15:29:23 +0900 Subject: [PATCH 15/16] Replace focus out handler with evas function Using evas callback is more appropriate than using ecore_wl function. Change-Id: Ib06a95ff3ec8747ef88472c79715033efae06151 --- src/sclcoreui-efl.cpp | 22 +++------------------- src/sclcoreui-efl.h | 1 - 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/src/sclcoreui-efl.cpp b/src/sclcoreui-efl.cpp index c2ea36b..364c4ce 100644 --- a/src/sclcoreui-efl.cpp +++ b/src/sclcoreui-efl.cpp @@ -71,7 +71,6 @@ sclboolean CSCLCoreUIEFL::init() for (int loop = 0;loop < OPTION_WINDOW_TYPE_MAX;loop++) { m_option_window_info[loop].window = SCLWINDOW_INVALID; - m_option_window_info[loop].handler = NULL; } return TRUE; @@ -485,7 +484,7 @@ void CSCLCoreUIEFL::run(const sclchar *display) } } -static Eina_Bool focus_out_cb(void *data, int type, void *event) +static void focus_out_cb(void *data, Evas *e, void *event) { OptionWindowInfo *info = static_cast(data); if (info) { @@ -502,13 +501,7 @@ static Eina_Bool focus_out_cb(void *data, int type, void *event) evas_object_del(NATIVE_WINDOW_CAST(info->window)); info->window = NULL; } - if (info->handler) { - ecore_event_handler_del(info->handler); - info->handler = NULL; - } } - - return ECORE_CALLBACK_CANCEL; } static void @@ -634,13 +627,9 @@ sclwindow CSCLCoreUIEFL::create_option_window(SCLOptionWindowType type) callback->on_create_option_window(window, type); } - Ecore_Event_Handler *handler = NULL; if (type == OPTION_WINDOW_TYPE_NORMAL) { -#ifdef WAYLAND - handler = ecore_event_handler_add(ECORE_WL_EVENT_FOCUS_OUT, focus_out_cb, &m_option_window_info[type]); -#else - handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, focus_out_cb, &m_option_window_info[type]); -#endif + Evas *evas = evas_object_evas_get(window); + evas_event_callback_add(evas, EVAS_CALLBACK_CANVAS_FOCUS_OUT, focus_out_cb, &m_option_window_info[type]); set_transient_for_app_window(window); } else if (type == OPTION_WINDOW_TYPE_SETTING_APPLICATION) { set_transient_for_isf_setting_window(window); @@ -648,7 +637,6 @@ sclwindow CSCLCoreUIEFL::create_option_window(SCLOptionWindowType type) } m_option_window_info[type].window = window; - m_option_window_info[type].handler = handler; return window; } @@ -667,10 +655,6 @@ void CSCLCoreUIEFL::destroy_option_window(sclwindow window) if (m_option_window_info[loop].window == window) { evas_object_del(NATIVE_WINDOW_CAST(window)); m_option_window_info[loop].window = SCLWINDOW_INVALID; - if (m_option_window_info[loop].handler) { - ecore_event_handler_del(m_option_window_info[loop].handler); - m_option_window_info[loop].handler = NULL; - } } } } diff --git a/src/sclcoreui-efl.h b/src/sclcoreui-efl.h index a2e5c4b..fbef76d 100644 --- a/src/sclcoreui-efl.h +++ b/src/sclcoreui-efl.h @@ -29,7 +29,6 @@ namespace scl typedef struct { sclwindow window; - Ecore_Event_Handler *handler; } OptionWindowInfo; class CSCLCoreUIEFL : public CSCLCoreUI -- 2.7.4 From 4191bb6cf55e91aa7e07cec1ae8aa663a1504efe Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 27 Apr 2016 15:46:04 +0900 Subject: [PATCH 16/16] Add synchronous API to get selection text Change-Id: I1732b11a8d53911126f421a399e11275a7b40d3c --- src/sclconnection-isf.cpp | 15 +++++++++++++-- src/sclconnection-isf.h | 1 + src/sclconnection.cpp | 7 +++++++ src/sclconnection.h | 1 + src/sclcore.cpp | 7 +++++++ src/sclcore.h | 7 +++++++ src/sclcoreimpl.cpp | 5 +++++ src/sclcoreimpl.h | 1 + 8 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/sclconnection-isf.cpp b/src/sclconnection-isf.cpp index f4dbdfe..5bb30a3 100644 --- a/src/sclconnection-isf.cpp +++ b/src/sclconnection-isf.cpp @@ -1008,14 +1008,25 @@ void CSCLConnectionISF::get_keyboard_ise(const sclchar *uuid) void CSCLConnectionISF::set_selection(sclint start, sclint end) { if (m_initialized) { - m_helper_agent.set_selection(start, end); + m_helper_agent.set_selection(start, end); } } void CSCLConnectionISF::send_private_command(const sclchar *command) { if (m_initialized) { - m_helper_agent.send_private_command(command); + m_helper_agent.send_private_command(command); + } +} + +void CSCLConnectionISF::get_selection_text(sclchar **text) +{ + if (m_initialized) { + scim::String selection_text; + m_helper_agent.get_selection(selection_text); + + if (text) + *text = strdup(selection_text.c_str()); } } diff --git a/src/sclconnection-isf.h b/src/sclconnection-isf.h index bdce63e..0d8bd5b 100644 --- a/src/sclconnection-isf.h +++ b/src/sclconnection-isf.h @@ -84,6 +84,7 @@ public: void set_selection(sclint start, sclint end); void send_private_command(const char *command); void get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor); + void get_selection_text(sclchar **text); private: sclboolean m_initialized; diff --git a/src/sclconnection.cpp b/src/sclconnection.cpp index 2ab7aa1..6a7b6e2 100644 --- a/src/sclconnection.cpp +++ b/src/sclconnection.cpp @@ -335,3 +335,10 @@ void CSCLConnection::send_private_command(const sclchar *command) m_impl->send_private_command(command); } } + +void CSCLConnection::get_selection_text(sclchar **text) +{ + if (m_impl) { + m_impl->get_selection_text(text); + } +} diff --git a/src/sclconnection.h b/src/sclconnection.h index a8a6388..806c4da 100644 --- a/src/sclconnection.h +++ b/src/sclconnection.h @@ -84,6 +84,7 @@ public: virtual void set_selection(sclint start, sclint end); virtual void send_private_command(const sclchar *command); virtual void get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor); + virtual void get_selection_text(sclchar **text); protected: std::string m_backend_identifier; diff --git a/src/sclcore.cpp b/src/sclcore.cpp index 001488c..2749ee2 100644 --- a/src/sclcore.cpp +++ b/src/sclcore.cpp @@ -336,3 +336,10 @@ void CSCLCore::send_private_command(const sclchar *command) m_impl->send_private_command(command); } } + +void CSCLCore::get_selection_text(sclchar **text) const +{ + if (m_impl) { + m_impl->get_selection_text(text); + } +} diff --git a/src/sclcore.h b/src/sclcore.h index d560553..3a5d909 100644 --- a/src/sclcore.h +++ b/src/sclcore.h @@ -352,6 +352,13 @@ public: * @param[out] cursor The cursor position. */ void get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor) const; + + /** + * @brief Get the selected text. + * + * @param[out] text The surrounding text. + */ + void get_selection_text(sclchar **text) const; private: CSCLCoreImpl *m_impl; }; diff --git a/src/sclcoreimpl.cpp b/src/sclcoreimpl.cpp index 8c2da0c..f5d5591 100644 --- a/src/sclcoreimpl.cpp +++ b/src/sclcoreimpl.cpp @@ -352,3 +352,8 @@ void CSCLCoreImpl::send_private_command(const sclchar *command) { m_connection.send_private_command(command); } + +void CSCLCoreImpl::get_selection_text(sclchar **text) +{ + m_connection.get_selection_text(text); +} \ No newline at end of file diff --git a/src/sclcoreimpl.h b/src/sclcoreimpl.h index 4df0782..78c84be 100644 --- a/src/sclcoreimpl.h +++ b/src/sclcoreimpl.h @@ -102,6 +102,7 @@ public: void set_selection(sclint start, sclint end); void send_private_command(const sclchar *command); void get_surrounding_text(sclint maxlen_before, sclint maxlen_after, sclchar **text, int &cursor); + void get_selection_text(sclchar **text); private: ISCLCoreEventCallback *m_event_callback; -- 2.7.4