Commit b00312f5 authored by Samuel Thibault's avatar Samuel Thibault Committed by Ulrich Sibiller

Fix status reporting for braille patterns

_XimLocalMbLookupString can return a braille keysym even if _Xlcwctomb can't convert to the current MB charset. _XimLocalUtf8LookupString needs to set the braille keysym and status too. Signed-off-by: 's avatarSamuel Thibault <samuel.thibault@ens-lyon.org> Backported-to-NX-by: 's avatarUlrich Sibiller <uli42@gmx.de>
parent a2fded2e
...@@ -63,20 +63,25 @@ _XimLocalMbLookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes, ...@@ -63,20 +63,25 @@ _XimLocalMbLookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes,
unsigned char pattern = ic->private.local.brl_committed; unsigned char pattern = ic->private.local.brl_committed;
char mb[XLC_PUBLIC(ic->core.im->core.lcd, mb_cur_max)]; char mb[XLC_PUBLIC(ic->core.im->core.lcd, mb_cur_max)];
ret = _Xlcwctomb(ic->core.im->core.lcd, mb, BRL_UC_ROW | pattern); ret = _Xlcwctomb(ic->core.im->core.lcd, mb, BRL_UC_ROW | pattern);
if(ret < 0) {
if(status) *status = XLookupNone;
return(0);
}
if(ret > bytes) { if(ret > bytes) {
if(status) *status = XBufferOverflow; if(status) *status = XBufferOverflow;
return(ret); return(ret);
} }
if(keysym) { if(keysym) *keysym = XK_braille_blank | pattern;
*keysym = XK_braille_blank | pattern; if(ret > 0) {
if(status) *status = XLookupBoth; if (keysym) {
} else if(status) *status = XLookupBoth;
if(status) *status = XLookupChars; } else {
memcpy(buffer, mb, ret); if(status) *status = XLookupChars;
}
memcpy(buffer, mb, ret);
} else {
if(keysym) {
if(status) *status = XLookupKeySym;
} else {
if(status) *status = XLookupNone;
}
}
} else { /* Composed Event */ } else { /* Composed Event */
ret = strlen(&mb[b[ic->private.local.composed].mb]); ret = strlen(&mb[b[ic->private.local.composed].mb]);
if(ret > bytes) { if(ret > bytes) {
...@@ -217,6 +222,11 @@ _XimLocalUtf8LookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes, ...@@ -217,6 +222,11 @@ _XimLocalUtf8LookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes,
buffer[0] = 0xe0 | ((BRL_UC_ROW >> 12) & 0x0f); buffer[0] = 0xe0 | ((BRL_UC_ROW >> 12) & 0x0f);
buffer[1] = 0x80 | ((BRL_UC_ROW >> 8) & 0x30) | (pattern >> 6); buffer[1] = 0x80 | ((BRL_UC_ROW >> 8) & 0x30) | (pattern >> 6);
buffer[2] = 0x80 | (pattern & 0x3f); buffer[2] = 0x80 | (pattern & 0x3f);
if(keysym) {
*keysym = XK_braille_blank | pattern;
if(status) *status = XLookupBoth;
} else
if(status) *status = XLookupChars;
} else { /* Composed Event */ } else { /* Composed Event */
ret = strlen(&utf8[b[ic->private.local.composed].utf8]); ret = strlen(&utf8[b[ic->private.local.composed].utf8]);
if(ret > bytes) { if(ret > bytes) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment