Как только ваш виджет будет реализован (учитывая размер в зависимости от того, что может предоставить его родительский контейнер), вы сможете получить эти значения с widget->allocation.width
и widget->allocation.height
.
Нет ничего плохого в том, как это делает gtk. Есть разница между тем, какой размер хочет видеть виджет, и каким размером он на самом деле становится. Поэтому время чтения этих значений важно. Наличие методов get для этих переменных не изменит того факта, что они еще не инициализированы.
Обычный способ обойти это - подключиться к сигналу size-allocate
, который излучается, когда виджет получает новый фактический размер. Примерно так:
void my_getsize(GtkWidget *widget, GtkAllocation *allocation, void *data) {
printf("width = %d, height = %d\n", allocation->width, allocation->height);
}
И где-нибудь в вашем основном цикле подключите сигнал:
g_signal_connect(mywidget, "size-allocate", G_CALLBACK(my_getsize), NULL);