2010-04-21 81 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的「上限」增加,這正是您想要將調整值更改爲新上限的時間。