updates codes to sync with the latest 2.4 spin code 51/63951/1
authorWonnam Jang <wn.jang@samsung.com>
Tue, 29 Mar 2016 03:59:13 +0000 (12:59 +0900)
committerWonnam Jang <wn.jang@samsung.com>
Tue, 29 Mar 2016 03:59:13 +0000 (12:59 +0900)
Change-Id: Ic1c7eb73d6ea2a5b09f55aaed930e02968bf6bba
Signed-off-by: Wonnam Jang <wn.jang@samsung.com>
14 files changed:
CMakeLists.txt
changelog
packaging/voice-control-elm.spec
src/CMakeLists.txt
src/vc_elm.c
src/vc_elm_core.c
src/vc_elm_core.h
src/vc_elm_core_default_widgets.c
src/vc_elm_rectangle.c
src/vc_elm_rectangle.h
src/vc_elm_tooltip.c
src/vc_elm_tooltip.h
src/vc_elm_widget_wrapper.c
src/vc_elm_widget_wrapper.h

index ec420c89e42195cedee64cca8c6ca3a99543eccc..de4bbe5e668cd715c14b440a03e5abc02f97bc77 100644 (file)
@@ -23,9 +23,7 @@ INCLUDE(FindPkgConfig)
 SET(CMAKE_BUILD_TYPE "Release")
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g -fprofile-arcs -ftest-coverage -D_GNU_SOURCE")
 
-IF (LIBDIR MATCHES "/usr/lib64")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DLIB64")
-ENDIF (LIBDIR)
+ADD_DEFINITIONS("-DVOICE_LIBDIR=\"${LIBDIR}\"")
 
 # CMake settings
 MESSAGE(STATUS "========================================")
@@ -79,10 +77,10 @@ MESSAGE(STATUS "CMAKE_RANLIB: " ${CMAKE_RANLIB})
 MESSAGE(STATUS "========================================")
 
 # Warning flags
-#ADD_DEFINITIONS("-Werror")            # Generate all warnings as errors
+ADD_DEFINITIONS("-Werror")             # Generate all warnings as errors
 ADD_DEFINITIONS("-Wall")               # Generate all warnings
 ADD_DEFINITIONS("-Wextra")             # Generate even more extra warnings
-ADD_DEFINITIONS("-pedantic")           # Accept only pedantic code
+#ADD_DEFINITIONS("-pedantic")          # Accept only pedantic code
 ADD_DEFINITIONS("-Wwrite-strings")     # Do not accept writing to constant string memory
 ADD_DEFINITIONS("-Winit-self")         # Do not accept initializing variable with itself
 ADD_DEFINITIONS("-Wcast-align")                # Do not accept misaligning with casting
index ec2ff7832da41b12ded490af4b781ee2ba4718e7..d0f6d338f4e4e09fd382e54e7dab532d9274b1cc 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,6 +1,11 @@
-vc-widget-elm (0.2.0) -- Thu, 29 May 2014
+voice-control-elm (0.2.1) -- Wed, 17 June 2015
+
+  * modify unused smack label (Wonnam Jang <wn.jang@samsung.com>)
+  * updates codes according to coding rule (Wonnam Jang <wn.jang@samsung.com>)
+
+voice-control-elm (0.2.0) -- Thu, 29 May 2015
 
   * Update version 0.2.0 (Kwangyoun Kim <ky85.kim@samsung.com>)
 
-vc-widget-elm (0.0.1)
+voice-control-elm (0.0.1)
   * Release version 0.1.0 (Lukasz Wrzosek <l.wrzosek@samsung.com>)
index a2e8cfa7dc6f1f680f07fad3549d4d40937d5794..f406c5da8c55fd7c7ab788a51be5aa67e6afe791 100644 (file)
@@ -1,6 +1,6 @@
 Name:          voice-control-elm
 Summary:       voice-control-elm library
-Version:       0.2.0
+Version:       0.2.1
 Release:       1
 Group:         Graphics & UI Framework/Voice Framework
 License:       Apache-2.0
@@ -12,15 +12,15 @@ BuildRequires:      cmake
 BuildRequires: edje-tools
 BuildRequires: pkgconfig(appcore-efl)
 BuildRequires: pkgconfig(capi-base-common)
-BuildRequires: pkgconfig(evas)
-BuildRequires: pkgconfig(eina)
-BuildRequires: pkgconfig(ecore)
-BuildRequires: pkgconfig(elementary)
-BuildRequires: pkgconfig(voice-control-widget)
+BuildRequires:  pkgconfig(capi-system-info)
 BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(eina)
 BuildRequires: pkgconfig(edje)
-BuildRequires: pkgconfig(efl-assist)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(evas)
 BuildRequires: pkgconfig(libxml-2.0)
+BuildRequires: pkgconfig(voice-control-widget)
 BuildRequires: gettext-tools
 
 %description
@@ -46,16 +46,16 @@ mkdir objdir
 %{?SRPOL_DEBUG:
 (cd objdir && cmake .. -DVERSION=%{version} \
        -DCMAKE_INSTALL_PREFIX=%{_prefix} \
-    -DLIBDIR=%{_libdir} \
-    -DINCLUDEDIR=%{_includedir} \
+       -DLIBDIR=%{_libdir} \
+       -DINCLUDEDIR=%{_includedir} \
        -DCMAKE_BUILD_TYPE=Debug \
        -DSRPOL_DEBUG="1")
 }
 %{!?SRPOL_DEBUG:
 (cd objdir && cmake .. -DVERSION=%{version} \
        -DCMAKE_INSTALL_PREFIX=%{_prefix} \
-    -DLIBDIR=%{_libdir} \
-    -DINCLUDEDIR=%{_includedir} \
+       -DLIBDIR=%{_libdir} \
+       -DINCLUDEDIR=%{_includedir} \
        -DCMAKE_BUILD_TYPE=Debug \
        -DSRPOL_DEBUG="0")
 }
