Motif ウィンドウに X11 アプリ (xterm) を埋め込みました。すべて正常に動作しているように見えますが、ポインターが埋め込みアプリの上にないときにキーを押すと、キーが取得されません。これを修正しようとして、メインアプリのメインループを変更しました。今では次のようになっています。
XEvent ev;
for (;;)
{
XtAppNextEvent (app, &ev);
/* If the event is a keypress, send it to
* the xterm window. Else, dispatch it.
*/
Window *xtW = NULL, parent, _root;
unsigned int noC;
if (ev.type == KeyPress || ev.type == KeyRelease)
{
#ifdef DEBUG
fprintf (stderr, "Key event\n");
#endif
while (xtW == NULL)
XQueryTree (XtDisplay (drawW), XtWindow (drawW), &_root,
&parent, &xtW, &noC);
XSendEvent (XtDisplay (drawW), *xtW, True,
(KeyPressMask | KeyReleaseMask), &ev);
XFlush (XtDisplay (drawW));
#ifdef DEBUG
fprintf (stderr, "sent key event\n");
#endif
}
else
XtDispatchEvent (&ev);
}
埋め込まれた xterm の外でキーを押すと、デバッグ行が出力されますが、xterm は送信したキーを出力しません。
どうすればこれを修正できますか? 必要に応じて、コードを投稿します。
--mghis