apply ecore job for eldbus init of cbhm 78/81178/4
authorMinchul Lee <slotus.lee@samsung.com>
Fri, 22 Jul 2016 12:05:29 +0000 (21:05 +0900)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Mon, 22 Aug 2016 09:08:04 +0000 (02:08 -0700)
It took long time to initialize eldbus for cbhm.

Change-Id: Id53d81f8cb15163d56501b41627b3d0455c64f82
Signed-off-by: Minchul Lee <slotus.lee@samsung.com>
src/lib/elm_module_priv.h
src/modules/copypasteUI_ctxpopup/cbhm_helper.c
src/modules/copypasteUI_ctxpopup/copypaste.c

index dea036f..e3d78d2 100644 (file)
@@ -12,6 +12,7 @@ struct _Elm_Entry_Extension_data
    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;
@@ -41,6 +42,9 @@ 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;
index 024737d..4aba0c5 100644 (file)
@@ -113,7 +113,6 @@ _on_item_clicked(void *data, const Eldbus_Message *msg EINA_UNUSED)
 void
 cbhm_eldbus_init(Evas_Object *obj)
 {
-   EINA_LOG_ERR("IN");
    Eldbus_Object *eldbus_obj;
 
    cbhm_conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SESSION);
@@ -128,7 +127,6 @@ cbhm_eldbus_init(Evas_Object *obj)
 void
 cbhm_eldbus_deinit()
 {
-   EINA_LOG_ERR("IN");
    if (cbhm_conn)
       eldbus_connection_unref(cbhm_conn);
 }
index 6d0e9d2..0493df1 100644 (file)
@@ -1026,7 +1026,6 @@ _translate_menu(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_
 static void
 _clipboard_menu(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
 {
-   EINA_LOG_ERR("IN");
    if(!ext_mod) return;
 
    // start for cbhm
@@ -1130,6 +1129,20 @@ 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)
@@ -1147,6 +1160,7 @@ obj_hook(Evas_Object *obj)
         ext_mod->mouse_up = EINA_FALSE;
         ext_mod->mouse_down = EINA_FALSE;
         ext_mod->entry_move = EINA_FALSE;
+        ext_mod->cbhm_init_done = EINA_FALSE;
      }
    // Clipboard item: can be removed by application
    elm_entry_context_menu_item_add(obj, "Clipboard", NULL,
@@ -1158,7 +1172,16 @@ obj_hook(Evas_Object *obj)
                                    ELM_ICON_STANDARD, NULL, NULL);
 #endif
 #ifdef HAVE_ELEMENTARY_WAYLAND
-   cbhm_eldbus_init(obj);
+   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
 }
 
@@ -1202,6 +1225,16 @@ obj_unhook(Evas_Object *obj EINA_UNUSED)
 
 #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
 }
@@ -1242,6 +1275,17 @@ obj_longpress(Evas_Object *obj)
    Ecore_X_Atom first_cbhm_item_type = 0;
    Eina_Bool has_focused = EINA_FALSE;
 
+   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);
+     }
+
    /*update*/
    if (ext_mod->viewport_rect)
      eina_rectangle_free(ext_mod->viewport_rect);