可以通过gtk_menu_popup发布焦点显示gtk菜单吗?
我正在重构一些代码,通常需要用户单击按钮才能显示弹出菜单(它出现在按钮旁边),如果用户将鼠标hover在按钮上,我要做的就是显示弹出菜单预设持续时间的图标,如果用户移动到另一个按钮图标,则再次隐藏它。
但是,通过gtk_menu_popup
激活菜单会窃取鼠标和键盘焦点,我在尝试抓取按钮小部件的焦点方面几乎没有取得任何进展。
是否可以将焦点返回到按钮图标?
调试这个是非常麻烦的,因为gtk_menu_popup
抓住了gdk键盘和指针焦点,这阻止了用gdb踩过代码,我最终通过在VM中运行代码并使用与gdb的远程调试会话来管理它SSH。
弹出窗口可以通过一些不同的机制从原始窗口小部件中窃取焦点
- 通过瞬态窗口关系(仅当您传递
parent_menu_shell
) - 通过
gdk_pointer_grab
- 通过
gtk_grab_add
当我将parent_menu_shell
shell参数设置为NULL时,这意味着我必须撤消最后两个’抓取’,如下所示:
gdk_pointer_ungrab(GDK_CURRENT_TIME); gdk_keyboard_ungrab(GDK_CURRENT_TIME); gtk_grab_remove(menu);
这样就可以解决问题,但是弹出会暂时隐藏焦点,这也会导致问题