namespace System.Windows.Forms {
+ public enum XLookupStatus
+ {
+ XBufferOverflow = -1,
+ XLookupNone = 1,
+ XLookupChars = 2,
+ XLookupKeySym = 3,
+ XLookupBoth = 4
+ }
+
internal class X11Keyboard : IDisposable {
internal static object XlibLock;
{
if (XplatUI.key_filters.Count == 0)
return false;
- IntPtr status;
+ XLookupStatus status;
XKeySym ks;
KeyFilterData data;
data.Down = (e.type == XEventName.KeyPress);
XKeySym keysym;
int ascii_chars;
- IntPtr status = IntPtr.Zero;
+ XLookupStatus status;
ascii_chars = LookupString (ref xevent, 24, out keysym, out status);
if (((int) keysym >= (int) MiscKeys.XK_ISO_Lock &&
int event_time = (int)xevent.KeyEvent.time;
- if (status == (IntPtr) 2) {
+ if (status == XLookupStatus.XLookupChars) {
// do not ignore those inputs. They are mostly from XIM.
msg = SendImeComposition (lookup_buffer.ToString (0, lookup_buffer.Length));
msg.hwnd = hwnd;
}
XKeySym t;
- IntPtr status;
+ XLookupStatus status;
int res = LookupString (ref e, 24, out t, out status);
int keysym = (int) t;
public int EventToVkey (XEvent e)
{
- IntPtr status;
+ XLookupStatus status;
XKeySym ks;
LookupString (ref e, 0, out ks, out status);
e2.KeyEvent.keycode = keyc;
XKeySym t;
- IntPtr status;
+ XLookupStatus status;
LookupString (ref e2, 0, out t, out status);
keysym = (uint) t;
private bool have_Xutf8LookupString = true;
- private int LookupString (ref XEvent xevent, int len, out XKeySym keysym, out IntPtr status)
+ private int LookupString (ref XEvent xevent, int len, out XKeySym keysym, out XLookupStatus status)
{
IntPtr keysym_res;
int res;
- status = IntPtr.Zero;
+ status = XLookupStatus.XLookupNone;
IntPtr xic = GetXic (client_window);
if (xic != IntPtr.Zero && have_Xutf8LookupString && xevent.type == XEventName.KeyPress) {
do {
// call again, this time we'll go through the non-xic clause
return LookupString (ref xevent, len, out keysym, out status);
}
- if ((int) status != -1) // XLookupBufferOverflow
+ if (status != XLookupStatus.XBufferOverflow)
break;
lookup_byte_buffer = new byte [lookup_byte_buffer.Length << 1];
} while (true);
[DllImport ("libX11")]
internal extern static int XLookupString(ref XEvent xevent, StringBuilder buffer, int num_bytes, out IntPtr keysym, out IntPtr status);
[DllImport ("libX11")]
- internal extern static int Xutf8LookupString(IntPtr xic, ref XEvent xevent, byte [] buffer, int num_bytes, out IntPtr keysym, out IntPtr status);
+ internal extern static int Xutf8LookupString(IntPtr xic, ref XEvent xevent, byte [] buffer, int num_bytes, out IntPtr keysym, out XLookupStatus status);
[DllImport ("libX11")]
private static extern IntPtr XGetKeyboardMapping (IntPtr display, byte first_keycode, int keycode_count,