GTK使用GSEAL
選項來阻止某些人訪問Widget-struct。 這很好,因爲在C中的客觀編程,你應該使用像其他語言一樣的get函數。如何從gtk小部件訪問'gseal'值|修改GtkWidgets
由於GtkButton
的每個值都沒有獲得函數,所以在修改我自己的GtkWidgets
時遇到了一些問題。
我希望獲得這些值struct _GtkButton
struct _GtkButton
{
....
guint GSEAL (activate_timeout);
guint GSEAL (in_button) : 1;
guint GSEAL (button_down) : 1;
....
}
我想補充一個on-click
事件mybutton
,取消單擊事件他們將被調用之前,所以我決定重新實現:
static void gtk_real_button_pressed(GtkButton *button)
{
if (button->activate_timeout)
return;
button->button_down = TRUE;
gtk_button_update_state(button);
}
static void gtk_real_button_released(GtkButton *button)
{
if (button->button_down)
{
button->button_down = FALSE;
if (button->activate_timeout)
return;
if (button->in_button)
{
// do my own stuff here and maybe don'tcall "gtk_button_clicked(...)"
gtk_button_clicked(button);
}
gtk_button_update_state(button);
}
}
正如我在頂部所說的,我現在需要訪問button->in_button
例如。任何人都有線索,可以幫助我嗎? :)
的方式:
guint GSEAL (button_down) : 1;
我想不出什麼在這種情況下使用: 1
。 :O
剛發現一個解決方案。我會在6個小時內發佈它,因爲我有10個聲望:O xD – 2013-03-22 13:48:04
「:1」意味着只有一個類型的位將被使用,編譯器應該嘗試更緊密地打包結構儘可能。 – ebassi 2013-03-22 14:29:17
thx的信息, 實際上通過挖掘debuger中的內存找到了自己:) – 2013-03-22 14:57:22