/* This file is part of * ====================================================== * * LyX, The Document Processor * * Copyright (C) 1995 Matthias Ettrich * Copyright (C) 1995-1998 The LyX team. *
*======================================================*/
#include <config.h>
#ifdef HAVE_XOPENIM // This part is the full blown Input Method manager for X11R5 and up. // For the plain-and-old-X11R4 version, see later.
// This is called after the main LyX window has been created void InitLyXLookup(Display* display, Window window)
{
xic = NULL;
// This part could be done before opening display
setlocale(LC_CTYPE,""); if (!XSupportsLocale()) {
lyxerr.debug("InitLyXLookup: X does not support this locale."); return;
} if (!XSetLocaleModifiers("")) {
lyxerr.debug("InitLyXLookup: Could not set modifiers " "for this locale."); return;
}
// This part will have to be done for each frame
xim = XOpenIM (display, NULL, NULL, NULL); if (xim) {
xic = XCreateIC (xim,
XNInputStyle, XIMPreeditNothing | XIMStatusNothing,
XNClientWindow, window,
XNFocusWindow, window,
NULL);
if (!xic) {
lyxerr.debug("InitLyXLookup: could not create " "an input context");
XCloseIM (xim);
xim = NULL;
}
} else
lyxerr.debug("InitLyXLookup: could not open " "an input method.");
// This is called instead of XLookupString() int LyXLookupString(XEvent *event, char *buffer_return, int bytes_buffer,
KeySym *keysym_return)
{ int result = 0; if (xic) { if (isDeadEvent(event, buffer_return, bytes_buffer,
keysym_return)) { return 0;
} if (XFilterEvent (event, None)) { //lyxerr.print("XFilterEvent");
*keysym_return = NoSymbol; return 0;
} if (event->type != KeyPress)
lyxerr.print("LyXLookupString: wrong event type"
+LString(event->type));
Status status_return;
result = XmbLookupString(xic, &event->xkey, buffer_return,
bytes_buffer, keysym_return,
&status_return); switch(status_return) { case XLookupBoth: //lyxerr.print("XLookupBoth"); break; case XLookupChars: //lyxerr.print("XLookupChars");
*keysym_return = NoSymbol; break; case XLookupKeySym: //lyxerr.print("XLookupKeySym");
result = 0; break; default: //lyxerr.print("default");
*keysym_return = NoSymbol;
result = 0; break;
}
} else {
result = XLookupString(&event->xkey, buffer_return,
bytes_buffer, keysym_return,
&compose_status);
} return result;
}
// This is called after the main window has been destroyed void CloseLyXLookup()
{ if (xic) {
lyxerr.debug("CloseLyXLookup: destroying input context");
XDestroyIC(xic);
XCloseIM(xim);
}
}
#else// We do not have XOpenIM, so we stick with normal XLookupString
#include <X11/Xlib.h> #include <X11/Xutil.h>
XComposeStatus compose_status={NULL,0};
// This is called after the main LyX window has been created void InitLyXLookup(Display* , Window )
{ //Nothing to do.
}
// This is called instead of XLookupString(). I this particular case, // this *is* XLookupString... int LyXLookupString(XEvent *event, char *buffer_return, int bytes_buffer,
KeySym *keysym_return)
{ return XLookupString(&event->xkey, buffer_return,
bytes_buffer, keysym_return,
&compose_status);
}
// This is called after the main window has been destroyed void CloseLyXLookup()
{ // Nothing to do
}
#endif// HAVE_XOPENIM
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.