代码之家  ›  专栏  ›  技术社区  ›  341008 Sylvain

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

  •  2
  • 341008 Sylvain  · 技术社区  · 14 年前

    我正在研究GTK代码中显示上下文菜单的缺陷。在创建包含许多菜单项的菜单后,我使用 gtk_menu_popup() 显示菜单。此函数接受类型为的函数指针 GtkMenuPositionFunc 这样我就可以定位菜单了。除了告诉GTK保持当前位置之外,我在这里什么都不做,但是如果菜单的一部分在监视器之外(使用函数的第四个参数),请将菜单推入。我的问题是,当GTK将菜单推入时,菜单项的绝对位置不会改变。因此,它们的滚动位置会发生变化,导致菜单中出现滚动条。我希望菜单项的相对位置保持不变。我有什么办法可以做到吗?GTK文档没有警告这个问题,但是没有说明如何解决它。有链接可供参考:

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

    编辑:我本来想包括一些代码,但是逻辑太分散了。

    2 回复  |  直到 14 年前
        1
  •  0
  •   ptomato    14 年前

    如果只需要默认行为,则不需要提供定位功能。默认行为是保持当前位置,但确保菜单适合监视器,这样您就可以通过 NULL 作为定位功能。

    您还可以查看默认定位功能的编写方式: http://git.gnome.org/browse/gtk+/tree/gtk/gtkmenu.c , gtk_menu_position() 目前在4288线。

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

        2
  •  0
  •   341008 Sylvain    14 年前

    我找不到任何方法来重新调整菜单项的滚动偏移,一旦菜单被推入。所以,我使用的解决方法是避免让GTK垂直地推菜单。因此,最初的请求是在位置创建菜单 (x,y) 但导致了长度 L 在屏幕外的菜单中,我将菜单重新定位到 (x,y-L) 在我的位置功能。同样,如果 y<0 我把它改成 (x,0) . 我仍然告诉GTK在屏幕外输入任何菜单,以处理左右边缘的菜单。