index 9cd722a43fc4f9e479485da597f768f9667ef674..1026da5180191d24dcb94550da61b9a74c554b3f 100644 (file)
@@ -2,6 +2,7 @@ FILE(GLOB VC_ELM_SOURCES *.c)
 
 SET(VC_ELM_PKGS
        capi-base-common
+       capi-system-info
        evas
        eina
        ecore
index a75eecf796dbfc63e1938746fe80823496115686..523a574c1f32cd7127811dba94ac961f91baa917 100644 (file)
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-
+#include <system_info.h>
 #include "vc_elm_main.h"
 #include <voice_control_elm.h>
 
@@ -54,8 +54,43 @@ struct __vc_elm_widget_cb_data_s {
 
 typedef struct __vc_elm_widget_cb_data_s vc_elm_widget_cb_data_s;
 
+static int g_feature_enabled = -1;
+
+static int __vc_elm_get_feature_enabled()
+{
+       if (0 == g_feature_enabled) {
+               VC_ELM_LOG_DBG("[ERROR] Voice control feature NOT supported");
+               return VC_ELM_ERROR_NOT_SUPPORTED;
+       } else if (-1 == g_feature_enabled) {
+               bool vc_supported = false;
+               bool mic_supported = false;
+               if (0 == system_info_get_platform_bool(VC_ELM_FEATURE_PATH, &vc_supported)) {
+                       if (0 == system_info_get_platform_bool(VC_ELM_MIC_FEATURE_PATH, &mic_supported)) {
+                               if (false == vc_supported || false == mic_supported) {
+                                       VC_ELM_LOG_DBG("[ERROR] Voice control feature NOT supported");
+                                       g_feature_enabled = 0;
+                                       return VC_ELM_ERROR_NOT_SUPPORTED;
+                               }
+
+                               g_feature_enabled = 1;
+                       } else {
+                               VC_ELM_LOG_DBG("[ERROR] Fail to get feature value");
+                               return VC_ELM_ERROR_NOT_SUPPORTED;
+                       }
+               } else {
+                       VC_ELM_LOG_DBG("[ERROR] Fail to get feature value");
+                       return VC_ELM_ERROR_NOT_SUPPORTED;
+               }
+       }
+       return 0;
+}
+
 int vc_elm_initialize()
 {
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        if (true == is_vc_elm_initialized) {
                VC_ELM_LOG_DBG("vc elm is already initialized");
                return VC_ELM_ERROR_INVALID_STATE;
@@ -79,14 +114,17 @@ int vc_elm_deinitialize()
        Eina_List *l;
        vc_elm_h handler = NULL;
 
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        if (false == is_vc_elm_initialized) {
                VC_ELM_LOG_DBG("vc elm is already deinitialized");
                return VC_ELM_ERROR_INVALID_STATE;
        }
 
        if (NULL != g_handlers_list) {
-               EINA_LIST_FOREACH(g_handlers_list, l, handler)
-               {
+               EINA_LIST_FOREACH(g_handlers_list, l, handler) {
                        vc_elm_unset_command(handler);
                        vc_elm_unset_command_hint(handler);
                        vc_elm_destroy(handler);
@@ -106,7 +144,12 @@ int vc_elm_deinitialize()
 
 int vc_elm_foreach_supported_languages(vc_elm_supported_language_cb callback, void *user_data)
 {
-       int ret = vc_widget_foreach_supported_languages(callback, user_data);
+       int ret;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
+       ret = vc_widget_foreach_supported_languages(callback, user_data);
        switch (ret) {
        case VC_ERROR_NONE:
                ret = VC_ELM_ERROR_NONE;
@@ -126,7 +169,12 @@ int vc_elm_foreach_supported_languages(vc_elm_supported_language_cb callback, vo
 
 int vc_elm_get_current_language(char **language)
 {
-       int ret = vc_widget_get_current_language(language);
+       int ret;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
+       ret = vc_widget_get_current_language(language);
        switch (ret) {
        case VC_ERROR_NONE:
                ret = VC_ELM_ERROR_NONE;
@@ -163,6 +211,10 @@ int vc_elm_foreach_supported_widgets(vc_elm_widget_cb callback, void *user_data)
 {
        vc_elm_widget_cb_data_s data;
        const Eina_Hash  *hash = NULL;
+
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == callback) {
                VC_ELM_LOG_ERR("Invalid parameters detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -189,6 +241,9 @@ int vc_elm_foreach_supported_actions(const char *widget, vc_elm_action_cb callba
        Eina_List *l = NULL;
        const char *action_tag = NULL;
 
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if ((NULL == widget) || (NULL == callback)) {
                VC_ELM_LOG_ERR("Invalid parameters detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -207,8 +262,7 @@ int vc_elm_foreach_supported_actions(const char *widget, vc_elm_action_cb callba
                VC_ELM_LOG_ERR("Action list is NULL!");
                return VC_ELM_ERROR_OPERATION_FAILED;
        }
-       EINA_LIST_FOREACH(actions_list, l, action_tag)
-       {
+       EINA_LIST_FOREACH(actions_list, l, action_tag) {
                if (NULL != action_tag) {
                        callback(action_tag, user_data);
                }
@@ -221,6 +275,10 @@ int vc_elm_get_action_command(const char *action, char **command)
        const Eina_Hash *hash = NULL;
        const char *command_name = NULL;
        size_t len = 0;
+
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if ((NULL == action) || (NULL == command)) {
                VC_ELM_LOG_ERR("Invalid parameters detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -252,6 +310,9 @@ int vc_elm_get_action_command(const char *action, char **command)
 int vc_elm_create_object(Evas_Object *object, vc_elm_h *vc_elm)
 {
        vc_elm_s *handler = NULL;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
 
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid parameters detected! (vc_elm_h *) poiter is NULL");
@@ -280,12 +341,17 @@ int vc_elm_create_object(Evas_Object *object, vc_elm_h *vc_elm)
        handler->data = (void *)object;
        g_handlers_list = eina_list_append(g_handlers_list, handler);
        *vc_elm = (vc_elm_h)handler;
+       _vc_elm_core_set_view_changed();
        return VC_ELM_ERROR_NONE;
 }
 
 int vc_elm_create_item(Elm_Object_Item *item, vc_elm_h *vc_elm)
 {
        vc_elm_s *handler = NULL;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid parameters detected! (vc_elm_h *) poiter is NULL");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -309,6 +375,7 @@ int vc_elm_create_item(Elm_Object_Item *item, vc_elm_h *vc_elm)
        handler->data = (void *)item;
        g_handlers_list = eina_list_append(g_handlers_list, handler);
        *vc_elm = (vc_elm_h)handler;
+       _vc_elm_core_set_view_changed();
        return VC_ELM_ERROR_NONE;
 }
 
@@ -317,6 +384,9 @@ int vc_elm_destroy(vc_elm_h vc_elm)
        vc_elm_s *handler = NULL;
        Eina_List *list = NULL;
        int type = 0;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid vc_elm parameter detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -336,6 +406,7 @@ int vc_elm_destroy(vc_elm_h vc_elm)
        g_handlers_list = eina_list_remove_list(g_handlers_list, list);
        free(handler);
        handler = NULL;
+       _vc_elm_core_set_view_changed();
        return VC_ELM_ERROR_NONE;
 }
 
@@ -343,6 +414,9 @@ int vc_elm_set_command(vc_elm_h vc_elm, const char *command)
 {
        vc_elm_s *handler = (vc_elm_s *)vc_elm;
        int type = 0;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid vc_elm parameter detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -355,6 +429,7 @@ int vc_elm_set_command(vc_elm_h vc_elm, const char *command)
                Elm_Object_Item *it = (Elm_Object_Item *)handler->data;
                return _vc_elm_set_item_object_command(it, command);
        }
+       _vc_elm_core_set_view_changed();
        return VC_ELM_ERROR_INVALID_PARAMETER;
 }
 
@@ -362,6 +437,9 @@ int vc_elm_unset_command(vc_elm_h vc_elm)
 {
        vc_elm_s *handler = (vc_elm_s *)vc_elm;
        int type = 0;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid vc_elm parameter detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -374,6 +452,7 @@ int vc_elm_unset_command(vc_elm_h vc_elm)
                Elm_Object_Item *it = (Elm_Object_Item *)handler->data;
                return _vc_elm_unset_item_object_command(it);
        }
+       _vc_elm_core_set_view_changed();
        return VC_ELM_ERROR_INVALID_PARAMETER;
 }
 
@@ -381,6 +460,9 @@ int vc_elm_set_command_hint(vc_elm_h vc_elm, const char* hint)
 {
        vc_elm_s *handler = (vc_elm_s *)vc_elm;
        int type = 0;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid vc_elm parameter detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -393,6 +475,7 @@ int vc_elm_set_command_hint(vc_elm_h vc_elm, const char* hint)
                Elm_Object_Item *it = (Elm_Object_Item *)handler->data;
                return _vc_elm_set_item_object_hint(it, hint);
        }
+       _vc_elm_core_set_view_changed();
        return VC_ELM_ERROR_INVALID_PARAMETER;
 }
 
@@ -400,6 +483,9 @@ int vc_elm_unset_command_hint(vc_elm_h vc_elm)
 {
        vc_elm_s *handler = (vc_elm_s *)vc_elm;
        int type = 0;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid vc_elm parameter detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -412,6 +498,7 @@ int vc_elm_unset_command_hint(vc_elm_h vc_elm)
                Elm_Object_Item *it = (Elm_Object_Item *)handler->data;
                return _vc_elm_unset_item_object_hint(it);
        }
+       _vc_elm_core_set_view_changed();
        return VC_ELM_ERROR_INVALID_PARAMETER;
 }
 
@@ -419,6 +506,9 @@ int vc_elm_set_command_hint_direction(vc_elm_h vc_elm, vc_elm_direction_e direct
 {
        vc_elm_s *handler = (vc_elm_s *)vc_elm;
        int type = 0;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid vc_elm parameter detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -432,6 +522,7 @@ int vc_elm_set_command_hint_direction(vc_elm_h vc_elm, vc_elm_direction_e direct
                Evas_Object *parent = elm_object_item_widget_get(it);
                return _vc_elm_set_sub_item_hint_direction(parent, direction);
        }
+       _vc_elm_core_set_view_changed();
        return VC_ELM_ERROR_INVALID_PARAMETER;
 }
 
@@ -439,6 +530,9 @@ int vc_elm_get_command_hint_direction(vc_elm_h vc_elm, vc_elm_direction_e *direc
 {
        vc_elm_s *handler = (vc_elm_s *)vc_elm;
        int type = 0;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid vc_elm parameter detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -459,6 +553,9 @@ int vc_elm_set_command_hint_offset(vc_elm_h vc_elm, int pos_x, int pos_y)
 {
        vc_elm_s *handler = (vc_elm_s *)vc_elm;
        int type = 0;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid vc_elm parameter detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -471,6 +568,7 @@ int vc_elm_set_command_hint_offset(vc_elm_h vc_elm, int pos_x, int pos_y)
                Elm_Object_Item *it = (Elm_Object_Item *)handler->data;
                return _vc_elm_set_item_object_custom_hint(it, NULL, pos_x, pos_y);
        }
+       _vc_elm_core_set_view_changed();
        return VC_ELM_ERROR_INVALID_PARAMETER;
 }
 
@@ -479,6 +577,9 @@ int vc_elm_get_command_hint_offset(vc_elm_h vc_elm, int *pos_x, int *pos_y)
        vc_elm_s *handler = (vc_elm_s *)vc_elm;
        const char *path = NULL;
        int type = 0;
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (NULL == vc_elm) {
                VC_ELM_LOG_ERR("Invalid vc_elm parameter detected!");
                return VC_ELM_ERROR_INVALID_PARAMETER;
@@ -502,28 +603,34 @@ int vc_elm_set_current_language_changed_cb(vc_elm_current_language_changed_cb ca
 {
        int ret = VC_ELM_ERROR_NONE;
 
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (false == is_vc_elm_initialized) {
                VC_ELM_LOG_ERR("Invalid state detected! Library not initialized!");
                return VC_ELM_ERROR_INVALID_STATE;
        }
 
-       ret = vc_elm_widget_wrapper_set_current_language_changed_callback(callback, user_data);
+       ret = _vc_elm_widget_wrapper_set_current_language_changed_callback(callback, user_data);
        if (0 != ret) {
                return VC_ELM_ERROR_OPERATION_FAILED;
        }
        return VC_ELM_ERROR_NONE;
 }
 
-int vc_elm_unset_current_language_changed_cb()
+int vc_elm_unset_current_language_changed_cb(void)
 {
        int ret = VC_ELM_ERROR_NONE;
 
+       if (0 != __vc_elm_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
        if (false == is_vc_elm_initialized) {
                VC_ELM_LOG_ERR("Invalid state detected! Library not initialized!");
                return VC_ELM_ERROR_INVALID_STATE;
        }
 
-       ret = vc_elm_widget_wrapper_unset_current_language_changed_callback();
+       ret = _vc_elm_widget_wrapper_unset_current_language_changed_callback();
        if (0 != ret) {
                return VC_ELM_ERROR_OPERATION_FAILED;
        }
index 295305608b6d49f69e6baff73686751c70565c5a..ca1560cfed7201b550f77758444473ae761d4094 100644 (file)
@@ -61,10 +61,14 @@ static char *g_tooltips_image_path = NULL;
 static char *g_tooltips_default_direction = NULL;
 static char *g_tooltips_show = NULL;
 
+static Ecore_Timer *g_animation_view_idler = NULL;
+static Eina_Bool g_view_changed = EINA_FALSE;
+
 #define HIDE 0xa
 #define X_VISIBILITY_TOLERANCE 32.0
 #define Y_VISIBILITY_TOLERANCE 54.0
 
+static void   __idle_changed(Ecore_Evas *ee);
 const Eina_Hash *_vc_elm_core_get_config_action_map()
 {
        return g_config_action_map;
@@ -303,6 +307,7 @@ void _vc_elm_core_init()
        g_config_widget_map = eina_hash_string_superfast_new(__hash_entry_eina_list_free_cb);
 
        ret = _vc_elm_core_read_xml_data();
+       g_view_changed = EINA_FALSE;
        VC_ELM_LOG_DBG("XML RETURNED %d", ret);
 }
 
@@ -398,7 +403,7 @@ static Eina_List *__get_objects_of_visible_items(Evas_Object *parent, Elm_Object
                        eina_hash_add(registered_item_map, name, strdup("1"));
                }
                VC_ELM_LOG_DBG("have a visible item %d %d %d %d", x_1, y_1, w_1, h_1);
-               if (NULL == name)
+               if ((NULL == name) || (!strcmp("Elm_Layout", name)))
                        evas_object_data_set(obj, "special_item", item);
                ret = eina_list_append(ret, obj);
        } while ((item = get_next(item)) != NULL);
@@ -693,9 +698,8 @@ static Eina_Bool __elm_widget_foreach_to_list_add(Evas_Object *widget, Eina_List
 
        if (obj_name) {
                if ((!strcmp("Elm_Inwin", obj_name)) || (!strcmp("Elm_Popup", obj_name)) || (!strcmp("Elm_Ctxpopup", obj_name))) {
-                       if (list && (*list)) {
-                               eina_list_free(*list);
-                               *list = NULL;
+                       if (*list) {
+                               *list = eina_list_free(*list);
                        }
                } else if ((!strcmp("Elm_Icon", obj_name))) {
                        if ((NULL != parent_obj_name && !strcmp(parent_obj_name, "Elm_Genlist")) && (NULL != parents_parent_obj_name && !strcmp(parents_parent_obj_name, "Elm_Fileselector")))
@@ -756,7 +760,7 @@ void _show_tooltips()
                obj_name = _get_ui_object_name(obj);
                parent_obj_name = _get_ui_object_name(parent);
 
-               if (!obj_name && evas_object_data_get(obj, "special_item"))
+               if ((!obj_name && evas_object_data_get(obj, "special_item")) || (!strcmp(obj_name, "Elm_Layout") && evas_object_data_get(obj, "special_item")))
                        obj_name = eina_stringshare_add("evc-item");
 
                if (!obj_name) {
@@ -819,6 +823,7 @@ void _show_tooltips()
        }
 
        _vc_elm_relayout_and_show_tooltips();
+       g_view_changed = EINA_FALSE;
 }
 
 struct vc_elm_core_widget_info *_vc_elm_core_register_widget(const char *widget_name, vc_elm_get_subobjects_cb get_subobjects_func, vc_elm_command_filter_cb is_filtered_func, void *user_data)
@@ -906,7 +911,7 @@ static void __vc_add_commands()
                registered = 0;
                if (obj_name)
                        VC_ELM_LOG_DBG("Adding command for %s", obj_name);
-               if (!obj_name && evas_object_data_get(obj, "special_item"))
+               if ((!obj_name && evas_object_data_get(obj, "special_item")) || (!strcmp(obj_name, "Elm_Layout") && evas_object_data_get(obj, "special_item")))
                        obj_name = eina_stringshare_add("evc-item");
                if (!obj_name) {
                        VC_ELM_LOG_DBG("Widget '%p' has no type specified", obj_name);
@@ -1271,20 +1276,39 @@ Eina_Bool _vc_elm_core_set_object_custom_hint(Evas_Object *obj, const char *imag
                return EINA_FALSE;
        }
        evas_object_data_set(obj, _vc_elm_get_data_key(VC_ELM_HINT_IMAGE_PATH), (const void *)image_path);
-       evas_object_data_set(obj, _vc_elm_get_data_key(VC_ELM_POSITION_X), (void *)pos_x);
-       evas_object_data_set(obj, _vc_elm_get_data_key(VC_ELM_POSITION_Y), (void *)pos_y);
+
+       if (pos_x >= 0)
+               evas_object_data_set(obj, _vc_elm_get_data_key(VC_ELM_POSITION_X), (void *)(pos_x + 1));
+       else
+               evas_object_data_set(obj, _vc_elm_get_data_key(VC_ELM_POSITION_X), (void *)(pos_x - 1));
+
+       if (pos_y >= 0)
+               evas_object_data_set(obj, _vc_elm_get_data_key(VC_ELM_POSITION_Y), (void *)(pos_y + 1));
+       else
+               evas_object_data_set(obj, _vc_elm_get_data_key(VC_ELM_POSITION_Y), (void *)(pos_y - 1));
        return EINA_TRUE;
 }
 
 Eina_Bool _vc_elm_core_get_object_custom_hint(Evas_Object *obj, const char **image_path, int *pos_x, int *pos_y)
 {
+       int acc;
        if (NULL == obj) {
                VC_ELM_LOG_ERR("Invalid Evas_Object parameter detected!");
                return EINA_FALSE;
        }
        *image_path = (const char *)evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_HINT_IMAGE_PATH));
-       *pos_x = (int)(evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_X)));
-       *pos_y = (int)evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_Y));
+
+       acc = (int)(evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_X)));
+       if (acc > 0)
+               *pos_x = acc - 1;
+       else
+               *pos_x = acc + 1;
+
+       acc = (int)evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_Y));
+       if (acc > 0)
+               *pos_y = acc - 1;
+       else
+               *pos_y = acc + 1;
        return EINA_TRUE;
 }
 
@@ -1395,13 +1419,13 @@ Eina_Bool _vc_elm_core_del_object_hint_direction(Evas_Object *obj)
 
 Eina_Bool _vc_elm_core_set_sub_item_hint_direction(Evas_Object *obj, vc_elm_direction_e direction)
 {
-       evas_object_data_set(obj, VC_ELM_SUB_ITEM_DIRECTION, (void *)direction);
+       evas_object_data_set(obj, VC_ELM_SUB_ITEM_DIRECTION, (void *)(direction + 1));
        return EINA_TRUE;
 }
 
 Eina_Bool _vc_elm_core_get_sub_item_hint_direction(Evas_Object *obj, vc_elm_direction_e *direction)
 {
-       *direction = (vc_elm_direction_e)evas_object_data_get(obj, VC_ELM_SUB_ITEM_DIRECTION);
+       *direction = ((vc_elm_direction_e)evas_object_data_get(obj, VC_ELM_SUB_ITEM_DIRECTION)) - 1;
        return EINA_TRUE;
 }
 
@@ -1427,10 +1451,50 @@ static void __show_or_hide_tooltips_callback(bool show_or_hide)
                _hide_tooltips();
 }
 
-/*static void   __idle_changed(Ecore_Evas *ee) {
+static Eina_Bool on_idle(void *data)
+{
+       int ret = -1;
+       (void)data;
+       VC_ELM_LOG_DBG("End Of View Transformation, tooltip displayed (%d), changed (%d)", g_tooltips_displayed, g_view_changed);
+
+       if (g_animation_view_idler) {
+               ecore_timer_del(g_animation_view_idler);
+               g_animation_view_idler = NULL;
+       }
+
+       if (g_tooltips_displayed) {
+
+               if (g_view_changed){
+                       _vc_elm_widget_wrapper_clear_commands();
+                       /*_show_tooltips();*/
+                       ret = _vc_elm_widget_wrapper_cancel();
+                       if (0 != ret) {
+                               VC_ELM_LOG_ERR("Error to cancel widget");
+                       }
+                       g_view_changed = EINA_FALSE;
+               } else if (_vc_elm_relayout_changed()) {
+                       _hide_tooltips();
+                       ecore_main_loop_iterate();
+                       _vc_elm_widget_wrapper_clear_commands();
+                       _show_tooltips();
+               }
+       }
+       return EINA_FALSE;
+}
+
+static void __idle_changed(Ecore_Evas *ee)
+{
        (void)ee;
-       VC_ELM_LOG_DBG("Evas has changed");
-}*/
+       VC_ELM_LOG_DBG("View changed");
+       if (g_tooltips_displayed && g_view_changed){
+               _hide_tooltips();
+       }
+       if (g_animation_view_idler) {
+               ecore_timer_del(g_animation_view_idler);
+               g_animation_view_idler = NULL;
+       }
+       g_animation_view_idler = ecore_timer_add(0.5, on_idle, ee);
+}
 
 /**
  * @brief Internal callback that sets the vc_widget's foreground option to true.
@@ -1446,7 +1510,7 @@ static void __vc_elm_event_window_focus_in(void *data, Evas_Object *obj, void *e
        VC_ELM_LOG_DBG("Focus in");
 }
 
-/**
+/*
  * @brief Internal callback that sets the vc_widget's foreground option to false
  */
 static void __vc_elm_event_window_focus_out(void *data, Evas_Object *obj, void *event_info)
@@ -1462,6 +1526,20 @@ static void __vc_elm_event_window_focus_out(void *data, Evas_Object *obj, void *
        VC_ELM_LOG_DBG("Focus out");
 }
 
+void _vc_elm_core_register_view_change_detection()
+{
+       Ecore_Evas *ecevas = NULL;
+       ecevas = ecore_evas_ecore_evas_get(evas_object_evas_get(g_default_window));
+       ecore_evas_callback_post_render_set(ecevas, __idle_changed);
+}
+
+void _vc_elm_core_unregister_view_change_detection()
+{
+       Ecore_Evas *ecevas = NULL;
+       ecevas = ecore_evas_ecore_evas_get(evas_object_evas_get(g_default_window));
+       ecore_evas_callback_post_render_set(ecevas, NULL);
+}
+
 static Eina_Bool __idle_enter(void *data)
 {
        Eina_List *l;
@@ -1474,13 +1552,8 @@ static Eina_Bool __idle_enter(void *data)
                evas_object_smart_callback_del(g_default_window, "unfocused", __vc_elm_event_window_focus_out);
        }
 
-#if 0
-       VC_ELM_LOG_DBG("Focused %ud", focused);
        VC_ELM_LOG_DBG("Focused g_default %ud", elm_win_xwindow_get(g_default_window));
-       if (!is_focused || focused != elm_win_xwindow_get(g_default_window)) {
-#else
        if (!is_focused) {
-#endif
                /* window changed, we need to get new one */
                VC_ELM_LOG_DBG("list count %d", eina_list_count(ui_objects_list));
                EINA_LIST_FOREACH(ui_objects_list, l, obj) {
@@ -1488,13 +1561,8 @@ static Eina_Bool __idle_enter(void *data)
                        VC_ELM_LOG_DBG("foreach obj %p", (void*)obj);
                        window = elm_object_top_widget_get(obj);
                        if (window && elm_win_focus_get(window) == EINA_TRUE) {
-                               /*Ecore_Evas *ecevas = NULL;*/
-#if 0
                                VC_ELM_LOG_DBG("NEW Focused g_default %ud", elm_win_xwindow_get(window));
-#endif
                                g_default_window = window;
-                               /*ecevas = ecore_evas_ecore_evas_get(evas_object_evas_get(g_default_window));
-                               ecore_evas_callback_post_render_set(ecevas, __idle_changed);*/
                                break;
                        }
                }
@@ -1502,12 +1570,11 @@ static Eina_Bool __idle_enter(void *data)
 
        evas_object_smart_callback_add(g_default_window, "focused", __vc_elm_event_window_focus_in, NULL);
        evas_object_smart_callback_add(g_default_window, "unfocused", __vc_elm_event_window_focus_out, NULL);
+
        /* OK, window set properly now */
 
        _vc_elm_set_tooltips_window(g_default_window);
-#if 0
        VC_ELM_LOG_DBG("elm_win_xwindow_get = %p", (void*)elm_win_xwindow_get(g_default_window));
-#endif
 
        if (elm_win_wm_rotation_supported_get(g_default_window)) {
                int rots[4] = {0, 90, 180, 270};
@@ -1533,10 +1600,10 @@ static void __rotation(void *data, Evas_Object *obj, void *event_info)
        (void)event_info;
        if (!g_tooltips_displayed)
                return;
-       __show_or_hide_tooltips_callback(false);
+       /*__show_or_hide_tooltips_callback(false);
        ecore_main_loop_iterate();
        __show_or_hide_tooltips_callback(true);
-       ecore_main_loop_iterate();
+       ecore_main_loop_iterate();*/
 }
 
 const char *_vc_elm_get_custom_widget_name()
@@ -1648,16 +1715,22 @@ int _vc_elm_core_read_xml_data()
                                                if (0 == xmlStrcmp(child->name, XML_CAST VC_ELM_TAG_HINT_SHOW)) {
                                                        key = xmlNodeGetContent(child);
                                                        VC_ELM_LOG_DBG("hint show %s", (char*)key);
+                                                       if (g_tooltips_show)
+                                                               free(g_tooltips_show);
                                                        g_tooltips_show = strdup((char*)key);
                                                        xmlFree(key);
                                                } else if (0 == xmlStrcmp(child->name, XML_CAST VC_ELM_TAG_HINT_DIRECTION)) {
                                                        key = xmlNodeGetContent(child);
                                                        VC_ELM_LOG_DBG("hint direction %s", (char*)key);
+                                                       if (g_tooltips_default_direction)
+                                                               free(g_tooltips_default_direction);
                                                        g_tooltips_default_direction = strdup((char*)key);
                                                        xmlFree(key);
                                                } else if (0 == xmlStrcmp(child->name, XML_CAST VC_ELM_TAG_HINT_IMAGE)) {
                                                        key = xmlNodeGetContent(child);
                                                        VC_ELM_LOG_DBG("hint image %s", (char*)key);
+                                                       if (g_tooltips_image_path)
+                                                               free(g_tooltips_image_path);
                                                        g_tooltips_image_path = strdup((char*)key);
                                                        xmlFree(key);
                                                }
@@ -1696,12 +1769,18 @@ int _vc_elm_core_read_xml_data()
 int _vc_elm_core_destroy_xml_data()
 {
 
-       if (g_tooltips_show)
+       if (g_tooltips_show) {
                free(g_tooltips_show);
-       if (g_tooltips_default_direction)
+               g_tooltips_show = NULL;
+       }
+       if (g_tooltips_default_direction) {
                free(g_tooltips_default_direction);
-       if (g_tooltips_image_path)
+               g_tooltips_default_direction = NULL;
+       }
+       if (g_tooltips_image_path) {
                free(g_tooltips_image_path);
+               g_tooltips_image_path = NULL;
+       }
        return VC_ELM_ERROR_NONE;
 }
 
@@ -1746,3 +1825,9 @@ int _vc_elm_core_get_tooltip_show()
 
        return EINA_FALSE;
 }
+
+void _vc_elm_core_set_view_changed()
+{
+       g_view_changed = EINA_TRUE;
+       __idle_changed(NULL);
+}
index cabdc4bcb33a97e1bb47079e69804e8cb50059c5..a71584281d4dacc0fb60a10adc4391dac0b30e30 100644 (file)
@@ -29,11 +29,7 @@ extern "C" {
  * @brief This file contains core functions, that define the behaviour of library
  */
 
-#ifdef LIB64
-#define VC_ELM_CONFIG_XML              "/usr/lib64/voice/vc-elm/1.0/voice-control-elm-config.xml"
-#else
-#define VC_ELM_CONFIG_XML              "/usr/lib/voice/vc-elm/1.0/voice-control-elm-config.xml"
-#endif
+#define VC_ELM_CONFIG_XML              VOICE_LIBDIR"/voice/vc-elm/1.0/voice-control-elm-config.xml"
 #define VC_ELM_TAG_BASE_NAME           "voice-control-elm-config"
 
 #define VC_ELM_TAG_ACTION_LIST         "action-list"
@@ -62,18 +58,22 @@ extern "C" {
 #define VC_ELM_DIRECTION               "vc_elm_direction"
 #define VC_ELM_SUB_ITEM_DIRECTION      "vc_elm_sub_item_direction"
 
+#define VC_ELM_FEATURE_PATH            "tizen.org/feature/speech.control"
+#define VC_ELM_MIC_FEATURE_PATH                "tizen.org/feature/microphone"
+
 /**
  * @brief This array holds names for autogenerated tooltips
  */
-static const char *const autogen_names[] =
-       {"IDS_ALPHA", "IDS_BRAVO", "IDS_CHARLIE", "IDS_DELTA", "IDS_ECHO",
+static const char *const autogen_names[] = {
+       "IDS_ALPHA", "IDS_BRAVO", "IDS_CHARLIE", "IDS_DELTA", "IDS_ECHO",
        "IDS_FOXTROT", "IDS_GOLF", "IDS_HOTEL", "IDS_INDIA", "IDS_JULIET",
        "IDS_KILO", "IDS_LIMA", "IDS_MIKE", /*"IDS_NOVEMBER",*/"IDS_OSCAR",
        "IDS_PAPA", "IDS_QUEBEC", "IDS_ROMEO", "IDS_SIERRA", "IDS_TANGO",
        "IDS_UNIFORM", "IDS_VICTOR", "IDS_WHISKEY", "IDS_X_RAY", "IDS_YANKEE",
        "IDS_ZULU", "IDS_ZORRO", "IDS_CASTLE", "IDS_ONE", "IDS_TWO",
        "IDS_THREE", "IDS_FOUR", "IDS_FIVE", "IDS_SIX", "IDS_SEVEN",
-       "IDS_EIGHT", "IDS_NINE", "IDS_TEN", "IDS_ELEVEN", "IDS_TWELVE"};
+       "IDS_EIGHT", "IDS_NINE", "IDS_TEN", "IDS_ELEVEN", "IDS_TWELVE"
+};
 
 /**
  * @brief A handle to the dynamic action info structure
@@ -498,6 +498,11 @@ const Eina_Hash *_vc_elm_core_get_config_action_map();
  */
 const Eina_Hash *_vc_elm_core_get_config_widget_map();
 
+void _vc_elm_core_register_view_change_detection();
+
+void _vc_elm_core_unregister_view_change_detection();
+
+void _vc_elm_core_set_view_changed();
 
 #ifdef __cplusplus
 }
index 8b2c58960376e009f5a5d29a79b7953fa2b88fcb..22d60b0a17edefe4ec03db09f3eb67f22e12a6f0 100644 (file)
@@ -62,7 +62,7 @@ enum SCROLL_DIRECTION {
        TO_END
 };
 
-static void __set_toooltips_position_on_visible_items(Evas_Object *parent, Elm_Object_Item *(*get_first)(const Evas_Object *obj, void *user_data), Elm_Object_Item *(*get_next)(const Elm_Object_Item *item, void *user_data), void *user_data);
+static void __set_tooltips_position_on_visible_items(Evas_Object *parent, Elm_Object_Item *(*get_first)(const Evas_Object *obj, void *user_data), Elm_Object_Item *(*get_next)(const Elm_Object_Item *item, void *user_data), void *user_data);
 
 /**
  * @brief Function for scrolling elementary object
@@ -455,7 +455,7 @@ static Eina_Bool __genlist_filter_func(Evas_Object *obj, const char *action, voi
        (void)action;
        (void)user_data;
 
-       __set_toooltips_position_on_visible_items(obj, __genlist_filter_first_item_get, __genlist_filter_item_next_get, NULL);
+       __set_tooltips_position_on_visible_items(obj, __genlist_filter_first_item_get, __genlist_filter_item_next_get, NULL);
 
        first = __genlist_filter_first_item_get(obj, NULL);
        last = __genlist_filter_last_item_get(obj, NULL);
@@ -595,7 +595,7 @@ static void __list_activator_func(Evas_Object *obj, void *data, const char *acti
 /**
  * @brief Function found and set voice tooltips on list
  */
-static void __set_toooltips_position_on_visible_items(Evas_Object *parent, Elm_Object_Item *(*get_first)(const Evas_Object *obj, void *user_data), Elm_Object_Item *(*get_next)(const Elm_Object_Item *item, void *user_data), void *user_data)
+static void __set_tooltips_position_on_visible_items(Evas_Object *parent, Elm_Object_Item *(*get_first)(const Evas_Object *obj, void *user_data), Elm_Object_Item *(*get_next)(const Elm_Object_Item *item, void *user_data), void *user_data)
 {
        Elm_Object_Item *item = get_first(parent, user_data);
        vc_elm_direction_e direction = VC_ELM_DIRECTION_CENTER;
@@ -673,7 +673,7 @@ static Eina_Bool __list_filter_func(Evas_Object *obj, const char *action, void *
        (void)action;
        (void)user_data;
 
-       __set_toooltips_position_on_visible_items(obj, __list_filter_first_item_get, list_filter_item_next_get, NULL);
+       __set_tooltips_position_on_visible_items(obj, __list_filter_first_item_get, list_filter_item_next_get, NULL);
        first = __list_filter_first_item_get(obj, NULL);
        last = list_filter_last_item_get(obj, NULL);
        first_visible = _vc_elm_core_get_visible_item(obj, __list_filter_first_item_get, list_filter_item_next_get, NULL);
index f616f965d0531d145b5fe682fea5e3b4061eb0c2..7eba33e3677bba7e568638cf4d5efc4119c25189 100644 (file)
@@ -32,18 +32,19 @@ void _R_set_from_efl(R *p, Evas_Object *obj)
        int y;
        int w;
        int h;
-       int *tx;
-       int *ty;
+       int tx;
+       int ty;
        intptr_t ptx;
        intptr_t pty;
        evas_object_geometry_get(obj, &x, &y, &w, &h);
        ptx = (intptr_t)evas_object_data_get(obj, VC_ELM_FIXED_X);
        pty = (intptr_t)evas_object_data_get(obj, VC_ELM_FIXED_Y);
+
        tx = *((int *)(&ptx));
        ty = *((int *)(&pty));
        if (tx != 0 && ty != 0) {
-               x = (int)tx;
-               y = (int)ty;
+               x = tx;
+               y = ty;
        }
        p->x = x;
        p->y = y;
index 1648578f34228129a16054ffa9b53d487889c4b0..789648366ef3ef89406fb5db3bd8ac0bd7e5804b 100644 (file)
@@ -28,7 +28,7 @@ extern "C" {
 /**
  * @brief Structure that contains Evas_Object dimensions
  */
- struct _R {
+struct _R {
        int x;
        int y;
        int w;
index f5f45cb76919a646c687eee6e6868a1921c4814b..14eb68818be4591e99691fea8cb2f4db29a5dcd2 100644 (file)
@@ -346,6 +346,16 @@ void _vc_elm_relayout_and_show_tooltips()
                        int position_x = (int)(evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_X)));
                        int position_y = (int)(evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_Y)));
 
+                       if (position_x > 0)
+                               --position_x;
+                       else
+                               ++position_x;
+
+                       if (position_y > 0)
+                               --position_y;
+                       else
+                               ++position_y;
+
                        t.x = position_x + o.x;
                        t.y = position_y + o.y;
                }
@@ -360,6 +370,131 @@ void _vc_elm_relayout_and_show_tooltips()
        free(recs);
 }
 
+int _vc_elm_relayout_changed()
+{
+       Eina_List *l;
+       Evas_Object *obj;
+       int inserted = 0;
+       int mw;
+       int mh;
+       int mx;
+       int my;
+       size_t length = eina_list_count(obj_list);
+       R *recs = (R *)malloc(sizeof(R) * length);
+       int nx;
+       int ny;
+       int nw;
+       int nh;
+
+       evas_object_geometry_get(g_grid, &mx, &my, &mw, &mh);
+
+       EINA_LIST_FOREACH(obj_list, l, obj) {
+               int p;
+               int direction;
+               R o;
+               R t;
+               R i;
+               Evas_Object *tip = evas_object_data_get(obj, "MyTooltipHandle");
+               int x;
+               int y;
+               int w;
+               int h;
+               _R_set_from_efl(&o, obj);
+
+               elm_grid_pack_get(tip, &x, &y, &w, &h);
+               t.x = ((x * mw) / SCALE) - mx;
+               t.y = ((y * mh) / SCALE) - my;
+               t.w = ((w * mw) / SCALE);
+               t.h = ((h * mh) / SCALE);
+
+               t.x = o.x - t.w + o.w / 2;
+               t.x = t.x < 0 ? 0 : t.x;
+               t.y = o.y - t.h + o.h / 2;
+               t.y = t.y < 0 ? 0 : t.y;
+
+               for (p = 0; p < inserted; ++p) {
+                       if (1 == _R_intersection(&t, &recs[p], &i)) {
+                               t.y += i.h + 1;
+                               if (1 == _R_intersection(&t, &recs[p], &i)) {
+                                       t.y -= i.h + 1;
+                                       t.x += i.w + 1;
+                                       if (1 == _R_intersection(&t, &recs[p], &i))
+                                               t.y += i.h + 1;
+                               }
+
+                       }
+               }
+
+               if (evas_object_data_get(obj, VC_ELM_DIRECTION) != NULL) {
+                       direction = (int)evas_object_data_get(obj, VC_ELM_DIRECTION);
+                       direction--;
+               } else if (evas_object_data_get(obj, VC_ELM_SUB_ITEM_DIRECTION) != NULL) {
+                       direction = (int)evas_object_data_get(obj, VC_ELM_SUB_ITEM_DIRECTION);
+                       direction--;
+               } else {
+                       direction = _vc_elm_core_get_tooltip_default_direction();
+               }
+               if (direction == VC_ELM_DIRECTION_CENTER) {
+                       t.x = o.x + o.w / 2 - t.w / 2;
+                       t.y = o.y + o.h / 2 - t.h / 2;
+               } else if (direction == VC_ELM_DIRECTION_LEFT) {
+                       t.x = o.x + o.w / 5 - t.w;
+                       t.y = o.y + o.h / 2 - t.h / 2;
+               } else if (direction == VC_ELM_DIRECTION_RIGHT) {
+                       t.x = o.x + o.w - o.w / 5;
+                       t.y = o.y + o.h / 2 - t.h / 2;
+               } else if (direction == VC_ELM_DIRECTION_TOP) {
+                       t.x = o.x + o.w / 2 - t.w / 2;
+                       t.y = o.y + o.h / 5 - t.h;
+               } else if (direction == VC_ELM_DIRECTION_BOTTOM) {
+                       t.x = o.x + o.w / 2 - t.w / 2;
+                       t.y = o.y + o.h - o.h / 5;
+               } else if (direction == VC_ELM_DIRECTION_LEFT_TOP) {
+                       t.x = o.x + o.w / 5 - t.w;
+                       t.y = o.y + o.h / 5 - t.h;
+               } else if (direction == VC_ELM_DIRECTION_LEFT_BOTTOM) {
+                       t.x = o.x + o.w / 5 - t.w;
+                       t.y = o.y + o.h - o.h / 5;
+               } else if (direction == VC_ELM_DIRECTION_RIGHT_TOP) {
+                       t.x = o.x + o.w - o.w / 5;
+                       t.y = o.y + o.h / 5 - t.h;
+               } else if (direction == VC_ELM_DIRECTION_RIGHT_BOTTOM) {
+                       t.x = o.x + o.w - o.w / 5;
+                       t.y = o.y + o.h - o.h / 5;
+               }
+
+               if (recs != NULL) {
+                       recs[inserted].x = t.x;
+                       recs[inserted].y = t.y;
+                       recs[inserted].w = t.w;
+                       recs[inserted].h = t.h;
+                       ++inserted;
+               }
+
+               if (evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_X)) != NULL && evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_Y)) != NULL) {
+                       int position_x = (int)(evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_X)));
+                       int position_y = (int)(evas_object_data_get(obj, _vc_elm_get_data_key(VC_ELM_POSITION_Y)));
+
+                       t.x = position_x + o.x;
+                       t.y = position_y + o.y;
+               }
+
+               nx = ((t.x - mx) * SCALE) / mw;
+               ny = ((t.y - my) * SCALE) / mh;
+               nw = (t.w * SCALE) / mw;
+               nh = (t.h * SCALE) / mh;
+
+               /*elm_grid_pack_set(tip, nx, ny, nw, nh);*/
+               VC_ELM_LOG_DBG("View changes detected: %d %d %d %d", abs(x - nx), abs(y - ny), abs(h - nh), abs(w - nw));
+               if((abs(x - nx) > 5) || (abs(y - ny) > 5) || (abs(h - nh) > 5) || (abs(w - nw) > 5)) {
+                       free(recs);
+                       return 1;
+               }
+       }
+       free(recs);
+       return 0;
+}
+
 void _vc_elm_tooltips_show_tooltip(Evas_Object *obj, const char *text)
 {
        if (domain_initialized == 0) {
index 0941121864c14465dbd24cd6bd7ae18bd483704e..083eaa5c26ac71bddd8a9d99d2ef15b6f6151d66 100644 (file)
@@ -62,6 +62,8 @@ void _vc_elm_add_tooltip(Evas_Object *obj, const char *text);
  */
 void _vc_elm_relayout_and_show_tooltips();
 
+int _vc_elm_relayout_changed();
+
 const char *_vc_elm_get_data_key(vc_elm_data_key key);
 
 #ifdef __cplusplus
index 8ee10da0ffad5c63e9080aa3d4a7e62ba4339291..b544b5e7148f5eccdb81ad73b8d322c87611b0b7 100644 (file)
@@ -50,27 +50,27 @@ static void __vc_language_changed_cb(const char *previous, const char *current,
 #define VC_ERROR_CHECK(args) do {                                                      \
                int err = args;                                                         \
                const char *msg = # args;                                               \
-                       switch (err) {                                                  \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_OUT_OF_MEMORY);        \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_IO_ERROR);             \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_INVALID_PARAMETER);    \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_TIMED_OUT);            \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_RECORDER_BUSY);        \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_PERMISSION_DENIED);    \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_NOT_SUPPORTED);        \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_INVALID_STATE);        \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_INVALID_LANGUAGE);     \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_ENGINE_NOT_FOUND);     \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_OPERATION_FAILED);     \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_OPERATION_REJECTED);   \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_ITERATION_END);        \
-                               VC_CMD_ERROR_CHECK_CASE(VC_ERROR_EMPTY);                \
-                               case VC_ERROR_NONE:                                     \
-                                       VC_ELM_LOG_DBG("NO error in (%s)", msg);        \
-                                       break;                                          \
-                               default:                                                \
-                                       VC_ELM_LOG_ERR("Unkown error in (%s)", msg);    \
-                       }                                                               \
+               switch (err) {                                                  \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_OUT_OF_MEMORY);        \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_IO_ERROR);             \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_INVALID_PARAMETER);    \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_TIMED_OUT);            \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_RECORDER_BUSY);        \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_PERMISSION_DENIED);    \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_NOT_SUPPORTED);        \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_INVALID_STATE);        \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_INVALID_LANGUAGE);     \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_ENGINE_NOT_FOUND);     \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_OPERATION_FAILED);     \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_OPERATION_REJECTED);   \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_ITERATION_END);        \
+                       VC_CMD_ERROR_CHECK_CASE(VC_ERROR_EMPTY);                \
+               case VC_ERROR_NONE:                                     \
+                       VC_ELM_LOG_DBG("NO error in (%s)", msg);        \
+                       break;                                          \
+               default:                                                \
+                       VC_ELM_LOG_ERR("Unkown error in (%s)", msg);    \
+               }                                                               \
        } while (0)
 
 static void __vc_widget_send_current_command_group_cb(vc_cmd_list_h *vc_group, void *user_data)
