[openi18n-im:01465] Re: key release issue with iiimxcf
Federic Zhang <[email protected]> Mon, 11 Jul 2005 13:41:17 +0800
| Newsgroups | gmane.comp.internationalization.input-methods |
|---|---|
| Message-ID | <[email protected]> |
Kasha, Note capability has been added in IMATTRIBUTE, but you didn't export the capability info to client framework. I just try to export with one patch that hasn't been tested yet. Please review, update and commit if you think it is good. As IIIMCF_handle_rec is one opaque struct, probably new APIs should be provided for various client framework such gcf and xcf etc to access them. In my opinion, the capability value set in IIIMP_IMState.cpp should depend on whether the current LE has interest in KEY release. If the LE doesn't support it, client via gcf or xcf doesn't need to send Key Release Event to server, then the number of key event message exchanged between client and server can be reduced. Do you think the logic is good? -federic > Date: Fri, 08 Jul 2005 14:06:44 +0800 > From: Federic Zhang <[email protected]>: > > > > Thanks for your commit. Can you post it in patch format? It would be > > easier for me to take a look at it. > > This mail includes diffs for r2748. > > Thanks, > -- > kasha > > ------------------------------------------------------------------------ > r2748 | kasha | 2005-07-08 14:12:33 +0900 (Fri, 08 Jul 2005) | 3 lines > > fix LE.cpp - AUX events > fix libiiimp.so compatibility issue - KEYEVENT > > ------------------------------------------------------------------------ > Index: iiimsf/src/LE.cpp > =================================================================== > --- iiimsf/src/LE.cpp (revision 2747) > +++ iiimsf/src/LE.cpp (revision 2748) > @@ -459,14 +459,16 @@ > IMInputEvent* pimevent > ) > { > - IMKeyEventStruct *pkey; > +// IMKeyEventStruct *pkey; > > bind_imlexec(pimlex); > IMLock lock(get_leif_sync_object(), need_thread_lock_p()); > /* Assume that only one event will be sent at a time */ > - pkey = ((IMKeyListEvent *)pimevent)->keylist; > +// pkey = ((IMKeyListEvent *)pimevent)->keylist; > /* if KeyRelease is interested, send the release event. Otherwise, send only the press event */ > - if ((pkey && pkey->keyType == IM_KEY_PRESS) || pbase->iml_if->need_keyrelease) > +// if ((pkey && pkey->keyType == IM_KEY_PRESS) || pbase->iml_if->need_keyrelease) > + if ((IM_EventKeyList != pimevent->type) || > + (0 == (IM_KEY_RELEASE_MASK & pimevent->keylist.keylist->modifier))) > if_SendEvent(s, pimevent); > > return true; > Index: iiimsf/src/IIIMP_ICState.cpp > =================================================================== > --- iiimsf/src/IIIMP_ICState.cpp (revision 2747) > +++ iiimsf/src/IIIMP_ICState.cpp (revision 2748) > @@ -615,7 +615,6 @@ > kev.keyChar = piiimpkey->keychar; > kev.modifier = piiimpkey->modifier; > kev.time_stamp = piiimpkey->time_stamp; > - kev.keyType = piiimpkey->keytype; > keyvec.push_back(kev); > } > > @@ -710,7 +709,6 @@ > ikev.keychar = pkeyevent->keyChar; > ikev.modifier = pkeyevent->modifier; > ikev.time_stamp = pkeyevent->time_stamp; > - ikev.keytype = pkeyevent->keyType; > > IIIMP_keyevent_list *pikl = iiimp_keyevent_list_new(get_iiimptrans()->get_data_s(), > 1, &ikev); > Index: iiimsf/src/IMKeyUtils.cpp > =================================================================== > --- iiimsf/src/IMKeyUtils.cpp (revision 2747) > +++ iiimsf/src/IMKeyUtils.cpp (revision 2748) > @@ -55,22 +55,8 @@ > keychar = x_keychar; > modifier = x_modifier; > timestamp = x_timestamp; > - keytype = 1; /* set IM_KEY_PRESS by default */ > } > > -IMKeySpec::IMKeySpec(int x_keycode, > - int x_keychar, > - int x_modifier, > - int x_timestamp, > - int x_keytype) > -{ > - keycode = x_keycode; > - keychar = x_keychar; > - modifier = x_modifier; > - timestamp = x_timestamp; > - keytype = x_keytype; > -} > - > /******************************************************************************* > IMKeyParser (helper object to parse key symbols > *******************************************************************************/ > Index: iiimsf/src/ChangeLog > =================================================================== > --- iiimsf/src/ChangeLog (revision 2747) > +++ iiimsf/src/ChangeLog (revision 2748) > @@ -1,3 +1,19 @@ > +2005-07-08 AShiZaWa KaZuNoRi <[email protected]> > + > + * IIIMP_hotkey_profile.cpp (get_super_hotkeys): remove keytype for key release > + * IIIMP_IMState.cpp (send_trigger_keys): remove keytype for key release > + (set_data_to_client): add capability > + * IIIMP_hotkey.cpp: IIIMP_hotkey::forward_hotkey_to_LE() > + remove keytype for key release > + * IMKeyUtils.hh (class IMKeySpec): remove keytype for key release > + * IMKeyUtils.cpp (IMKeySpec): remove keytype for key release > + * IIIMP_ICState.cpp: remove keytype for key release > + * LE.cpp: LEContext::send_event() > + pkey = ((IMKeyListEvent *)pimevent)->keylist; > + if ((pkey && pkey->keyType == IM_KEY_PRESS) || pbase->iml_if->need_keyrelease) > + The code processes only key events, and ignores other events such > + as aux events. Breaks AUX. > + > 2005-07-07 AShiZaWa KaZuNoRi <[email protected]> > > * IIIMP_IMState.cpp (create_input_method_descriptors): call > Index: iiimsf/src/IMKeyUtils.hh > =================================================================== > --- iiimsf/src/IMKeyUtils.hh (revision 2747) > +++ iiimsf/src/IMKeyUtils.hh (revision 2748) > @@ -51,7 +51,6 @@ > int keychar; > int modifier; > int timestamp; > - int keytype; > public: > int get_keycode() const > { return keycode; } > @@ -61,21 +60,12 @@ > { return modifier; } > int get_timestamp() const > { return timestamp; } > - int get_keytype() const > - { return keytype; } > IMKeySpec( > int keycode, > int keychar, > int modifier, > int timestamp > ); > - IMKeySpec( > - int keycode, > - int keychar, > - int modifier, > - int timestamp, > - int keytype > - ); > }; > > typedef std::list<IMKeySpec> IMKeySpecList; > Index: iiimsf/src/IIIMP_hotkey.cpp > =================================================================== > --- iiimsf/src/IIIMP_hotkey.cpp (revision 2747) > +++ iiimsf/src/IIIMP_hotkey.cpp (revision 2748) > @@ -110,7 +110,6 @@ > kev.keyChar = it3->get_keychar(); > kev.modifier = it3->get_modifier(); > kev.time_stamp = it3->get_timestamp(); > - kev.keyType = it3->get_keytype(); > keyvec.push_back(kev); > > IMKeyListEvent *pimkey = &ev.keylist; > Index: iiimsf/src/IIIMP_IMState.cpp > =================================================================== > --- iiimsf/src/IIIMP_IMState.cpp (revision 2747) > +++ iiimsf/src/IIIMP_IMState.cpp (revision 2748) > @@ -114,7 +114,6 @@ > keys[i].keychar = it->get_keychar(); > keys[i].modifier = it->get_modifier(); > keys[i].time_stamp = it->get_timestamp(); > - keys[i].keytype = it->get_keytype(); > } > pion = iiimp_keyevent_list_new(pdata_s, i, keys); > pioff = iiimp_keyevent_list_new(pdata_s, i, keys); > @@ -614,7 +613,9 @@ > IIIMP_IMState_Identified:: > set_data_to_client() > { > - IIIMP_imattribute *pima, *pima_objdesc, *pima_imdesc; > + IIIMP_imattribute *pima, *pima_objdesc, *pima_imdesc, *pima_capability; > + IIIMP_card32_list * capability; > + IIIMP_card32 ca[1]; > > pima_objdesc = create_object_descriptors(); > > @@ -631,6 +632,20 @@ > pima = pima_imdesc; > } > > + ca[0] = 0; > + ca[0] |= IIIMP_CAPABILITY_FILE_OPERATION; > + ca[0] |= IIIMP_CAPABILITY_KEY_RELEASE; > + capability = iiimp_card32_list_new(get_iiimptrans()->get_data_s(), 1, ca); > + pima_capability = > + iiimp_imattribute_capability_new( > + get_iiimptrans()->get_data_s(), IIIMP_IMATTRIBUTE_CAPABILITY, > + 0, capability); > + if (NULL == pima) { > + pima = pima_capability; > + } else { > + pima->next = pima_capability; > + } > + > if (!send(iiimp_setimvalues_new(get_iiimptrans()->get_data_s(), > get_im_id(), pima), true)) > return false; > Index: iiimsf/src/IIIMP_hotkey_profile.cpp > =================================================================== > --- iiimsf/src/IIIMP_hotkey_profile.cpp (revision 2747) > +++ iiimsf/src/IIIMP_hotkey_profile.cpp (revision 2748) > @@ -79,13 +79,11 @@ > kev[n_keys].keyChar = 0; > kev[n_keys].modifier = IM_CTRL_MASK|IM_ALT_MASK; > kev[n_keys].time_stamp = 0; > - kev[n_keys].keyType = IM_KEY_PRESS; > n_keys++; > kev[n_keys].keyCode = IM_VK_SPACE; > kev[n_keys].keyChar = 0; > kev[n_keys].modifier = IM_CTRL_MASK|IM_SHIFT_MASK; > kev[n_keys].time_stamp = 0; > - kev[n_keys].keyType = IM_KEY_PRESS; > n_keys++; > > hks[n_hotkeys].label = strdup("LE SWITCH"); > @@ -103,7 +101,6 @@ > kev[n_keys].keyChar = it->get_keychar(); > kev[n_keys].modifier = it->get_modifier(); > kev[n_keys].time_stamp = it->get_timestamp(); > - kev[n_keys].keyType = it->get_keytype(); > } > > hks[n_hotkeys].label = strdup("TRIGGER KEYS"); > @@ -120,7 +117,6 @@ > kev[n_keys].keyChar = 0; > kev[n_keys].modifier = IM_SHIFT_MASK|IM_CTRL_MASK; > kev[n_keys].time_stamp = 0; > - kev[n_keys].keyType = IM_KEY_PRESS; > n_keys++; > > hks[n_hotkeys].label = strdup("CYCLE LE SWITCH"); > @@ -137,7 +133,6 @@ > kev[n_keys].keyChar = 0; > kev[n_keys].modifier = IM_SHIFT_MASK|IM_CTRL_MASK; > kev[n_keys].time_stamp = 0; > - kev[n_keys].keyType = IM_KEY_PRESS; > n_keys++; > > hks[n_hotkeys].label = strdup("CYCLE LE SWITCH(reverse)"); > @@ -356,7 +351,6 @@ > keys[j].keychar = it3->get_keychar(); > keys[j].modifier = it3->get_modifier(); > keys[j].time_stamp = it3->get_timestamp(); > - keys[j].keytype = it3->get_keytype(); > } > hk[i].hotkeylist = iiimp_keyevent_list_new(pdata_s, keylist->size(), keys); > delete[] keys; > Index: include/IMProtocolStruct.h > =================================================================== > --- include/IMProtocolStruct.h (revision 2747) > +++ include/IMProtocolStruct.h (revision 2748) > @@ -197,12 +197,13 @@ > #define IM_KEY_PRESS 1 > #define IM_KEY_RELEASE 0 > > +#define IM_KEY_RELEASE_MASK (0x80000000) > + > typedef struct _IMKeyEventStruct { > int keyCode; > int keyChar; > int modifier; > int time_stamp; > - int keyType; /* For Key Release Event Support */ > } IMKeyEventStruct, *IMKeyList; > > /* > Index: include/iiimcf.h > =================================================================== > --- include/iiimcf.h (revision 2747) > +++ include/iiimcf.h (revision 2748) > @@ -188,7 +188,6 @@ > IIIMP_int32 keychar; > IIIMP_int32 modifier; > IIIMP_int32 time_stamp; > - IIIMP_int32 keytype; /* For Key Release Event Support */ > }; > > /* Hotkeys */ > Index: include/ChangeLog > =================================================================== > --- include/ChangeLog (revision 2747) > +++ include/ChangeLog (revision 2748) > @@ -1,3 +1,17 @@ > +2005-07-08 AShiZaWa KaZuNoRi <[email protected]> > + > + * iiimp/iiimp-data.h (IIIMP_imattribute_value): remove keytype for key release > + (IIIMP_keyevent): remove keytype for key release > + (iiimp_imattribute_capability_new()): new > + (IIIMP_IMATTRIBUTE_CAPABILITY): new > + (IIIMP_CAPABILITY_ERROR): new > + (IIIMP_CAPABILITY_FILE_OPERATION): new > + (IIIMP_CAPABILITY_KEY_RELEASE): new > + > + * iiimcf.h (IIIMCF_keyevent): remove keytype for key release > + * IMProtocolStruct.h (IM_KEY_RELEASE_MASK): new > + (IMKeyEventStruct): remove keytype for key release > + > 2005-07-07 AShiZaWa KaZuNoRi <[email protected]> > > * iiimp/iiimp-data.h: IIIMP_imeinfo - editorial change > Index: include/iiimp/iiimp-data.h > =================================================================== > --- include/iiimp/iiimp-data.h (revision 2747) > +++ include/iiimp/iiimp-data.h (revision 2748) > @@ -216,6 +216,7 @@ > IIIMP_ccdef * ccdef; > IIIMP_jarfile_object * jarfile_object; > IIIMP_binaryfile_object * binaryfile_object; > + IIIMP_card32_list * capability; > } IIIMP_imattribute_value; > > struct iiimp_imattribute { > @@ -250,7 +251,6 @@ > IIIMP_int32 keychar; > IIIMP_int32 modifier; > IIIMP_int32 time_stamp; > - IIIMP_int32 keytype; /* For Key Release Event Support */ > } IIIMP_keyevent; > > typedef struct { > @@ -1754,6 +1754,13 @@ > IIIMP_card16 id_dyn, > IIIMP_binaryfile_object * value); > > +extern IIIMP_imattribute * > +iiimp_imattribute_capability_new( > + IIIMP_data_s * data_s, > + IIIMP_card16 id, > + IIIMP_card16 id_dyn, > + IIIMP_card32_list * value); > + > extern IIIMP_icattribute * > iiimp_icattribute_input_language_new( > IIIMP_data_s * data_s, > @@ -2871,8 +2878,16 @@ > #define IIIMP_IMATTRIBUTE_BINARY_LIGHT_WEIGHT_ENGINE_OBJECT (0x1034) > #define IIIMP_IMATTRIBUTE_SCRIPT_GUI_OBJECT (0x1035) > #define IIIMP_IMATTRIBUTE_SCRIPT_LIGHT_WEIGHT_ENGINE_OBJECT (0x1036) > +#define IIIMP_IMATTRIBUTE_CAPABILITY (0x1051) > > > +/* IIIMP capability */ > + > +#define IIIMP_CAPABILITY_ERROR (0x00000001) > +#define IIIMP_CAPABILITY_FILE_OPERATION (0x00000002) > +#define IIIMP_CAPABILITY_KEY_RELEASE (0x00000004) > + > + > /* IIIMP IM_LOOKUP_CHOICE_START */ > > /* lookup choice master */ > Index: lib/iiimcf/iiimcf.c > =================================================================== > --- lib/iiimcf/iiimcf.c (revision 2747) > +++ lib/iiimcf/iiimcf.c (revision 2748) > @@ -235,7 +235,6 @@ > pkev->keychar = pimk->keychar; > pkev->modifier = pimk->modifier; > pkev->time_stamp = pimk->time_stamp; > - pkev->keytype = pimk->keytype; > } > > ph->num_on_keys = i; > @@ -259,7 +258,6 @@ > pkev->keychar = pimk->keychar; > pkev->modifier = pimk->modifier; > pkev->time_stamp = pimk->time_stamp; > - pkev->keytype = pimk->keytype; > } > > ph->num_off_keys = i; > Index: lib/iiimcf/ChangeLog > =================================================================== > --- lib/iiimcf/ChangeLog (revision 2747) > +++ lib/iiimcf/ChangeLog (revision 2748) > @@ -1,3 +1,9 @@ > +2005-07-08 AShiZaWa KaZuNoRi <[email protected]> > + > + * event.c (forward_keyevent()): remove keytype for key release > + (iiimcf_receive_forwarded_event()): remove keytype for key release > + * iiimcf.c (iiimcf_register_trigger_keys()): remove keytype for key release > + > 2005-06-30 Federic Zhang <[email protected]> > > Enable Input Method Engine (IME) switching and display IME list in the language submenu of GIMLET > Index: lib/iiimcf/event.c > =================================================================== > --- lib/iiimcf/event.c (revision 2747) > +++ lib/iiimcf/event.c (revision 2748) > @@ -405,7 +405,6 @@ > ikev.keychar = pk->keychar; > ikev.modifier = pk->modifier; > ikev.time_stamp = pk->time_stamp; > - ikev.keytype = pk->keytype; > > pikl = iiimp_keyevent_list_new(pds, 1, &ikev); > if (!pikl) return IIIMF_STATUS_MALLOC; > @@ -567,7 +566,6 @@ > kev.keychar = pimkev->keychar; > kev.modifier = pimkev->modifier; > kev.time_stamp = pimkev->time_stamp; > - kev.keytype = pimkev->keytype; > st = iiimcf_create_keyevent(&kev, (IIIMCF_event*) &pev); > if (st != IIIMF_STATUS_SUCCESS) return st; > st = iiimcf_store_event(pc, pev); > Index: lib/iiimp/ChangeLog > =================================================================== > --- lib/iiimp/ChangeLog (revision 2747) > +++ lib/iiimp/ChangeLog (revision 2748) > @@ -1,3 +1,17 @@ > +2005-07-08 AShiZaWa KaZuNoRi <[email protected]> > + > + * data/comp-keyevent.c (iiimp_keyevent_list_new): revert keytype > + (iiimp_keyevent_list_pack): remove keytype for key release > + (iiimp_keyevent_list_unpack): remove keytype for key release > + * data/comp-imattribute.c (iiimp_imattribute_new): add capability > + (iiimp_imattribute_delete): add capability > + (iiimp_imattribute_capability_new): new > + (iiimp_imattribute_pack): add capability > + (iiimp_imattribute_unpack): add capability > + (iiimp_imattribute_print): add capability > + * data/iiimp-dataP.h (KEY_EVENT_OBJECT_SIZE): revert > + editorial change > + > 2005-07-07 AShiZaWa KaZuNoRi <[email protected]> > > * data/comp-inputmethod-descriptor.c > Index: lib/iiimp/data/iiimp-dataP.h > =================================================================== > --- lib/iiimp/data/iiimp-dataP.h (revision 2747) > +++ lib/iiimp/data/iiimp-dataP.h (revision 2748) > @@ -367,7 +367,7 @@ > } while(0) > > > -#define KEY_EVENT_OBJECT_SIZE (4 * 5) /* Additional one for the new keytype member */ > +#define KEY_EVENT_OBJECT_SIZE (4 * 4) > > > typedef struct iiimp_attribute_id { > @@ -376,6 +376,7 @@ > struct iiimp_attribute_id * next; > } IIIMP_attribute_id; > > + > struct iiimp_data_s { > int byte_swap; > IIIMP_attribute_id * attribute_id; > Index: lib/iiimp/data/comp-imattribute.c > =================================================================== > --- lib/iiimp/data/comp-imattribute.c (revision 2747) > +++ lib/iiimp/data/comp-imattribute.c (revision 2748) > @@ -73,6 +73,9 @@ > case IIIMP_IMATTRIBUTE_SCRIPT_LIGHT_WEIGHT_ENGINE_OBJECT: > attr->value_nbyte = attr->value.binaryfile_object->nbyte; > break; > + case IIIMP_IMATTRIBUTE_CAPABILITY: > + attr->value_nbyte = attr->value.capability->nbyte; > + break; > } > > attr->nbyte += (attr->value_nbyte + PAD(attr->value_nbyte)); > @@ -109,6 +112,9 @@ > case IIIMP_IMATTRIBUTE_SCRIPT_LIGHT_WEIGHT_ENGINE_OBJECT: > iiimp_binaryfile_object_delete(data_s, attr->value.binaryfile_object); > break; > + case IIIMP_IMATTRIBUTE_CAPABILITY: > + iiimp_card32_list_delete(data_s, attr->value.capability); > + break; > } > free(attr); > > @@ -258,6 +264,19 @@ > } > > > +IIIMP_imattribute * > +iiimp_imattribute_capability_new( > + IIIMP_data_s * data_s, > + IIIMP_card16 id, > + IIIMP_card16 id_dyn, > + IIIMP_card32_list * value) > +{ > + return iiimp_imattribute_new(data_s, id, > + IIIMP_IMATTRIBUTE_CAPABILITY, > + id_dyn, (void *)value); > +} > + > + > void > iiimp_imattribute_pack( > IIIMP_data_s * data_s, > @@ -304,6 +323,9 @@ > iiimp_binaryfile_object_pack(data_s, m->value.binaryfile_object, > &rest, &p); > break; > + case IIIMP_IMATTRIBUTE_CAPABILITY: > + iiimp_card32_list_pack(data_s, m->value.capability, &rest, &p); > + break; > } > > *nbyte = rest; > @@ -423,6 +445,10 @@ > attr->value.binaryfile_object = > iiimp_binaryfile_object_unpack(data_s, &rest2, &p, rest2); > break; > + case IIIMP_IMATTRIBUTE_CAPABILITY: > + attr->value.capability = iiimp_card32_list_unpack(data_s, &rest2, > + &p, rest2); > + break; > default: > attr->value.any = NULL; > data_s->status = IIIMP_DATA_INVALID; > @@ -541,6 +567,10 @@ > "\tSCRIPT Light Weight Engine Object:\n"); > iiimp_binaryfile_object_print(data_s, m->value.binaryfile_object); > break; > + case IIIMP_IMATTRIBUTE_CAPABILITY: > + (void)fprintf(data_s->print_fp, "\tCapability:\n"); > + iiimp_card32_list_print(data_s, m->value.capability); > + break; > } > } > > Index: lib/iiimp/data/comp-keyevent.c > =================================================================== > --- lib/iiimp/data/comp-keyevent.c (revision 2747) > +++ lib/iiimp/data/comp-keyevent.c (revision 2748) > @@ -26,7 +26,7 @@ > return NULL; > } > > - nbyte = ((4 + 4 + 4 + 4 + 4) * count); /* keytype is expected */ > + nbyte = ((4 + 4 + 4 + 4) * count); > > data->nbyte = nbyte; > data->count = count; > @@ -81,7 +81,6 @@ > PUT32((m->keyevent + i)->keychar, rest, p, data_s->byte_swap); > PUT32((m->keyevent + i)->modifier, rest, p, data_s->byte_swap); > PUT32((m->keyevent + i)->time_stamp, rest, p, data_s->byte_swap); > - PUT32((m->keyevent + i)->keytype, rest, p, data_s->byte_swap); > } > > *nbyte = rest; > @@ -143,7 +142,6 @@ > GET32((l->keyevent + i)->keychar, rest, p, data_s->byte_swap); > GET32((l->keyevent + i)->modifier, rest, p, data_s->byte_swap); > GET32((l->keyevent + i)->time_stamp, rest, p, data_s->byte_swap); > - GET32((l->keyevent + i)->keytype, rest, p, data_s->byte_swap); > } > > /* This failed for the scenario of having multiple HOTKEYS and each > Index: iiimgcf/ChangeLog > =================================================================== > --- iiimgcf/ChangeLog (revision 2747) > +++ iiimgcf/ChangeLog (revision 2748) > @@ -1,3 +1,8 @@ > +2005-07-08 AShiZaWa KaZuNoRi <[email protected]> > + > + * IIIMGdkEventKey.c (convert_GdkEventKey_to_IIIMCF_keyevent): > + remove keytype for key release > + > 2005-06-30 Federic Zhang <[email protected]> > > Enable Input Method Engine (IME) switching and display IME list in the language submenu of GIMLET. > Index: iiimgcf/IIIMGdkEventKey.c > =================================================================== > --- iiimgcf/IIIMGdkEventKey.c (revision 2747) > +++ iiimgcf/IIIMGdkEventKey.c (revision 2748) > @@ -817,8 +817,9 @@ > { > int c; > guint keyval; > + int key_release; > > - pkev->keytype = e->type == GDK_KEY_PRESS; > + key_release = ((e->type == GDK_KEY_PRESS) ? 0 : 0x80000000); > > #if USE_KANA_TABLE > gint kanaflag; > @@ -844,7 +845,7 @@ > pkev->keychar = kana_shift_keymapTable[i].iiimf_keychar; > if (pkev->keycode) > { > - pkev->modifier = modifier (e->state); > + pkev->modifier = (modifier (e->state) | key_release); > pkev->time_stamp = e->time; > return IIIMF_STATUS_SUCCESS; > } > @@ -861,7 +862,7 @@ > pkev->keychar = kana_normal_keymapTable[i].iiimf_keychar; > if (pkev->keycode) > { > - pkev->modifier = modifier (e->state); > + pkev->modifier = (modifier (e->state) | key_release); > pkev->time_stamp = e->time; > return IIIMF_STATUS_SUCCESS; > } > @@ -877,7 +878,7 @@ > pkev->keychar = kana_shift_keymapTable[i].iiimf_keychar; > if (pkev->keycode) > { > - pkev->modifier = modifier (e->state); > + pkev->modifier = (modifier (e->state) | key_release); > pkev->time_stamp = e->time; > return IIIMF_STATUS_SUCCESS; > } > @@ -895,7 +896,7 @@ > pkev->keychar = kana_normal_keymapTable[i].iiimf_keychar; > if (pkev->keycode) > { > - pkev->modifier = modifier (e->state); > + pkev->modifier = (modifier (e->state) | key_release); > pkev->time_stamp = e->time; > return IIIMF_STATUS_SUCCESS; > } > @@ -911,7 +912,7 @@ > pkev->keychar = kana_normal_keymapTable[i].iiimf_keychar; > if (pkev->keycode) > { > - pkev->modifier = modifier (e->state); > + pkev->modifier = (modifier (e->state) | key_release); > pkev->time_stamp = e->time; > return IIIMF_STATUS_SUCCESS; > } > @@ -958,7 +959,7 @@ > pkev->keychar = gdk_keyval_to_unicode (e->keyval); > pkev->keycode = c; > } > - pkev->modifier = modifier (e->state); > + pkev->modifier = (modifier (e->state) | key_release); > > pkev->time_stamp = e->time; >
iiim-cf-capability.diff
(text/x-patch, 1.5 KB)
Index: lib/iiimcf/iiimcf.c
===================================================================
--- lib/iiimcf/iiimcf.c (revision 2750)
+++ lib/iiimcf/iiimcf.c (working copy)
@@ -329,6 +329,28 @@
}
static IIIMF_status
+iiimcf_register_capability_list(
+ IIIMCF_handle_rec *ph,
+ IIIMP_card32_list *capability
+)
+{
+ int i;
+
+ for (i = 0; i < capability->count; ++i)
+ {
+ IIIMP_card32 p = *(capability->ptr + i);
+
+ if (p & IIIMP_CAPABILITY_KEY_RELEASE)
+ ph->support_key_release = True;
+
+ if (p & IIIMP_CAPABILITY_FILE_OPERATION)
+ ph->support_file_operation = True;
+ }
+
+ return IIIMF_STATUS_SUCCESS;
+}
+
+static IIIMF_status
iiimcf_register_object_descriptor_list(
IIIMCF_handle_rec *ph,
IIIMP_object_descriptor *piiimp_objdesc
@@ -411,6 +433,9 @@
st = iiimcf_register_object_descriptor_list(ph, pimattrs->value.object_descriptor);
if (st != IIIMF_STATUS_SUCCESS) return st;
break;
+ case IIIMP_IMATTRIBUTE_CAPABILITY:
+ st = iiimcf_register_capability_list (ph, pimattrs->value.capability);
+ if (st != IIIMF_STATUS_SUCCESS) return st;
default:
/* simply ignore */
Index: lib/iiimcf/iiimcfint.h
===================================================================
--- lib/iiimcf/iiimcfint.h (revision 2750)
+++ lib/iiimcf/iiimcfint.h (working copy)
@@ -118,6 +118,9 @@
THREAD_ID_OBJECT thread_owner_id;
int thread_lock_count;
#endif
+
+ Bool support_key_release;
+ Bool support_file_operation;
};
enum IIIMCF_CONTEXT_STATE_FLAGS {