void _Xi18nDeleteClient(Xi18n i18n_core, CARD16 connect_id) { Xi18nClient *target = _Xi18nFindClient(i18n_core, connect_id); Xi18nClient *ccp; Xi18nClient *ccp0; if (!target) return; for (ccp = i18n_core->address.clients, ccp0 = NULL; ccp != NULL; ccp0 = ccp, ccp = ccp->next) { if (ccp == target) { if (ccp0 == NULL) i18n_core->address.clients = ccp->next; else ccp0->next = ccp->next; /*endif*/ /* put it back to free list */ target->next = i18n_core->address.free_clients; i18n_core->address.free_clients = target; return; } /*endif*/ } /*endfor*/ }
int _Xi18nNeedSwap(Xi18n i18n_core, CARD16 connect_id) { CARD8 im_byteOrder = i18n_core->address.im_byteOrder; Xi18nClient *client = _Xi18nFindClient(i18n_core, connect_id); return (client->byte_order != im_byteOrder); }
static Status xi18n_forwardEvent (XIMS ims, XPointer xp) { Xi18n i18n_core = ims->protocol; IMForwardEventStruct *call_data = (IMForwardEventStruct *)xp; FrameMgr fm; extern XimFrameRec forward_event_fr[]; register int total_size; unsigned char *reply = NULL; unsigned char *replyp; CARD16 serial; int event_size; Xi18nClient *client; client = (Xi18nClient *) _Xi18nFindClient (i18n_core, call_data->connect_id); /* create FrameMgr */ fm = FrameMgrInit (forward_event_fr, NULL, _Xi18nNeedSwap (i18n_core, call_data->connect_id)); total_size = FrameMgrGetTotalSize (fm); event_size = sizeof (xEvent); reply = (unsigned char *) malloc (total_size + event_size); if (!reply) { _Xi18nSendMessage (ims, call_data->connect_id, XIM_ERROR, 0, 0, 0); return False; } /*endif*/ memset (reply, 0, total_size + event_size); FrameMgrSetBuffer (fm, reply); replyp = reply; call_data->sync_bit = 1; /* always sync */ client->sync = True; FrameMgrPutToken (fm, call_data->connect_id); FrameMgrPutToken (fm, call_data->icid); FrameMgrPutToken (fm, call_data->sync_bit); replyp += total_size; EventToWireEvent (&(call_data->event), (xEvent *) replyp, &serial, _Xi18nNeedSwap (i18n_core, call_data->connect_id)); FrameMgrPutToken (fm, serial); _Xi18nSendMessage (ims, call_data->connect_id, XIM_FORWARD_EVENT, 0, reply, total_size + event_size); XFree (reply); FrameMgrFree (fm); return True; }