From bc9379703dcb9cfc368b5e4321ee5abab3184929 Mon Sep 17 00:00:00 2001 From: Minchul Lee Date: Tue, 27 Sep 2016 11:56:02 +0900 Subject: [PATCH] elm_cnp: move cbhm eldbus code from copypaste module to entry Change-Id: Ic86318b072b9a2694498670dbc4201d637685d24 --- src/lib/elm_entry.c | 108 +++++++++++++++++++++++++ src/lib/elm_module_priv.h | 10 +-- src/lib/elm_widget_entry.h | 6 ++ src/modules/copypasteUI_ctxpopup/cbhm_helper.c | 85 ++++--------------- src/modules/copypasteUI_ctxpopup/cbhm_helper.h | 16 +--- src/modules/copypasteUI_ctxpopup/copypaste.c | 88 ++++---------------- 6 files changed, 149 insertions(+), 164 deletions(-) diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c index fd1df9b..618a47f 100644 --- a/src/lib/elm_entry.c +++ b/src/lib/elm_entry.c @@ -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()); } diff --git a/src/lib/elm_module_priv.h b/src/lib/elm_module_priv.h index e3d78d2..9b8d1bc 100644 --- a/src/lib/elm_module_priv.h +++ b/src/lib/elm_module_priv.h @@ -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); diff --git a/src/lib/elm_widget_entry.h b/src/lib/elm_widget_entry.h index 2be0bcd..7b7a1d0 100644 --- a/src/lib/elm_widget_entry.h +++ b/src/lib/elm_widget_entry.h @@ -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; diff --git a/src/modules/copypasteUI_ctxpopup/cbhm_helper.c b/src/modules/copypasteUI_ctxpopup/cbhm_helper.c index 3f43f54..c5c38f9 100644 --- a/src/modules/copypasteUI_ctxpopup/cbhm_helper.c +++ b/src/modules/copypasteUI_ctxpopup/cbhm_helper.c @@ -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; diff --git a/src/modules/copypasteUI_ctxpopup/cbhm_helper.h b/src/modules/copypasteUI_ctxpopup/cbhm_helper.h index 5131a5c..ce4df45 100644 --- a/src/modules/copypasteUI_ctxpopup/cbhm_helper.h +++ b/src/modules/copypasteUI_ctxpopup/cbhm_helper.h @@ -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 diff --git a/src/modules/copypasteUI_ctxpopup/copypaste.c b/src/modules/copypasteUI_ctxpopup/copypaste.c index 5b7785f..962a0eb 100644 --- a/src/modules/copypasteUI_ctxpopup/copypaste.c +++ b/src/modules/copypasteUI_ctxpopup/copypaste.c @@ -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); -- 2.7.4