@@ -248,6 +248,12 @@ static void __vc_service_state_changed_cb(vc_service_state_e previous, vc_servic
 {
        (void)user_data;
 
+       if (previous == VC_SERVICE_STATE_RECORDING)
+               _vc_elm_core_unregister_view_change_detection();
+       else if (current == VC_SERVICE_STATE_RECORDING)
+               _vc_elm_core_register_view_change_detection();
+
+
        if ((VC_SERVICE_STATE_PROCESSING == previous && VC_SERVICE_STATE_READY == current) || (VC_SERVICE_STATE_RECORDING == previous && VC_SERVICE_STATE_READY == current)) {
                VC_ELM_LOG_DBG("VC Service processing ends, clear commands");
                if (NULL != vcw.group) {
@@ -338,7 +344,7 @@ static void __vc_language_changed_cb(const char *previous, const char *current,
        return;
 }
 
-int vc_elm_widget_wrapper_set_current_language_changed_callback(vc_elm_widget_wrapper_language_changed_callback callback, void *data)
+int _vc_elm_widget_wrapper_set_current_language_changed_callback(vc_elm_widget_wrapper_language_changed_callback callback, void *data)
 {
        if (NULL == callback) {
                VC_ELM_LOG_ERR("Null parameter");
@@ -351,7 +357,7 @@ int vc_elm_widget_wrapper_set_current_language_changed_callback(vc_elm_widget_wr
 
 }
 
-int vc_elm_widget_wrapper_unset_current_language_changed_callback()
+int _vc_elm_widget_wrapper_unset_current_language_changed_callback()
 {
        if (NULL == vcw.language_changed_cb) {
                VC_ELM_LOG_ERR("No registered cb");
@@ -362,3 +368,24 @@ int vc_elm_widget_wrapper_unset_current_language_changed_callback()
        vcw.lang_user_data = NULL;
        return 0;
 }
+
+void _vc_elm_widget_wrapper_clear_commands()
+{
+       if (NULL != vcw.group) {
+               vc_cmd_list_destroy(vcw.group, true);
+               vcw.group = NULL;
+       }
+}
+
+int _vc_elm_widget_wrapper_cancel()
+{
+       int ret = VC_ELM_ERROR_NONE;
+       VC_ELM_LOG_DBG("===========");
+
+       ret = vc_widget_cancel();
+       if (VC_ELM_ERROR_NONE != ret) {
+               VC_ELM_LOG_ERR("Error while widget cancel (%d)", ret);
+       }
+       return ret;
+}
+
index 85f4f40f76b1505cd5edff7342fb29d7faf2aa2d..b5dd698cbf7f43e508579df72342f941995eeeb5 100644 (file)
@@ -61,10 +61,13 @@ int _vc_elm_widget_wrapper_commit_commands(vc_elm_widget_wrapper_result_cb callb
  */
 void _vc_elm_widget_wrapper_set_show_tooltips_callback(vc_elm_widget_wrapper_show_tooltips_callback callback);
 
-int vc_elm_widget_wrapper_set_current_language_changed_callback(vc_elm_widget_wrapper_language_changed_callback callback, void *user_data);
+int _vc_elm_widget_wrapper_set_current_language_changed_callback(vc_elm_widget_wrapper_language_changed_callback callback, void *user_data);
 
-int vc_elm_widget_wrapper_unset_current_language_changed_callback();
+int _vc_elm_widget_wrapper_unset_current_language_changed_callback();
 
+void _vc_elm_widget_wrapper_clear_commands();
+
+int _vc_elm_widget_wrapper_cancel();
 
 #ifdef __cplusplus
 }