Пример #1
0
Файл: main.c Проект: Abioy/ibus
int
ims_protocol_handler (XIMS xims, IMProtocol *call_data)
{
    g_return_val_if_fail (xims != NULL, 1);
    g_return_val_if_fail (call_data != NULL, 1);

    switch (call_data->major_code) {
    case XIM_OPEN:
        return xim_open (xims, (IMOpenStruct *)call_data);
    case XIM_CLOSE:
        return xim_close (xims, (IMCloseStruct *)call_data);
    case XIM_CREATE_IC:
        return xim_create_ic (xims, (IMChangeICStruct *)call_data);
    case XIM_DESTROY_IC:
        return xim_destroy_ic (xims, (IMChangeICStruct *)call_data);
    case XIM_SET_IC_VALUES:
        return xim_set_ic_values (xims, (IMChangeICStruct *)call_data);
    case XIM_GET_IC_VALUES:
        return xim_get_ic_values (xims, (IMChangeICStruct *)call_data);
    case XIM_FORWARD_EVENT:
        return xim_forward_event (xims, (IMForwardEventStruct *)call_data);
    case XIM_SET_IC_FOCUS:
        return xim_set_ic_focus (xims, (IMChangeFocusStruct *)call_data);
    case XIM_UNSET_IC_FOCUS:
        return xim_unset_ic_focus (xims, (IMChangeFocusStruct *)call_data);
    case XIM_RESET_IC:
        return xim_reset_ic (xims, (IMResetICStruct *)call_data);
    case XIM_TRIGGER_NOTIFY:
        LOG (1, "XIM_TRIGGER_NOTIFY");
        return 0;
    case XIM_PREEDIT_START_REPLY:
        LOG (1, "XIM_PREEDIT_START_REPLY");
        return 0;
    case XIM_PREEDIT_CARET_REPLY:
        LOG (1, "XIM_PREEDIT_CARET_REPLY");
        return 0;
    case XIM_SYNC_REPLY:
        LOG (1, "XIM_SYNC_REPLY");
        return 0;
    default:
        LOG (1, "Unknown (%d)", call_data->major_code);
        return 0;
    }
}
Пример #2
0
void Connection::OnRecv()
{
    std::list<RxPacket *>::iterator i;
    while (!mRxQ.empty()) {
	i = mRxQ.begin();
	int major = (*i)->getMajor();
	if (g_option_mask & OPT_TRACE_XIM)
	    printf("<-: %s.\n", xim_packet_name[major]);

	// Need to sort the handling sequence using protocol number
	// once implementing all the protocol.
	RxPacket *p;
	p = *i;
	switch (major) {
	case XIM_CONNECT:
	    xim_connect(p);
	    break;
	case XIM_OPEN:
	    xim_open(p);
	    break;
	case XIM_QUERY_EXTENSION:
	    xim_query_extension(p);
	    break;
	case XIM_ENCODING_NEGOTIATION:
	    xim_encoding_negotiation(p);
	    break;
	case XIM_CLOSE:
	    xim_close(p);
	    break;
	case XIM_DISCONNECT:
	    xim_disconnect();
	    break;
	case XIM_GET_IM_VALUES:
	    xim_get_im_values(p);
	    break;
	case XIM_SET_IC_VALUES:
	    xim_set_ic_values(p);
	    break;
	case XIM_GET_IC_VALUES:
	    xim_get_ic_values(p);
	    break;
	case XIM_CREATE_IC:
	    xim_create_ic(p);
	    break;
	case XIM_DESTROY_IC:
	    xim_destroy_ic(p);
	    break;
	case XIM_SET_IC_FOCUS:
	    xim_set_ic_focus(p);
	    break;
	case XIM_UNSET_IC_FOCUS:
	    xim_unset_ic_focus(p);
	    break;
	case XIM_TRIGGER_NOTIFY:
	    // xim_trigger_notify(*i); We don't use trigger!
	    break;
	case XIM_FORWARD_EVENT:
	    xim_forward_event(p);
	    break;
	case XIM_SYNC_REPLY:
	    xim_sync_reply();
	    break;
	case XIM_RESET_IC:
	    xim_reset_ic(p);
	    break;
	case XIM_PREEDIT_START_REPLY:
	    xim_preedit_start_reply();
	    break;
	case XIM_PREEDIT_CARET_REPLY:
	    xim_preedit_caret_reply();
	    break;
	case XIM_ERROR:
	    xim_error(p);
	    break;
	default:
	    printf("Unknown (or not implemented) packet from xim connection.\n");
	    (*i)->dump();
	    break;
	}
	mRxQ.pop_front();
	delete p;
    }
}