copypaste: support pasting data when clicking in cbhm item 91/79391/1 accepted/tizen/common/20160712.150613 accepted/tizen/ivi/20160712.000523 accepted/tizen/mobile/20160712.000359 accepted/tizen/tv/20160712.000448 accepted/tizen/wearable/20160712.000503 submit/tizen/20160711.123427 submit/tizen/20160711.135813
authorThiep Ha <thiep.ha@samsung.com>
Mon, 11 Jul 2016 07:27:36 +0000 (16:27 +0900)
committerThiep Ha <thiep.ha@samsung.com>
Mon, 11 Jul 2016 07:27:36 +0000 (16:27 +0900)
When we click on cbhm item, the data should be pasted
to entry. This patch supports that.
@tizen_feature

Change-Id: I90e4175fb735b46b2e3093cb5e9ab39e1538f2d0
Signed-off-by: Thiep Ha <thiep.ha@samsung.com>
src/lib/elm_module_priv.h
src/modules/copypasteUI_ctxpopup/cbhm_helper.c
src/modules/copypasteUI_ctxpopup/cbhm_helper.h
src/modules/copypasteUI_ctxpopup/copypaste.c

index 6fac4a28cfee8c66af15f7e3ab114e5cac5800dd..dea036f6d73b52eaa3d0bf6065b0dab01a3a7a69 100644 (file)
@@ -10,6 +10,9 @@ struct _Elm_Entry_Extension_data
    Evas_Object *popup;
    Evas_Object *ent;
    Evas_Object *caller;
+#ifdef HAVE_ELEMENTARY_WAYLAND
+   Evas_Object *cbhm_caller; //FIXME: remove when focus issue is resolved
+#endif
    Eina_Rectangle *viewport_rect;
    Evas_Coord_Rectangle selection_rect;
    Eina_List *items;
index 584dad25f545659682e110ef7e60bb3105701e8a..e328fbd5dbf41340608114f6da6e7331924fb955 100644 (file)
@@ -96,8 +96,23 @@ _cbhm_on_name_owner_changed(void *data EINA_UNUSED,
     * use this function. */
 }
 
+static void
+_on_item_clicked(void *data, const Eldbus_Message *msg EINA_UNUSED)
+{
+   Evas_Object *obj = data;
+   if (!data)
+     {
+        return;
+     }
+   const char *txt;
+   //FIXME: because of focus issue: focus is moved to cbhm, not stayed in entry
+   //we cannot check focus object
+   //FIXME: request for focused obj only when focus issue is fixed
+   _check_and_paste(obj);
+}
+
 void
-cbhm_eldbus_init()
+cbhm_eldbus_init(Evas_Object *obj)
 {
    EINA_LOG_ERR("IN");
    Eldbus_Object *eldbus_obj;
@@ -108,6 +123,7 @@ cbhm_eldbus_init()
    eldbus_proxy = eldbus_proxy_get(eldbus_obj, CBHM_DBUS_INTERFACE);
    eldbus_name_owner_changed_callback_add(cbhm_conn, CBHM_DBUS_INTERFACE,
          _cbhm_on_name_owner_changed, cbhm_conn, EINA_TRUE);
+   eldbus_proxy_signal_handler_add(eldbus_proxy, "ItemClicked", _on_item_clicked, obj);
 }
 
 void
index c34c17bad4851efed91a392465a8f512998d979c..5131a5c74852010a950b48fa074e4f4bf2623177 100644 (file)
@@ -8,6 +8,7 @@
 #include <Elementary.h>
 #include <Eina.h>
 #include "elm_priv.h"
+#include "elm_module_priv.h"
 
 #ifdef HAVE_ELEMENTARY_X
 #include <Ecore_X.h>
@@ -35,8 +36,9 @@ enum ATOM_INDEX_CBHM_COUNT {
 #endif /* CBHM_DBUS_INTERFACE */
 
 Eldbus_Proxy* cbhm_proxy_get();
-void cbhm_eldbus_init();
+void cbhm_eldbus_init(Evas_Object *obj);
 void cbhm_eldbus_deinit();
+void _check_and_paste(Evas_Object *obj);
 #endif /* HAVE_ELEMENTARY_WAYLAND */
 
 Eina_Bool _cbhm_msg_send(Evas_Object* obj, char *msg);
index fdbb4c0bfb2f6c3836ee0d3a619f4fbc0570e4c6..8f5877f16e19ae7c952810c336edefdd2dda21da 100644 (file)
@@ -845,6 +845,16 @@ _select(void *data, Evas_Object *obj, void *event_info)
    ext_mod->select(data, obj, event_info);
 }
 
+void
+_check_and_paste(Evas_Object *obj)
+{
+   if ((!ext_mod) || (!obj)) return;
+   if (ext_mod->cbhm_caller == obj)
+     {
+        ext_mod->paste(obj, NULL, NULL);
+     }
+}
+
 static void
 _paste(void *data, Evas_Object *obj, void *event_info)
 {
@@ -1052,6 +1062,9 @@ _clipboard_menu(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
    _ctxpopup_hide(obj);
    // end for cbhm
    elm_entry_select_none(data);
+#ifdef HAVE_ELEMENTARY_WAYLAND
+   ext_mod->cbhm_caller = data; //FIXME: remove when focus issue is removed
+#endif
 }
 
 static void
@@ -1141,7 +1154,7 @@ obj_hook(Evas_Object *obj)
                                    ELM_ICON_STANDARD, NULL, NULL);
 #endif
 #ifdef HAVE_ELEMENTARY_WAYLAND
-   cbhm_eldbus_init();
+   cbhm_eldbus_init(obj);
 #endif
 }