⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i18nmethod.c

📁 手写识别Chinput源码
💻 C
📖 第 1 页 / 共 3 页
字号:
        return False;    /*endif*/        _XUnregisterFilter (dpy,                        i18n_core->address.im_window,                        WaitXSelectionRequest,                        ims);/* *  Now we should delete the atom list in XIM_Servers property of Root Window *//*    XGetWindowProperty (dpy,                        root,                        XIM_Servers,                        0L,                        1000000L,                        False,                        XA_ATOM,                        &realtype,                        &realformat,                        &length,                        &bytesafter,                        (unsigned char **) (&data));    if (realtype == XA_ATOM && realformat == 32 && length>0) {        new_data = malloc(sizeof(long) * length);        memset(new_data, 0, sizeof(long) * length);        for (i=0, j=0; i<length; i++) {            if (data[i] != atom) {		new_data[j] = data[i];		j ++;	    }        }	XDeleteProperty (dpy,			 root,			 XIM_Servers);	if (j > 0)            XChangeProperty (dpy,                             root,                             XIM_Servers,                             XA_ATOM,                             32,			     PropModePrepend,                             (unsigned char *)new_data,                             j);	free(new_data);    }    XFlush(dpy);    if (data != NULL)        XFree ((char *) data);    XFree (i18n_core->address.im_name);    XFree (i18n_core->address.im_locale);    XFree (i18n_core->address.im_addr);    XFree (i18n_core);*/    return True;}static char *xi18n_setIMValues (XIMS ims, XIMArg *args){    Xi18n i18n_core = ims->protocol;    char *ret;    if ((ret = ParseArgs (i18n_core, I18N_SET, args)) != NULL)        return ret;    /*endif*/    return NULL;}static char *xi18n_getIMValues (XIMS ims, XIMArg *args){    Xi18n i18n_core = ims->protocol;    char *ret;    if ((ret = ParseArgs (i18n_core, I18N_GET, args)) != NULL)        return ret;    /*endif*/    return NULL;}static void EventToWireEvent (XEvent *ev, xEvent *event, CARD16 *serial){    *serial = (CARD16) (ev->xany.serial >> 16);    event->u.u.sequenceNumber =        (CARD16) (ev->xany.serial & (unsigned long) 0xFFFF);    switch (ev->type)    {    case KeyPress:    case KeyRelease:        {            XKeyEvent *kev = (XKeyEvent *) ev;            event->u.u.type = ev->type;            event->u.keyButtonPointer.root = kev->root;            event->u.keyButtonPointer.state = kev->state;            event->u.keyButtonPointer.time = kev->time;            event->u.keyButtonPointer.event = kev->window;            event->u.keyButtonPointer.child = kev->subwindow;            event->u.keyButtonPointer.eventX = kev->x;            event->u.keyButtonPointer.eventY = kev->y;            event->u.keyButtonPointer.rootX = kev->x_root;            event->u.keyButtonPointer.rootY = kev->y_root;            event->u.keyButtonPointer.sameScreen = kev->same_screen;            event->u.u.detail = kev->keycode;        }    }    /*endswitch*/}static Status xi18n_forwardEvent (XIMS ims, IMForwardEventStruct *call_data){    Xi18n i18n_core = ims->protocol;    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);    FrameMgrPutToken (fm, serial);    _Xi18nSendMessage (ims,                       call_data->connect_id,                       XIM_FORWARD_EVENT,                       0,                       reply,                       total_size + event_size);    XFree (reply);    FrameMgrFree (fm);    return True;}static Status xi18n_commit (XIMS ims, IMCommitStruct *call_data){    Xi18n i18n_core = ims->protocol;    FrameMgr fm;    extern XimFrameRec commit_chars_fr[];    extern XimFrameRec commit_both_fr[];    register int total_size;    unsigned char *reply = NULL;    CARD16 str_length;    call_data->flag |= XimSYNCHRONUS;  /* always sync */    if (!(call_data->flag & XimLookupKeySym)        &&        (call_data->flag & XimLookupChars))    {        fm = FrameMgrInit (commit_chars_fr,                           NULL,                           _Xi18nNeedSwap (i18n_core, call_data->connect_id));        /* set length of STRING8 */        str_length = strlen (call_data->commit_string);        FrameMgrSetSize (fm, str_length);        total_size = FrameMgrGetTotalSize (fm);        reply = (unsigned char *) malloc (total_size);        if (!reply)        {            _Xi18nSendMessage (ims,                               call_data->connect_id,                               XIM_ERROR,                               0,                               0,                               0);            return False;        }        /*endif*/        memset (reply, 0, total_size);        FrameMgrSetBuffer (fm, reply);        str_length = FrameMgrGetSize (fm);        FrameMgrPutToken (fm, call_data->connect_id);        FrameMgrPutToken (fm, call_data->icid);        FrameMgrPutToken (fm, call_data->flag);        FrameMgrPutToken (fm, str_length);        FrameMgrPutToken (fm, call_data->commit_string);    }    else    {        fm = FrameMgrInit (commit_both_fr,                           NULL,                           _Xi18nNeedSwap (i18n_core, call_data->connect_id));        /* set length of STRING8 */        str_length = strlen (call_data->commit_string);        if (str_length > 0)            FrameMgrSetSize (fm, str_length);        /*endif*/        total_size = FrameMgrGetTotalSize (fm);        reply = (unsigned char *) malloc (total_size);        if (!reply)        {            _Xi18nSendMessage (ims,                               call_data->connect_id,                               XIM_ERROR,                               0,                               0,                               0);            return False;        }        /*endif*/        FrameMgrSetBuffer (fm, reply);        FrameMgrPutToken (fm, call_data->connect_id);        FrameMgrPutToken (fm, call_data->icid);        FrameMgrPutToken (fm, call_data->flag);        FrameMgrPutToken (fm, call_data->keysym);        if (str_length > 0)        {            str_length = FrameMgrGetSize (fm);            FrameMgrPutToken (fm, str_length);            FrameMgrPutToken (fm, call_data->commit_string);        }        /*endif*/    }    /*endif*/    _Xi18nSendMessage (ims,                       call_data->connect_id,                       XIM_COMMIT,                       0,                       reply,                       total_size);    FrameMgrFree (fm);    XFree (reply);    return True;}static int xi18n_callCallback (XIMS ims, IMProtocol *call_data){    switch (call_data->major_code)    {    case XIM_GEOMETRY:        return _Xi18nGeometryCallback (ims, call_data);    case XIM_PREEDIT_START:        return _Xi18nPreeditStartCallback (ims, call_data);    case XIM_PREEDIT_DRAW:        return _Xi18nPreeditDrawCallback (ims, call_data);    case XIM_PREEDIT_CARET:        return _Xi18nPreeditCaretCallback (ims, call_data);    case XIM_PREEDIT_DONE:        return _Xi18nPreeditDoneCallback (ims, call_data);    case XIM_STATUS_START:        return _Xi18nStatusStartCallback (ims, call_data);    case XIM_STATUS_DRAW:        return _Xi18nStatusDrawCallback (ims, call_data);    case XIM_STATUS_DONE:        return _Xi18nStatusDoneCallback (ims, call_data);    case XIM_STR_CONVERSION:        return _Xi18nStringConversionCallback (ims, call_data);    }    /*endswitch*/    return False;}/* preeditStart and preeditEnd are used only for Dynamic Event Flow. */static int xi18n_preeditStart (XIMS ims, IMProtocol *call_data){    Xi18n i18n_core = ims->protocol;    IMPreeditStateStruct *preedit_state =        (IMPreeditStateStruct *) &call_data->preedit_state;    long mask;    int on_key_num = i18n_core->address.on_keys.count_keys;    int off_key_num = i18n_core->address.off_keys.count_keys;    if (on_key_num == 0  &&  off_key_num == 0)        return False;    /*endif*/    if (i18n_core->address.imvalue_mask & I18N_FILTERMASK)        mask = i18n_core->address.filterevent_mask;    else        mask = DEFAULT_FILTER_MASK;    /*endif*/    _Xi18nSetEventMask (ims,                        preedit_state->connect_id,                        preedit_state->connect_id,                        preedit_state->icid,                        mask,                        ~mask);    return True;}static int xi18n_preeditEnd (XIMS ims, IMProtocol *call_data){    Xi18n i18n_core = ims->protocol;    int on_key_num = i18n_core->address.on_keys.count_keys;    int off_key_num = i18n_core->address.off_keys.count_keys;    IMPreeditStateStruct *preedit_state;    preedit_state = (IMPreeditStateStruct *) &call_data->preedit_state;    if (on_key_num == 0  &&  off_key_num == 0)        return False;    /*endif*/        _Xi18nSetEventMask (ims,                        preedit_state->connect_id,                        preedit_state->connect_id,                        preedit_state->icid,                        0,                        0);    return True;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -