2

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

但是,通过窃取鼠标和键盘焦点来激活菜单gtk_menu_popup,我在尝试为按钮小部件获取焦点方面进展甚微。

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

4

1 回答 1

2

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

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

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

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

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

这起到了作用,但焦点暂时被弹出窗口窃取,这也会导致问题

于 2012-10-07T15:08:52.007 回答