ALT Linux Bugzilla
– Attachment 993 Details for
Bug 7384
Более полная поддержка XIM.
New bug
|
Search
|
[?]
|
Help
Register
|
Log In
[x]
|
Forgot Password
Login:
[x]
|
EN
|
RU
[patch]
патч для поддержки xim
aterm-1.0.0-xim.patch (text/plain), 4.40 KB, created by
Gleb Stiblo
on 2005-07-15 20:24:09 MSD
(
hide
)
Description:
патч для поддержки xim
Filename:
MIME Type:
Creator:
Gleb Stiblo
Created:
2005-07-15 20:24:09 MSD
Size:
4.40 KB
patch
obsolete
>diff -Naur aterm-1.0.0/src/command.c aterm-1.0.0.me/src/command.c >--- aterm-1.0.0/src/command.c 2005-07-15 18:20:37 +0300 >+++ aterm-1.0.0.me/src/command.c 2005-07-15 18:33:30 +0300 >@@ -253,7 +253,7 @@ > > /*{{{ defines: */ > >-#define KBUFSZ 8 /* size of keyboard mapping buffer */ >+#define KBUFSZ 64 /* size of keyboard mapping buffer */ > #define STRING_MAX 512 /* max string size for process_xterm_seq() */ > #define ESC_ARGS 32 /* max # of args for esc sequences */ > >@@ -382,7 +382,7 @@ > #ifndef NO_XLOCALE > static char *rs_inputMethod = ""; /* XtNinputMethod */ > static char *rs_preeditType = NULL; /* XtNpreeditType */ >-static XIC Input_Context; /* input context */ >+static XIC Input_Context = NULL; /* input context */ > #endif /* NO_XLOCALE */ > > /* command input buffering */ >@@ -518,6 +518,13 @@ > fprintf(stderr, "Restoring \"%s\" to mode %03o, uid %d, gid %d\n", > ttydev, ttyfd_stat.st_mode, ttyfd_stat.st_uid, ttyfd_stat.st_gid); > #endif >+#ifndef NO_XLOCALE >+ XUnregisterIMInstantiateCallback(Xdisplay, NULL, NULL, NULL, IMInstantiateCallback, NULL); >+/* XXX: Is it needed? If uncommet that then after killing aterm it cycles there; >+ if (Input_Context != NULL) XDestroyIC(Input_Context); >+*/ >+ Input_Context = NULL; >+#endif > scr_release(); > privileges(RESTORE); > #ifndef __CYGWIN32__ >@@ -610,7 +617,7 @@ > ttydev = tty_name; > > # define PTYCHAR1 "pqrstuvwxyz" >-# define PTYCHAR2 "0123456789abcdef" >+# define PTYCHAR2 "0123456789abcdefghijklmnopqrstuvwxyz" > for (c1 = PTYCHAR1; *c1; c1++) { > ptydev[len - 2] = ttydev[len - 2] = *c1; > for (c2 = PTYCHAR2; *c2; c2++) { >@@ -1233,7 +1240,7 @@ > DndSelection = XInternAtom(Xdisplay, "DndSelection", False); > #endif /* OFFIX_DND */ > >- init_xlocale(); >+ XRegisterIMInstantiateCallback(Xdisplay, NULL, NULL, NULL, IMInstantiateCallback, NULL); > > /* get number of available file descriptors */ > #ifdef _POSIX_VERSION >@@ -1294,6 +1301,17 @@ > } > /*}}} */ > >+/*{{{ XIM_destroy_callback() */ >+/* PROTO */ >+void >+IMDestroyCallback(XIM xim, XPointer client_data, XPointer call_data) >+{ >+ XUnregisterIMInstantiateCallback(Xdisplay, NULL, NULL, NULL, IMInstantiateCallback, NULL); >+ if (Input_Context != NULL ) XDestroyIC(Input_Context); >+ Input_Context = NULL; >+ XRegisterIMInstantiateCallback(Xdisplay, NULL, NULL, NULL, IMInstantiateCallback, NULL); >+} >+ > /*{{{ Xlocale */ > /* > * This is more or less stolen straight from XFree86 xterm. >@@ -1301,7 +1319,7 @@ > */ > /* PROTO */ > void >-init_xlocale(void) >+IMInstantiateCallback(Display *display, XPointer client_data, XPointer call_data) > { > #ifndef NO_XLOCALE > char *p, *s, buf[32], tmp[1024]; >@@ -1309,9 +1327,13 @@ > XIMStyle input_style = 0; > XIMStyles *xim_styles = NULL; > int found; >+ XIMCallback ximcallback; > > Input_Context = NULL; > >+ ximcallback.callback = IMDestroyCallback; >+ ximcallback.client_data = NULL; >+ > # ifndef NO_SETLOCALE > /* setlocale(LC_CTYPE, ""); */ /* XXX: should we do this? */ > # endif >@@ -1351,6 +1373,7 @@ > print_error("Failed to open input method"); > return; > } >+ XSetIMValues(xim, XNDestroyCallback, &ximcallback, NULL); > if (XGetIMValues(xim, XNQueryInputStyle, &xim_styles, NULL) || !xim_styles) { > print_error("input method doesn't support any style"); > XCloseIM(xim); >@@ -1405,6 +1428,7 @@ > Input_Context = XCreateIC(xim, XNInputStyle, input_style, > XNClientWindow, TermWin.parent, > XNFocusWindow, TermWin.parent, >+ XNDestroyCallback, &ximcallback, > NULL); > > if (Input_Context == NULL) { >@@ -1480,10 +1504,11 @@ > PrivMode((!numlock_state), PrivMode_aplKP); > } > #ifndef NO_XLOCALE >- if (!XFilterEvent(ev, *(&ev->xkey.window))) { >+ len = 0; > if (Input_Context != NULL) { > Status status_return; > >+ kbuf[0] = '\0'; > len = XmbLookupString(Input_Context, &ev->xkey, kbuf, > sizeof(kbuf), &keysym, > &status_return); >@@ -1492,8 +1517,6 @@ > sizeof(kbuf), &keysym, > &compose); > } >- } else >- len = 0; > #else /* NO_XLOCALE */ > len = XLookupString(&ev->xkey, (char *) kbuf, sizeof(kbuf), &keysym, &compose); > /* >@@ -2084,6 +2107,7 @@ > refreshed = 0; > XNextEvent(Xdisplay, &ev); > /*fprintf( stderr, "%s:%d Received event %d\n", __FUNCTION__, __LINE__, ev.type );*/ >+ if( !XFilterEvent( &ev, ev.xany.window ) ) > process_x_event(&ev); > > /* in case button actions pushed chars to cmdbuf */
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 7384
: 993