可以通过gtk_menu_popup发布焦点显示gtk菜单吗?

我正在重构一些代码,通常需要用户单击按钮才能显示弹出菜单(它出现在按钮旁边),如果用户将鼠标hover在按钮上,我要做的就是显示弹出菜单预设持续时间的图标,如果用户移动到另一个按钮图标,则再次隐藏它。

但是,通过gtk_menu_popup激活菜单会窃取鼠标和键盘焦点,我在尝试抓取按钮小部件的焦点方面几乎没有取得任何进展。

是否可以将焦点返回到按钮图标?

调试这个是非常麻烦的,因为gtk_menu_popup抓住了gdk键盘和指针焦点,这阻止了用gdb踩过代码,我最终通过在VM中运行代码并使用与gdb的远程调试会话来管理它SSH。

弹出窗口可以通过一些不同的机制从原始窗口小部件中窃取焦点

  1. 通过瞬态窗口关系(仅当您传递parent_menu_shell
  2. 通过gdk_pointer_grab
  3. 通过gtk_grab_add

当我将parent_menu_shell shell参数设置为NULL时,这意味着我必须撤消最后两个’抓取’,如下所示:

 gdk_pointer_ungrab(GDK_CURRENT_TIME); gdk_keyboard_ungrab(GDK_CURRENT_TIME); gtk_grab_remove(menu); 

这样就可以解决问题,但是弹出会暂时隐藏焦点,这也会导致问题