Существует возможность вручную обходить управление геометрией Gtk+. Это плохая идея в 95% случаев, потому что геометрия Gtk+ -- это в основном геометрия, предпочитаемая пользователем, определяемая темой, и изменением размеров окон верхнего уровня. Если вы вдруг захотите сделать эти вещи вручную, вероятно это потому, что вы используете не тот контейнер раскладки, или действительно должны будете написать свой собственный виджет-контейнер.
Вы можете заставить виджет принять нужные размеры и положение функциями, приведенными в списке функций 3..6. Однако, они редко могут понадобиться. В частности, "gtk_widget_set_usize()" не должна использоваться, чтобы установить размер по умолчанию виджета верхнего уровня. Обычно вы хотите установить размер окна, потому что сохранили состояние приложение и восстанавливаете его, или потому что пользователь указал геометрию окна в командной строке. К несчастью, если вы воспользуетесь "gtk_widget_set_usize()", пользователь не сможет уменьшить размеры окна, и вы получите по почте послание, полное ненависти. Вместо того, чтобы принудительно выставить размер, вы захотите указать начальный размер функцией "gtk_window_set_default_size()", показанной в списке функций 3..7. "gtk_widget_set_usize()" почти не используется и для виджетов верхнего уровня; в большинстве случаев вы получите лучшие результаты, использовав правильный виджет раскладки.
"gtk_widget_set_uposition()" можно использовать только для окон верхнего уровня; она почти не влияет на другие виджеты, и почти наверное приведет к плохим результатам. Ее основное назначение -- обслуживать аргумент командной строки -geometry.
Все три этих функции могут принять -1 в качестве аргументов x, y, width или height. Функции игнорируют любой из аргументов равный -1; это позволяет вам установить только один или два аргумента, оставляя остальным аргументам их значения по умолчанию.
void gtk_widget_set_uposition(GtkWidget *widget,
gint x, gint y)
void gtk_widget_set_usize(GtkWidget *widget,
gint width, gint height)
void gtk_window_set_default_size(GtkWindow *window,
gint width, gint height)