聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

一月 17, 2013
» [tips] g_clear_pointer



因為在tracking一個bug,
所以要backport indicator-power這個package到ubuntu precise.
意外發現了glib在2.33之後支援的一個還滿好用的function:
g_clear_pointer()

簡言之以前的寫法,要把物件刪除再把指標設為NULL:

if (priv->object_path != NULL) {
g_free(priv->object_path);
priv->object_path = NULL;
}
現在只要一行就可以達成了

g_clear_pointer (&priv-;>object_path, g_free);
當然要backport的話作法就是相反~~

八月 19, 2009

Yuren's Info Area
yurinfore
is about »

tag cloud

» 關於 glib signal 的 callback 參數

當你自訂了一個信號時,會需要定義 callback 的參數為何。平常寫 GTK+ 時的 callback function 通常長這樣:

gboolean callback (GtkWidget *widget, GdkEvent *event, gpointer data);
所以我剛開始實作完 signal 之後,我還以為所有 callback 都長這樣 XD,但其實不是的,callback 的參數為何,其實是看 g_signal_new 時傳入的 marshaller 為何。關於 gobject marshaller 的部份可以參考 olv 長輩的《gobject 的 marshaller》。而我是直接使用 glib 給的 marshaller。我用的是 g_cclosure_marshal_VOID__VOID,而查詢 API 手冊後可得知他的 callback 參數為
void (*callback) (gpointer instance, gpointer user_data)
所以調用的的時候傳入這種參數即可,不需要 GdkEvent,因為有 GdkEvent 參數是 gtk 自行定義的 marshaller。

support:

biggo.com.tw

A Django site.