2008年12月15日 星期一

改變 GtkWidget 的 parent

Standard
GTK程式通常是由一個個 Object 所堆積起來,所以 GtkWidget 和 container 都記錄著 parent/child (父/子)的關係。又因為一個 GtkWidget 不能同時擁有兩個 parent,通常,所有的父子關係都是在程式初始化時就被決定好。然而在某些情況,為節省功夫或記憶體,我們會想重覆利用一個 GtkWidget 或是某 container 之下整個體系的成員,而不是重覆描繪類似或一模一樣的介面內容。

遇上這種需求,GTK 提供了一個 function call 可去改變 Widget 的 parent:
void gtk_widget_reparent(GtkWidget *widget, GtkWidget *new_parent)


當然,重新被賦予 parent 的 Widget 會被當成最後一個 child widget,換句話說,若是在 Box 中,會被排列顯示在最後,這時我們可以用此 function 去調整其 widget 在 box 中的位置:
void gtk_box_reorder_child(GtkBox *box, GtkWidget *child, gint position)


後記

一個簡單的小技巧,在此筆記之。