#include "e.h" /* local subsystem functions */ static int _e_ipc_cb_client_add(void *data, int type, void *event); static int _e_ipc_cb_client_del(void *data, int type, void *event); static int _e_ipc_cb_client_data(void *data, int type, void *event); /* local subsystem globals */ static Ecore_Ipc_Server *_e_ipc_server = NULL; /* externally accessible functions */ EAPI int e_ipc_init(void) { char buf[1024]; char *disp; disp = getenv("DISPLAY"); if (!disp) disp = ":0"; snprintf(buf, sizeof(buf), "enlightenment-(%s)", disp); _e_ipc_server = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, buf, 0, NULL); if (!_e_ipc_server) return 0; ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD, _e_ipc_cb_client_add, NULL); ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL, _e_ipc_cb_client_del, NULL); ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, _e_ipc_cb_client_data, NULL); e_ipc_codec_init(); return 1; } EAPI void e_ipc_shutdown(void) { e_ipc_codec_shutdown(); if (_e_ipc_server) { ecore_ipc_server_del(_e_ipc_server); _e_ipc_server = NULL; } } /* local subsystem globals */ static int _e_ipc_cb_client_add(void *data __UNUSED__, int type __UNUSED__, void *event) { Ecore_Ipc_Event_Client_Add *e; e = event; if (ecore_ipc_client_server_get(e->client) != _e_ipc_server) return 1; return 1; } static int _e_ipc_cb_client_del(void *data __UNUSED__, int type __UNUSED__, void *event) { Ecore_Ipc_Event_Client_Del *e; e = event; if (ecore_ipc_client_server_get(e->client) != _e_ipc_server) return 1; /* delete client sruct */ ecore_ipc_client_del(e->client); return 1; } static int _e_ipc_cb_client_data(void *data __UNUSED__, int type __UNUSED__, void *event) { Ecore_Ipc_Event_Client_Data *e; e = event; if (ecore_ipc_client_server_get(e->client) != _e_ipc_server) return 1; switch (e->minor) { #define TYPE E_WM_IN #include "e_ipc_handlers.h" #undef TYPE default: break; } return 1; }