我正在重构一些通常需要用户单击按钮才能出现弹出菜单的代码(它出现在按钮旁边),如果用户将鼠标悬停在按钮上,我想要做的是显示弹出菜单图标保持预设的持续时间,如果用户移动到另一个按钮图标,则再次隐藏它。
但是,通过窃取鼠标和键盘焦点来激活菜单gtk_menu_popup
,我在尝试为按钮小部件获取焦点方面进展甚微。
是否可以将焦点返回到按钮图标?
调试这个结果非常麻烦,因为gtk_menu_popup
抓住了 gdk 键盘和指针焦点,这阻止了使用 gdb 单步执行代码,我最终通过在 VM 中运行代码并通过 SSH 使用 gdb 的远程调试会话来管理它.
弹出窗口可以通过几种不同的机制从原始小部件中窃取焦点
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);
这起到了作用,但焦点暂时被弹出窗口窃取,这也会导致问题