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)
{
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
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)
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
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());
}
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;
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;
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);
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;
}
#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)
{
#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;
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
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
}
#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)
{
}
#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)
{
{
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
{
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
_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
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)
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,
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
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 */
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);