Хорошо, так что я разобрался, как получить все ключи и ввод от мыши через X11. Я делаю что-то очень похожее в Какао на OSX.
Так что для тех, кто интересуется основами того, как я это сделал, вот, пожалуйста, и дайте мне знать, если вы видите что-то не так с логикой событий X11 ::
// Enable Capture of close box
var atom = XInternAtom(d, "WM_DELETE_WINDOW", false);
XSetWMProtocols(d, w, new IntPtr[]{atom}, 1);
bool run = true;
while (run)
{
while (X11.XPending(d) != 0)
{
X11.XPeekEvent(d, ref e);
switch (e.type)
{
case (X11.Expose):
Console.WriteLine("Window Scaled.");
break;
case (X11.ClientMessage):
Console.WriteLine("Window Closed.");
run = false;
break;
case (X11.KeyPress):
Console.WriteLine("Key pressed: " + e.KeyEvent.keycode.ToString());
//run = false;
break;
case (X11.KeyRelease):
Console.WriteLine("Key released: " + e.KeyEvent.keycode.ToString());
//run = false;
break;
case (X11.ButtonPress):
Console.WriteLine("MouseButton pressed: " + e.KeyEvent.keycode.ToString());
//run = false;
break;
case (X11.ButtonRelease):
Console.WriteLine("MouseButton released: " + e.KeyEvent.keycode.ToString());
//run = false;
break;
}
X11.XNextEvent(d, ref e);
//Console.WriteLine(e.type.ToString());
}
Console.WriteLine("Render GL frame here...");
// Cursor loc
/*IntPtr w2, w3;
int x, y, x2, y2;
uint mask;
XQueryPointer(d, w, out w2, out w3, out x, out y, out x2, out y2, out mask);
Console.WriteLine(string.Format("{0}, {1}", x, y));
Console.WriteLine(string.Format("{0}, {1}", x2, y2));*/
System.Threading.Thread.Sleep(500);
}