我正在研究我的gtk代码中显示上下文菜单的一个缺陷。在创建包含许多菜单项的菜单后,我使用gtk_menu_popup()
来显示菜单。这个函数接受一个类型为GtkMenuPositionFunc
的函数指针,它允许我定位菜单。除了告诉gtk保持当前位置之外,我在这里没有做任何事情,但是如果菜单的一部分在监视器之外(使用函数的第四个参数),请按入菜单。我的问题是,当gtk将菜单推入时,菜单项的绝对位置不会改变。因此,它们的滚动位置改变导致菜单中的滚动条。我希望菜单项的相对位置保持不变。我有办法吗?gtk文档确实警告了这个问题,但是没有说明如何修复它。有链接可供参考:
http://library.gnome.org/devel/gtk/unstable/GtkMenu.html#GtkMenuPositionFunc
编辑:我本来想包含一些代码,但是逻辑太分散了。
最佳答案
如果只需要默认行为,则不需要提供定位函数。默认行为是保持当前位置,但确保菜单适合监视器,这样您就可以通过NULL
作为定位功能。
您还可以查看如何编写默认定位功能:http://git.gnome.org/browse/gtk+/tree/gtk/gtkmenu.c,gtk_menu_position()
当前位于第4288行。
如果你的逻辑过于分散,无法发布代码样本,那么你应该考虑清理它。