[openi18n-im:01470] Re: key release issue with iiimxcf
Lei Phill Zhang <[email protected]> Mon, 11 Jul 2005 20:50:27 +0800
| Newsgroups | gmane.comp.internationalization.input-methods |
|---|---|
| Message-ID | <[email protected]> |
I think maybe we could define KeyRelease event, which has the same event structure but the event type is different than the KeyPress event. to the LEIF. This require no modification. And require no modification to current iiimp and iiimcf. Phill Zhang 在2005年07月11日的11:46,Federic Zhang写道: > Kasha, > > To help LE developer, it's better for us to define one convenient > MACRO in include/IMProtocolStruct.h to decide whether the key event is > either press or release. For example, we can write it as following: > > #define IsKeyRelease(v) ((v)->modifier & IM_KEY_RELEASE_MASK) /* the > type of 'v' is IMKeyEventStruct */ > > How do you think the suggestion? > > -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; > >