elm_cnp: move cbhm eldbus code from copypaste module to entry 73/89773/4
authorMinchul Lee <slotus.lee@samsung.com>
Tue, 27 Sep 2016 02:56:02 +0000 (11:56 +0900)
committerMinchul Lee <slotus.lee@samsung.com>
Tue, 27 Sep 2016 07:02:54 +0000 (16:02 +0900)
Change-Id: Ic86318b072b9a2694498670dbc4201d637685d24

src/lib/elm_entry.c
src/lib/elm_module_priv.h
src/lib/elm_widget_entry.h
src/modules/copypasteUI_ctxpopup/cbhm_helper.c
src/modules/copypasteUI_ctxpopup/cbhm_helper.h
src/modules/copypasteUI_ctxpopup/copypaste.c

index fd1df9b..618a47f 100644 (file)
@@ -130,6 +130,83 @@ static Evas_Coord_Rectangle _layout_region_get(Evas_Object *obj);
 static Eina_Bool _action_activate(Evas_Object *obj, const char *params);
 //
 
+//TIZEN ONLY (20160926): cbhm client for multi entry
+#ifdef HAVE_ELEMENTARY_WAYLAND
+static void
+_cbhm_on_name_owner_changed(void *data EINA_UNUSED,
+      const char *bus EINA_UNUSED, const char *old_id EINA_UNUSED,
+      const char *new_id EINA_UNUSED)
+{
+   /* FIXME : If entry should know the time cbhm service is started or stoped,
+    * use this function. */
+}
+
+static void
+_on_item_clicked(void *data, const Eldbus_Message *msg EINA_UNUSED)
+{
+   Evas_Object *obj = data;
+   if (!data)
+     {
+        return;
+     }
+
+   if (elm_object_focus_get(obj))
+     _paste_cb(obj, NULL, NULL);
+}
+
+#define CBHM_DBUS_OBJPATH "/org/tizen/cbhm/dbus"
+#ifndef CBHM_DBUS_INTERFACE
+#define CBHM_DBUS_INTERFACE "org.tizen.cbhm.dbus"
+#endif /* CBHM_DBUS_INTERFACE */
+
+static void
+_cbhm_eldbus_init(Evas_Object *obj)
+{
+   ELM_ENTRY_DATA_GET(obj, sd);
+
+   Eldbus_Object *eldbus_obj;
+
+   if (!sd->cbhm_proxy)
+     {
+        sd->cbhm_conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
+        eldbus_obj = eldbus_object_get(sd->cbhm_conn, CBHM_DBUS_INTERFACE, CBHM_DBUS_OBJPATH);
+        sd->cbhm_proxy = eldbus_proxy_get(eldbus_obj, CBHM_DBUS_INTERFACE);
+        eldbus_name_owner_changed_callback_add(sd->cbhm_conn, CBHM_DBUS_INTERFACE,
+              _cbhm_on_name_owner_changed, sd->cbhm_conn, EINA_TRUE);
+     }
+   eldbus_proxy_signal_handler_add(sd->cbhm_proxy, "ItemClicked", _on_item_clicked, obj);
+}
+
+static void
+_cbhm_eldbus_deinit(Evas_Object *obj)
+{
+   ELM_ENTRY_DATA_GET(obj, sd);
+
+   if (sd->cbhm_init_job)
+     {
+        ecore_job_del(sd->cbhm_init_job);
+        sd->cbhm_init_job = NULL;
+     }
+
+   if (sd->cbhm_conn)
+     {
+        eldbus_connection_unref(sd->cbhm_conn);
+        sd->cbhm_conn = NULL;
+     }
+   sd->cbhm_proxy = NULL;
+}
+
+static void
+_init_eldbus_job(Evas_Object *obj)
+{
+   ELM_ENTRY_DATA_GET(obj, sd);
+
+   _cbhm_eldbus_init(obj);
+   sd->cbhm_init_done = EINA_TRUE;
+}
+#endif
+//
+
 static inline Eina_Iterator *
 _selection_range_geometry_get(Evas_Object *obj)
 {
@@ -765,6 +842,11 @@ EAPI void elm_entry_extension_module_data_get(Evas_Object *obj, Elm_Entry_Extens
    ext_mod->cursor_handler = sd->cursor_handler;
    ext_mod->cursor_handler_shown = sd->cursor_handler_shown;
    ext_mod->ent_scroll = sd->scroll;
+//TIZEN ONLY (20160926): cbhm client for multi entry
+#ifdef HAVE_ELEMENTARY_WAYLAND
+   ext_mod->cbhm_proxy = sd->cbhm_proxy;
+#endif
+//
 }
 /////////////////////////////////////////////////////////////////
 // TIZEN ONLY : END
@@ -2495,6 +2577,20 @@ _menu_call(Evas_Object *obj)
 
    if ((sd->api) && (sd->api->obj_longpress))
      {
+//TIZEN ONLY (20160926): cbhm client for multi entry
+#ifdef HAVE_ELEMENTARY_WAYLAND
+        if (!sd->cbhm_init_done)
+          {
+             if (sd->cbhm_init_job)
+               {
+                  ecore_job_del(sd->cbhm_init_job);
+                  sd->cbhm_init_job = NULL;
+               }
+
+             _cbhm_eldbus_init(obj);
+          }
+#endif
+//
         sd->api->obj_longpress(obj);
      }
    else if (sd->context_menu)
@@ -5107,6 +5203,13 @@ _elm_entry_evas_object_smart_add(Eo *obj, Elm_Entry_Data *priv)
      priv->sel_handler_disabled = EINA_TRUE;
 
    priv->cursor_handler_shown = EINA_FALSE; // TIZEN ONLY (20150201)
+
+   //TIZEN ONLY (20160926): cbhm client for multi entry
+#ifdef HAVE_ELEMENTARY_WAYLAND
+   priv->cbhm_init_done = EINA_FALSE;
+   priv->cbhm_init_job = ecore_job_add((Ecore_Cb)_init_eldbus_job, obj);
+#endif
+   //
 }
 
 static void
