首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X11,使用XSendEvent发送事件(3)

X11,使用XSendEvent发送事件(3)
EN

Stack Overflow用户
提问于 2011-06-20 20:38:46
回答 1查看 2.2K关注 0票数 2

我在一个Motif窗口中嵌入了一个X11应用程序(xterm)。一切似乎都很正常,但如果我在指针不在嵌入式应用程序上方时按下一个键,它就不会得到它。为了解决这个问题,我更改了主应用程序的主循环。现在是这样的:

代码语言:javascript
复制
  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

EN

回答 1

Stack Overflow用户

发布于 2011-06-20 20:51:56

首先,你假设XQueryTree只返回一个子窗口--也许它返回了多个子窗口,而你把事件传递给了错误的子窗口?

我也不确定围绕XQueryTree调用的while循环是为了什么。

一旦完成子窗口列表,您还应该调用XFree来释放它,否则将会泄漏内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6411259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档