Я встроил приложение X11 (xterm) в окно Motif.Кажется, что все работает нормально, но если я нажимаю клавишу, когда указатель не находится над встроенным приложением, он не получает его.Пытаясь это исправить, я изменил основной цикл основного приложения.Теперь это выглядит так:
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