@@ -5236,6 +5339,11 @@ _elm_entry_evas_object_smart_del(Eo *obj, Elm_Entry_Data *sd)
      ecore_job_del(sd->cursor_handler_update_job);
    //
 
+   //TIZEN ONLY (20160926): cbhm client for multi entry
+#ifdef HAVE_ELEMENTARY_WAYLAND
+   _cbhm_eldbus_deinit(obj);
+#endif
+   //
    eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
 }
 
index e3d78d2..9b8d1bc 100644 (file)
@@ -10,10 +10,6 @@ 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
-   Ecore_Job *cbhm_init_job;
-#endif
    Eina_Rectangle *viewport_rect;
    Evas_Coord_Rectangle selection_rect;
    Eina_List *items;
@@ -42,9 +38,6 @@ struct _Elm_Entry_Extension_data
    Eina_Bool popup_clicked : 1;
    Eina_Bool cursor_handler_shown : 1;
    Eina_Bool ent_scroll : 1;
-#ifdef HAVE_ELEMENTARY_WAYLAND
-   Eina_Bool cbhm_init_done : 1;
-#endif
    Evas_Object *ctx_par;
    Evas_Object *start_handler;
    Evas_Object *end_handler;
@@ -52,6 +45,9 @@ struct _Elm_Entry_Extension_data
    Ecore_Timer *show_timer;
    char *source_text;
    char *target_text;
+#ifdef HAVE_ELEMENTARY_WAYLAND
+   Eldbus_Proxy *cbhm_proxy;
+#endif
 };
 
 void elm_entry_extension_module_data_get(Evas_Object *obj,Elm_Entry_Extension_data *ext_mod);
index 2be0bcd..7b7a1d0 100644 (file)
@@ -131,6 +131,12 @@ struct _Elm_Entry_Data
    Eina_Bool                             cursor_handler_shown : 1; // TIZEN ONLY
    Eina_Bool                             mgf_bg_color_set : 1; // TIZEN ONLY
    Eina_Bool                             long_pressing : 1; // TIZEN ONLY
