2010-04-21 79 views
0

我加入一个GtkVBox到GtkViewPort。
而我做基于两个向上/向下按钮滚动的GtkViewPort。憋屈滚动GtkViewPort结束

我需要我们在消息聊天屏都显示在VBox中最后一个项目(消息聊天列表显示在列表的底部/添加最新的聊天消息)我做确切的事情。

所以在GtkViewPort我在地图事件调用做回底部滚动

GtkAdjustment* adjustment; 
adjustment = gtk_viewport_get_vadjustment(GTK_VIEWPORT(viewport_list)); 
gtk_adjustment_set_value(adjustment, gtk_adjustment_get_upper(adjustment)); 

因此,这工作得很好。它最后在Vbox中显示最新添加的小部件。

一些外部事件我添加新的小工具,我的垂直框中,然后再次拨打上面的代码,以显示这些新添加的窗口小部件。首先添加它不会滚动,但在第二次添加到VBOX它滚动到列表中的第二个最后一个小部件。

为什么这可能发生。
它有滚动GtkViewPort到另一种方式?

感谢您的阅读:)

回答

2

这是非常可能发生,因为当你运行你的代码,该GtkVBox一直没有时间来成长,和/或含视一直没有时间重新计算调整的新上限。

正如我在这个问题的另一个版本中所建议的那样,您应该听取来自GtkVBox的size-allocate信号以知道何时重新尝试跳到底部。

如果这不起作用(我还没有尝试过这种确切的情况),你可以尝试连接到GtkAdjustment本身的changed信号。这将伴随着一些简单的缓冲,让您确定何时GtkAdjustment的“上限”增加,这正是您想要将调整值更改为新上限的时间。