Доброй ночи! Я начал знакомиться с GTK 1.2 и возникла такая проблемка с созданием окошек, в которых все виджеты сами занимают доступное место в правильном порядке:
Имеется упакованные в vbox (1) несколько фреймов. В одном фрейме (2) упаковка (в vbox) из нескольких hbox (3), в каждом из которых два элемента упакованы в начале (слева), без равномерного размещения и растяжения, а один (4) - в конце (справа). Последний является hbox'ом, в котором есть равномерно (expand=TRUE) упакованные кнопка-флажок (checkbutton) (5) и vbox (6). Когда флажок-5 установлен, vbox-6 видимый (show). Когда флажок-5 сброшен, vbox-6 невидимый (hide).
Проблема в следующем: т.к. изначально все vbox-6 невидимые, то все флажки-5 находятся на одной линии по вертикали (прижаты к правому краю окна). Все остальные элементы горизонтальных упаковок (hbox-3) разного размера. Когда устанавливается какой-либо флажок-5, то появляется vbox-6 и весь hbox-4, прижатый к правому краю смещается влево, если есть место, либо растягивает все окно вправо. Т.е. когда не все флажки-5 установлены, то они не обязательно находятся на одной вертикальной линии. Далее, если после растяжения окна сбросить флажок-5, то он не вернется к правому краю, а останется где-то посередине между старым положением и правым краем. Если изменить размеры окна, то все придет в норму.
Данное поведение мне не нравится. Что предпринять для повышения единообразия?
1. Для возврата вправо наверное надо послать событие типа OnResize в виндовой терминологии. Только как подобное событие тут называется и кому его слать (окну?). Я пробовал перерисовывать окно, но это не помогает.
2. Хотелось бы, чтобы при появлении/исчезновении vbox-6 элементы не скакали в окне. Т.е. чтобы изначально все распологалось как надо (vbox-6 не виден, но он как бы есть, вместо него пустое место). Как это сделать, не высчитывая размер vbox-6 в пикселях? Можно конечно, привязать все к табличной разметке (table) внутри hbox-3, но это ведь все равно привязка к размерам (которые, в принципе, могут и поменяться).