+#ifdef HAVE_ELEMENTARY_WAYLAND
+   Ecore_Job                            *cbhm_init_job; // TIZEN ONLY
+   Eina_Bool                             cbhm_init_done : 1; // TIZEN ONLY
+   Eldbus_Proxy                         *cbhm_proxy; // TIZEN ONLY
+   Eldbus_Connection                    *cbhm_conn; // TIZEN ONLY
+#endif
 };
 
 typedef struct _Elm_Entry_Item_Provider     Elm_Entry_Item_Provider;
index 3f43f54..c5c38f9 100644 (file)
@@ -73,68 +73,6 @@ _cbhm_window_get()
 }
 #endif
 
-#ifdef HAVE_ELEMENTARY_WAYLAND
-static Eldbus_Proxy *eldbus_proxy;
-Eldbus_Connection *cbhm_conn = NULL;
-
-Eldbus_Proxy* cbhm_proxy_get()
-{
-   return eldbus_proxy;
-}
-
-Eldbus_Connection* cbhm_connection_get()
-{
-   return cbhm_conn;
-}
-
-static void
-_cbhm_on_name_owner_changed(void *data EINA_UNUSED,
-      const char *bus EINA_UNUSED, const char *old_id EINA_UNUSED,
-      const char *new_id EINA_UNUSED)
-{
-   /* FIXME : If entry should know the time cbhm service is started or stoped,
-    * use this function. */
-}
-
-static void
-_on_item_clicked(void *data, const Eldbus_Message *msg EINA_UNUSED)
-{
-   Evas_Object *obj = data;
-   if (!data)
-     {
-        return;
-     }
-   //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(Evas_Object *obj)
-{
-   Eldbus_Object *eldbus_obj;
-
-   cbhm_conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
-   eldbus_obj = eldbus_object_get(cbhm_conn, CBHM_DBUS_INTERFACE,
-         CBHM_DBUS_OBJPATH);
-   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
-cbhm_eldbus_deinit()
-{
-   if (cbhm_conn)
-     {
-        eldbus_connection_unref(cbhm_conn);
-        cbhm_conn = NULL;
-     }
-}
-#endif /* HAVE_ELEMENTARY_WAYLAND */
-
 Eina_Bool
 _cbhm_msg_send(Evas_Object *obj, char *msg)
 {
@@ -264,33 +202,38 @@ _cbhm_item_count_get(Evas_Object *obj EINA_UNUSED, int atom_index)
 #endif
 #ifdef HAVE_ELEMENTARY_WAYLAND
    Eldbus_Message *reply, *req;
+   Eldbus_Proxy *cbhm_proxy = cbhm_proxy_get();
    const char *errname = NULL, *errmsg = NULL;
    int count = -1;
 
-   EINA_LOG_ERR("eldbus_proxy_call CbhmGetCount");
+   EINA_LOG_ERR("eldbus proxy call to get count");
+
+   if (!cbhm_proxy)
+   {
+      EINA_LOG_ERR("eldbus proxy is NULL");
+      return -1;
+   }
 
        /* FIXME : should support get count for TEXT and ALL. That is,
         * it needs some parameter */
    if (atom_index == ATOM_INDEX_CBHM_COUNT_TEXT)
-      EINA_LOG_ERR("ATOM_INDEX_CBHM_COUNT_TEXT");
+      EINA_LOG_ERR("cbhm count for text");
    else
-      EINA_LOG_ERR("ATOM_INDEX_CBHM_COUNT_ALL");
+      EINA_LOG_ERR("cbhm count for all");
 
-   if (!(req = eldbus_proxy_method_call_new(eldbus_proxy, "CbhmGetCount")))
+   if (!(req = eldbus_proxy_method_call_new(cbhm_proxy, "CbhmGetCount")))
      {
-        EINA_LOG_ERR(
-              "Failed to create method call on org.freedesktop.DBus.Properties.Get");
+        EINA_LOG_ERR("Failed to create method call on org.freedesktop.DBus.Properties.Get");
         return -1;
      }
 
    eldbus_message_ref(req);
 
-   reply = eldbus_proxy_send_and_block(eldbus_proxy, req, 100);
+   reply = eldbus_proxy_send_and_block(cbhm_proxy, req, 100);
 
    if (!reply || eldbus_message_error_get(reply, &errname, &errmsg))
      {
-        EINA_LOG_ERR(
-              "Unable to call method org.freedesktop.DBus.Properties.Get: %s %s",
+        EINA_LOG_ERR("Unable to call method org.freedesktop.DBus.Properties.Get: %s %s",
               errname, errmsg);
         eldbus_message_unref(req);
         return -1;
index 5131a5c..ce4df45 100644 (file)
@@ -29,18 +29,6 @@ enum ATOM_INDEX_CBHM_COUNT {
        ATOM_INDEX_CBHM_COUNT_MAX = 3
 };
 
-#ifdef HAVE_ELEMENTARY_WAYLAND
-#define CBHM_DBUS_OBJPATH "/org/tizen/cbhm/dbus"
-#ifndef CBHM_DBUS_INTERFACE
-#define CBHM_DBUS_INTERFACE "org.tizen.cbhm.dbus"
-#endif /* CBHM_DBUS_INTERFACE */
-
-Eldbus_Proxy* cbhm_proxy_get();
-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);
 int _cbhm_item_count_get(Evas_Object *obj EINA_UNUSED, int atom_index);
 #ifdef HAVE_ELEMENTARY_X
@@ -49,6 +37,10 @@ Eina_Bool _cbhm_item_get(Evas_Object *obj EINA_UNUSED, int index, Ecore_X_Atom *
 Eina_Bool _cbhm_item_get(Evas_Object *obj, int index, void *data_type, char **buf);
 #endif
 
+#ifdef HAVE_ELEMENTARY_WAYLAND
+Eldbus_Proxy* cbhm_proxy_get();
+#endif
+
 #ifdef HAVE_ELEMENTARY_X
 Eina_Bool _cbhm_item_set(Evas_Object *obj, Ecore_X_Atom data_type, char *item_data);
 #endif
index 5b7785f..962a0eb 100644 (file)
@@ -866,18 +866,6 @@ _select(void *data, Evas_Object *obj, void *event_info)
 }
 #endif
 
-#ifdef HAVE_ELEMENTARY_WAYLAND
-void
-_check_and_paste(Evas_Object *obj)
-{
-   if ((!ext_mod) || (!obj)) return;
-   if (ext_mod->cbhm_caller == obj)
-     {
-        ext_mod->paste(obj, NULL, NULL);
-     }
-}
-#endif
-
 static void
 _paste(void *data, Evas_Object *obj, void *event_info)
 {
@@ -1042,6 +1030,16 @@ _translate_menu(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_
 }
 #endif
 
+#ifdef HAVE_ELEMENTARY_WAYLAND
+Eldbus_Proxy*
+cbhm_proxy_get()
+{
+   if (!ext_mod)
+      return NULL;
+   return ext_mod->cbhm_proxy;
+}
+#endif
+
 static void
 _clipboard_menu(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
 {
@@ -1067,7 +1065,8 @@ _clipboard_menu(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
      {
         EINA_LOG_ERR("eldbus_proxy_call CbhmShow 0");
 #ifdef HAVE_ELEMENTARY_WAYLAND
-         eldbus_proxy_call(cbhm_proxy_get(), "CbhmShow", NULL, NULL, -1, "s", "0");
+        if (ext_mod->cbhm_proxy)
+          eldbus_proxy_call(ext_mod->cbhm_proxy, "CbhmShow", NULL, NULL, -1, "s", "0");
 #else
          _cbhm_msg_send(data, "show0");
 #endif
@@ -1076,7 +1075,8 @@ _clipboard_menu(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
      {
          EINA_LOG_ERR("eldbus_proxy_call CbhmShow 1");
 #ifdef HAVE_ELEMENTARY_WAYLAND
-         eldbus_proxy_call(cbhm_proxy_get(), "CbhmShow", NULL, NULL, -1, "s", "1");
+        if (ext_mod->cbhm_proxy)
+          eldbus_proxy_call(ext_mod->cbhm_proxy, "CbhmShow", NULL, NULL, -1, "s", "1");
 #else
         _cbhm_msg_send(data, "show1");
 #endif
@@ -1084,9 +1084,6 @@ _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
@@ -1148,20 +1145,6 @@ elm_modapi_shutdown(void *m EINA_UNUSED)
    return 1; // succeed always
 }
 
-#ifdef HAVE_ELEMENTARY_WAYLAND
-static void
-_init_eldbus_job(Evas_Object *obj)
-{
-   if (!ext_mod)
-     {
-        EINA_LOG_ERR("ext_mod is NULL");
-        return;
-     }
-   cbhm_eldbus_init(obj);
-   ext_mod->cbhm_init_done = EINA_TRUE;
-}
-#endif
-
 // module funcs for the specific module type
 EAPI void
 obj_hook(Evas_Object *obj)
@@ -1179,9 +1162,6 @@ obj_hook(Evas_Object *obj)
         ext_mod->mouse_up = EINA_FALSE;
         ext_mod->mouse_down = EINA_FALSE;
         ext_mod->entry_move = EINA_FALSE;
-#ifdef HAVE_ELEMENTARY_WAYLAND
-        ext_mod->cbhm_init_done = EINA_FALSE;
-#endif
      }
    // Clipboard item: can be removed by application
    elm_entry_context_menu_item_add(obj, "Clipboard", NULL,
@@ -1192,18 +1172,6 @@ obj_hook(Evas_Object *obj)
    elm_entry_context_menu_item_add(obj, "Translate", NULL,
                                    ELM_ICON_STANDARD, NULL, NULL);
 #endif
-#ifdef HAVE_ELEMENTARY_WAYLAND
-   if (ext_mod && 1 == _mod_hook_count)
-     {
-        if (ext_mod->cbhm_init_job)
-          {
-             ecore_job_del(ext_mod->cbhm_init_job);
-             ext_mod->cbhm_init_job = NULL;
-          }
-
-        ext_mod->cbhm_init_job = ecore_job_add((Ecore_Cb)_init_eldbus_job, obj);
-     }
-#endif
 }
 
 EAPI void
@@ -1243,21 +1211,6 @@ obj_unhook(Evas_Object *obj EINA_UNUSED)
         free(ext_mod);
         ext_mod = NULL;
      }
-
-#ifdef HAVE_ELEMENTARY_WAYLAND
-   EINA_LOG_ERR("call cbhm_eldbus_deinit");
-   if (ext_mod)
-     {
-        if (ext_mod->cbhm_init_job)
-          {
-             ecore_job_del(ext_mod->cbhm_init_job);
-             ext_mod->cbhm_init_job = NULL;
-          }
-       ext_mod->cbhm_init_done = EINA_FALSE;
-     }
-
-   cbhm_eldbus_deinit();
-#endif
 }
 
 #if 0 /* for asynchronized proxy_call function */
@@ -1296,19 +1249,6 @@ obj_longpress(Evas_Object *obj)
    Ecore_X_Atom first_cbhm_item_type = 0;
    Eina_Bool has_focused = EINA_FALSE;
 
-#ifdef HAVE_ELEMENTARY_WAYLAND
-   if (!ext_mod->cbhm_init_done)
-     {
-        if (ext_mod->cbhm_init_job)
-          {
-             ecore_job_del(ext_mod->cbhm_init_job);
-             ext_mod->cbhm_init_job = NULL;
-          }
-
-        cbhm_eldbus_init(obj);
-     }
-#endif
-
    /*update*/
    if (ext_mod->viewport_rect)
      eina_rectangle_free(ext_mod->viewport_rect);