[openi18n-im:01463] Re: key release issue with iiimxcf
Federic Zhang <[email protected]> Mon, 11 Jul 2005 11:46:29 +0800
| Newsgroups | gmane.comp.internationalization.input-methods |
|---|---|
| Message-ID | <[email protected]> |
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; >