gtk: a dead key hands the pending text back first
GtkIMContextSimple composes dead keys, and while it did the daemon still held the syllable typed before them: the composed é was inserted first and 하 reappeared after it. A key the daemon does not take now resets the composition when Simple begins composing on it — a modifier press, which is also no key, leaves it alone.
This commit is contained in:
10
gtk/main.c
10
gtk/main.c
@@ -252,6 +252,7 @@ kpress(GtkIMContext *ctx, GdkEventKey *ev)
|
||||
char pre[Ipcfieldmax+1];
|
||||
uint32_t key, mod;
|
||||
Ipcresp resp;
|
||||
gboolean r;
|
||||
|
||||
im = (Im*)ctx;
|
||||
if(ev->type != GDK_KEY_PRESS){
|
||||
@@ -263,8 +264,13 @@ kpress(GtkIMContext *ctx, GdkEventKey *ev)
|
||||
return simplefilter(ctx, ev, 0);
|
||||
key = ipckeysym(ev->keyval, gdk_keyval_to_unicode(ev->keyval));
|
||||
mod = ipcmod(ev->state);
|
||||
if(im->private || key == 0)
|
||||
return simplefilter(ctx, ev, 0);
|
||||
if(im->private || key == 0){
|
||||
r = simplefilter(ctx, ev, 0);
|
||||
/* A dead key starts a compose: pending text was typed first. */
|
||||
if(im->simpleactive)
|
||||
sendreset(im);
|
||||
return r;
|
||||
}
|
||||
if(srvconnect(im) < 0)
|
||||
return simplefilter(ctx, ev, 0);
|
||||
/* A retained GDK window may have moved since the last cursor report. */
|
||||
|
||||
Reference in New Issue
Block a user