Как получить один пункт меню для правильного выравнивания, используя gtkada, но не устаревшую процедуру

Я использую GTKADA для небольшого приложения и хочу выровнять меню справки в строке меню.

Старый способ состоял в том, чтобы вызвать Set_Right_justified в новом меню, но это теперь устарело.

Очевидно, я должен иметь возможность использовать Set_Hexpand и Set_Halign, чтобы сделать это.

Код, который я сейчас использую:

with GTK.WIDGET;
procedure Add_Menu_To_Menu_Bar
 ( Menu_Bar        : in GTK.MENU_BAR.Gtk_Menu_Bar;
   Menu            : in GTK.MENU.Gtk_Menu;
   Label           : in string;
   Right_Justified : in boolean := False )
is
  New_Item : GTK.MENU_ITEM.Gtk_Menu_Item;
begin
  GTK.MENU_ITEM.Gtk_New( Menu_Item => New_Item,
                         Label     => Label );

  New_Item.Set_Right_Justified( Right_Justified => Right_Justified );

--  if Right_Justified then
--      -- Below is the recommended alternative to above
--      -- but dosn't work
--           New_Item.Set_Hexpand( Expand => true );
--           New_Item.Set_Hexpand_Set(Set => true );
--           New_Item.Set_Halign( Align  => GTK.WIDGET.Align_End );
--      -- Below does work, but only sets a fixed margin
--           New_Item.Set_Margin_Start(Margin => 40 );
--           New_Item.Set_Margin_End(Margin => 40 );
--     -- Below effects the entire menu bar
--           Menu_Bar.Set_Hexpand(Expand => true);
--           Menu_Bar.Set_Halign(Align => GTK.WIDGET.Align_End);
--  end if;


  GTK.MENU_ITEM.Show( New_Item );

  GTK.MENU_ITEM.Set_Submenu( New_Item, Menu );

  GTK.MENU_BAR.Append( Menu_Shell => Menu_Bar,
                       Child      => New_Item );

end Add_Menu_To_Menu_Bar;

NB 1. Я знаю, что это считается плохой практикой. 2. Я не использую Glade 3. Это на Windows 10, с версиями GTK и GPS GPL 2017

1 ответ

Теперь я решил эту проблему, добавив две строки меню, расположив их по разные стороны от Hbox, и добавив правильное меню с правой стороны.

Тем не менее, я все еще думаю, что это немного обломок.

NB. Результаты моих попыток показаны в виде комментариев в примере кода, в основном очевидное решение ничего не делает...

Другие вопросы по тегам