Если я правильно понимаю ваш вопрос, вы хотите:
- Избавиться от светло-серого отступа вокруг строки меню.
- Выполните вышеизложенное, не раскрывая строку меню дозаполните доступное пространство.
Поэтому режим упаковки вашего другого виджета (а именно панель кнопок под строкой меню) вступает в игру (для ясности, я буду ссылатьсядля них как button_hbox
и menu_bar
, соответственно, поскольку оба могут квалифицироваться как «панели инструментов».)
Понимание логических аргументов макета, передаваемых в gtk_box_pack_start () , имеет первостепенное значение здесь:
Первый, expand
, равен TRUE
, если виджет должен занимать пустое пространство, оставленное в его контейнере после вычисления макета.Упакованные таким образом виджеты в равной степени конкурируют за оставшееся пространство.
Второй, fill
, равен TRUE
, если виджет должен заполнять пространство макета, которое он использует, а не центрироваться внутриэто (прибывает светло-серый отступ).
Идея состоит в том, что у вас есть один (или более, но давайте сейчас придерживаться одного) главный виджет в main_vbox
, и этоВиджет упакован с expand
и fill
, установленными на TRUE
.Спутниковые виджеты вокруг него упакованы с expand
, установленным на FALSE
и fill
, установленным на TRUE
.Например:
+-------------------------------------------+
| Menu bar: expand = FALSE, fill = TRUE |
+-------------------------------------------+
| Toolbar: expand = FALSE, fill = TRUE |
+-------------------------------------------+ ^
| | |
| | | The height of this widget
| Main widget: expand = TRUE, fill = TRUE | | varies depending on the
| | | height of its container.
| | |
+-------------------------------------------+ v
| Status bar: expand = FALSE, fill = TRUE |
+-------------------------------------------+
В вашем случае, так как вы не хотите, чтобы menu_bar
заполнял доступное пространство, button_hbox
должен сделать это:
// Menu bar: satellite widget, expand = FALSE, fill = TRUE
gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0);
// Button bar: main widget, expand = TRUE, fill = TRUE
gtk_box_pack_start(GTK_BOX(main_vbox), button_hbox, TRUE, TRUE, 0);