【问题标题】:GTK: positioning context menu items w.r.t context menuGTK:定位上下文菜单项 w.r.t 上下文菜单
【发布时间】:2010-07-27 08:28:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: c linux gtk


    【解决方案1】:

    如果您只想要默认行为,则不需要提供定位功能。默认行为是保持当前位置,但确保菜单适合显示器,因此您可以将NULL 作为定位函数。

    你也可以看看默认定位函数是怎么写的:http://git.gnome.org/browse/gtk+/tree/gtk/gtkmenu.c,gtk_menu_position()目前在第4288行。

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

    【讨论】:

    • 传递NULL 并不是一个真正的选择,因为它在某些情况下使用。我尝试为这种特定情况传递NULL 并解决了问题。这是否意味着我不能要求 GTK 重新定位菜单,并且如果菜单超出屏幕,也不能要求它将菜单推入内部?这似乎不太可能。
    • 我包含了源代码的链接,以便您可以复制默认定位功能并从那里开始。如果 GTK 可以做你想做的,那么你也可以。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多