+EAPI Eina_Bool
+ecore_evas_extn_plug_connect(Evas_Object *obj, const char *svcname, int svcnum, Eina_Bool svcsys)
+{
+#ifdef EXTN_ENABLED
+ Extn *extn;
+ Ecore_Evas *ee = NULL;
+
+ if (!obj) return EINA_FALSE;
+
+ ee = evas_object_data_get(obj, "Ecore_Evas");
+ if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS)) return EINA_FALSE;
+
+ extn = calloc(1, sizeof(Extn));
+ if (!extn) return EINA_FALSE;
+
+ Ecore_Ipc_Type ipctype = ECORE_IPC_LOCAL_USER;
+
+ ecore_ipc_init();
+ extn->svc.name = eina_stringshare_add(svcname);
+ extn->svc.num = svcnum;
+ extn->svc.sys = svcsys;
+
+ if (extn->svc.sys) ipctype = ECORE_IPC_LOCAL_SYSTEM;
+ extn->ipc.server = ecore_ipc_server_connect(ipctype, (char *)extn->svc.name,
+ extn->svc.num, ee);
+ if (!extn->ipc.server)
+ {
+ eina_stringshare_del(extn->svc.name);
+ free(extn);
+ ecore_ipc_shutdown();
+ return EINA_FALSE;
+ }
+ ee->engine.buffer.data = extn;
+ extn->ipc.handlers = eina_list_append
+ (extn->ipc.handlers,
+ ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_ADD,
+ _ipc_server_add, ee));
+ extn->ipc.handlers = eina_list_append
+ (extn->ipc.handlers,
+ ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DEL,
+ _ipc_server_del, ee));
+ extn->ipc.handlers = eina_list_append
+ (extn->ipc.handlers,
+ ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DATA,
+ _ipc_server_data, ee));
+ return EINA_TRUE;
+#else
+ return EINA_FALSE;
+#endif
+}
+