我正在研究用于显示上下文菜单的GTK代码中的缺陷。创建包含许多菜单项的菜单后,我使用gtk_menu_popup()
显示菜单。此函数采用类型GtkMenuPositionFunc
的函数指针,它允许我定位菜单。我没有在这里做任何事情,除非告诉GTK保持当前位置,但如果菜单的一部分在监视器外面(使用函数的第四个参数),则按下菜单。我的问题是,当GTK按下菜单时,菜单项的绝对位置不会改变。因此,它们的滚动位置改变,导致菜单中的滚动条。我希望菜单项的相对位置w.r.t菜单保持固定。有什么方法可以做到吗? GTK文档确实警告过这个问题,但没有说明如何修复它。有链接可供参考:
http://library.gnome.org/devel/gtk/unstable/GtkMenu.html#GtkMenuPositionFunc
编辑:我本来希望包含一些代码,但逻辑太分散了。
答案 0 :(得分:0)
如果您只想要默认行为,则无需提供定位功能。默认行为是保持当前位置,但确保菜单适合监视器,因此您只需将NULL
作为定位功能。
您还可以查看默认定位功能的编写方式:http://git.gnome.org/browse/gtk+/tree/gtk/gtkmenu.c,gtk_menu_position()
当前位于第4288行。
PS。如果您的逻辑过于分散而无法发布代码示例,那么您应该考虑清理它。
答案 1 :(得分:0)
一旦菜单被推入,我就无法找到任何方法来重新调整菜单项的滚动偏移。因此,我使用的解决方法是避免让GTK垂直推送菜单。因此,原始请求是在位置(x,y)
创建菜单但导致菜单的长度L
离开屏幕,我将菜单重新定位在(x,y-L)
我的位置函数中。同样,如果我更改y<0
,请将其设置为(x,0)
。我仍然告诉GTK推进屏幕外的任何菜单来处理左右边缘的菜单。