GTK:定位上下文菜单项w.r.t上下文菜单

时间:2010-07-27 08:28:15

标签: c linux gtk

我正在研究用于显示上下文菜单的GTK代码中的缺陷。创建包含许多菜单项的菜单后,我使用gtk_menu_popup()显示菜单。此函数采用类型GtkMenuPositionFunc的函数指针,它允许我定位菜单。我没有在这里做任何事情,除非告诉GTK保持当前位置,但如果菜单的一部分在监视器外面(使用函数的第四个参数),则按下菜单。我的问题是,当GTK按下菜单时,菜单项的绝对位置不会改变。因此,它们的滚动位置改变,导致菜单中的滚动条。我希望菜单项的相对位置w.r.t菜单保持固定。有什么方法可以做到吗? GTK文档确实警告过这个问题,但没有说明如何修复它。有链接可供参考:

http://library.gnome.org/devel/gtk/unstable/GtkMenu.html#GtkMenuPositionFunc

编辑:我本来希望包含一些代码,但逻辑太分散了。

2 个答案:

答案 0 :(得分:0)

如果您只想要默认行为,则无需提供定位功能。默认行为是保持当前位置,但确保菜单适合监视器,因此您只需将NULL作为定位功能。

您还可以查看默认定位功能的编写方式:http://git.gnome.org/browse/gtk+/tree/gtk/gtkmenu.cgtk_menu_position()当前位于第4288行。

PS。如果您的逻辑过于分散而无法发布代码示例,那么您应该考虑清理它。

答案 1 :(得分:0)

一旦菜单被推入,我就无法找到任何方法来重新调整菜单项的滚动偏移。因此,我使用的解决方法是避免让GTK垂直推送菜单。因此,原始请求是在位置(x,y)创建菜单但导致菜单的长度L离开屏幕,我将菜单重新定位在(x,y-L)我的位置函数中。同样,如果我更改y<0,请将其设置为(x,0)。我仍然告诉GTK推进屏幕外的任何菜单来处理左右边缘的菜单。