}
#endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+static Eldbus_Proxy *eldbus_proxy;
+Eldbus_Connection *cbhm_conn;
+
+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. */
+}
+
+void
+cbhm_eldbus_init()
+{
+ EINA_LOG_ERR("IN");
+ 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);
+}
+
+void
+cbhm_eldbus_deinit()
+{
+ EINA_LOG_ERR("IN");
+ if (cbhm_conn)
+ eldbus_connection_unref(cbhm_conn);
+}
+#endif /* HAVE_ELEMENTARY_WAYLAND */
+
Eina_Bool
_cbhm_msg_send(Evas_Object *obj, char *msg)
{
return count;
}
DMSG("ret: 0x%x\n", ret);
-#else
- (void)atom_index;
+#endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ Eldbus_Message *reply, *req;
+ const char *errname = NULL, *errmsg = NULL;
+ int count = -1;
+
+ EINA_LOG_ERR("eldbus_proxy_call CbhmGetCount");
+
+ /* 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");
+ else
+ EINA_LOG_ERR("ATOM_INDEX_CBHM_COUNT_ALL");
+
+ if (!(req = eldbus_proxy_method_call_new(eldbus_proxy, "CbhmGetCount")))
+ {
+ 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);
+
+ if (!reply || eldbus_message_error_get(reply, &errname, &errmsg))
+ {
+ EINA_LOG_ERR(
+ "Unable to call method org.freedesktop.DBus.Properties.Get: %s %s",
+ errname, errmsg);
+ eldbus_message_unref(req);
+ return -1;
+ }
+
+ if (!eldbus_message_arguments_get(reply, "i", &count))
+ {
+ EINA_LOG_ERR("Cannot get arguments from eldbus");
+ eldbus_message_unref(req);
+ return -1;
+ }
+
+ eldbus_message_unref(req);
+ EINA_LOG_DBG("cbhm item count(%d)", count);
+
+ return count;
#endif
return -1;
}
+#ifndef _CBHM_HELPER_H
+#define _CBHM_HELPER_H
+
#ifdef HAVE_CONFIG_H
#include "elementary_config.h"
#endif
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();
+void cbhm_eldbus_deinit();
+#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
#ifdef HAVE_ELEMENTARY_X
Eina_Bool _cbhm_item_set(Evas_Object *obj, Ecore_X_Atom data_type, char *item_data);
#endif
+
+#endif /* _CBHM_HELPER_H */
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
xwin = elm_win_xwindow_get(top);
ecore_x_selection_secondary_set(xwin, NULL, 0);
#endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ const char *types[10] = {0, };
+
+ int i = -1;
+ types[++i] = "application/x-elementary-markup";
+ ecore_wl_dnd_selection_set(ecore_wl_input_get(), types);
+#endif
+
if (ext_mod->cnp_mode != ELM_CNP_MODE_MARKUP)
- _cbhm_msg_send(data, "show0");
+ {
+ EINA_LOG_ERR("eldbus_proxy_call CbhmShow 0");
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ eldbus_proxy_call(cbhm_proxy_get(), "CbhmShow", NULL, NULL, -1, "s", "0");
+#else
+ _cbhm_msg_send(data, "show0");
+#endif
+ }
else
- _cbhm_msg_send(data, "show1");
+ {
+ EINA_LOG_ERR("eldbus_proxy_call CbhmShow 1");
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ eldbus_proxy_call(cbhm_proxy_get(), "CbhmShow", NULL, NULL, -1, "s", "1");
+#else
+ _cbhm_msg_send(data, "show1");
+#endif
+ }
_ctxpopup_hide(obj);
// end for cbhm
elm_entry_select_none(data);
elm_entry_context_menu_item_add(obj, "Translate", NULL,
ELM_ICON_STANDARD, NULL, NULL);
#endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ cbhm_eldbus_init();
+#endif
}
EAPI void
free(ext_mod);
ext_mod = NULL;
}
+
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ EINA_LOG_ERR("call cbhm_eldbus_deinit");
+ cbhm_eldbus_deinit();
+#endif
+}
+
+#if 0 /* for asynchronized proxy_call function */
+static void
+__cbhm_get_count(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
+{
+ EINA_LOG_ERR("IN");
+ int count = -1;
+
+ if (eldbus_message_error_get(msg, NULL, NULL) ||
+ !eldbus_message_arguments_get(msg, "i", &count)) return;
+
+ if (count == -1)
+ return;
}
+#endif
EAPI void
obj_longpress(Evas_Object *obj)
if(!ext_mod) return;
LOG("IN\n\n");
+ int cbhm_count = 0;
Evas_Object *ctxparent;
Evas_Object *parent, *child;
const Eina_List *l;
{
Eina_List *lao = NULL;
Evas_Object *ao = NULL;
-#ifdef HAVE_ELEMENTARY_X
- int cbhm_count = 0;
+
if (elm_entry_cnp_mode_get(obj) != ELM_CNP_MODE_MARKUP)
cbhm_count = _cbhm_item_count_get(obj, ATOM_INDEX_CBHM_COUNT_TEXT);
else
cbhm_count = _cbhm_item_count_get(obj, ATOM_INDEX_CBHM_COUNT_ALL);
-#endif
+
if (ext_mod->popup)
{
evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL, _entry_del_cb);
#ifdef HAVE_ELEMENTARY_X
if (cbhm_count)
-#else
- if (1) // need way to detect if someone has a selection
+#endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ if (cbhm_count)
#endif
{
if (elm_entry_cnp_mode_get(obj) == ELM_CNP_MODE_PLAINTEXT)
// start for cbhm
#ifdef HAVE_ELEMENTARY_X
if ((ext_mod->editable) && (cbhm_count) && (has_clipboard))
-#else
- if ((ext_mod->editable) && (has_clipboard))
+#endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ if ((ext_mod->editable) && (cbhm_count) && (has_clipboard))
#endif
{
CP_ICON_ADD(icon, "clipboard");
#ifdef HAVE_ELEMENTARY_X
if (ext_mod->editable && cbhm_count)
-#else
- if (ext_mod->editable)
+#endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ if (ext_mod->editable && cbhm_count)
#endif
{
if (elm_entry_cnp_mode_get(obj) == ELM_CNP_MODE_PLAINTEXT)
}
#ifdef HAVE_ELEMENTARY_X
if (cbhm_count)
-#else
- if (1) // need way to detect if someone has a selection
+#endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ if (cbhm_count)
#endif
{
if (ext_mod->editable)
// start for cbhm
#ifdef HAVE_ELEMENTARY_X
if ((ext_mod->editable) && (cbhm_count) && (has_clipboard))
-#else
- if ((ext_mod->editable) && (has_clipboard))
+#endif
+#ifdef HAVE_ELEMENTARY_WAYLAND
+ if ((ext_mod->editable) && (cbhm_count) && (has_clipboard))
#endif
{
CP_ICON_ADD(icon, "clipboard");