Depuis ImageMenuItem
est obsolète dans GTK3 Je suis à la recherche d'un remplacement. J'ai essayé de prendre un simple MenuItem
à la place et emballé un Image
et un AccelLabel
dedans. (Voir l'exemple ci-dessous.) Bien que cela fonctionne dans son ensemble, il y a encore deux problèmes:Remplacement pour ImageMenuItem
- La touche d'accélération n'est pas affichée dans l'élément de menu.
- Il reste une grande marge à l'icône.
Dans l'exemple suivant l'élément File|Open
a été créé avec le ImageMenuItem
désapprouvée alors que l'élément File|New
était ma tentative pour obtenir le même résultat avec MenuItem
.
Que dois-je faire pour que MenuItem
ressemble à ImageMenuItem
?
class Program {
public static void Main()
{
Gtk.Application.Init();
var win = new Gtk.Window("test");
var mb = new Gtk.MenuBar();
var accels = new Gtk.AccelGroup();
win.AddAccelGroup(accels);
var fileMenu = new Gtk.MenuItem("File");
mb.Add(fileMenu);
var fileSubmenu = new Gtk.Menu();
fileMenu.Submenu = fileSubmenu;
//
// File | New
//
var fileNew = new Gtk.MenuItem();
fileSubmenu.Add(fileNew);
fileNew.AddAccelerator(
"activate", accels,
new Gtk.AccelKey(Gdk.Key.n, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible));
fileNew.Activated += (s,e) => System.Console.WriteLine("New ...");
var fileNewIcon = new Gtk.Image();
fileNewIcon.SetFromIconName("document-new", Gtk.IconSize.Menu);
var fileNewLabel = new Gtk.AccelLabel("New");
fileNewLabel.AccelWidget = fileNew;
var hbox = new Gtk.HBox(false, 4);
hbox.PackStart(fileNewIcon, false, false, 0);
hbox.PackStart(fileNewLabel, false, false, 0);
fileNew.Add(hbox);
//
// File | Open
//
var fileOpen = new Gtk.ImageMenuItem("Open", accels);
var fileOpenIcon = new Gtk.Image();
fileOpenIcon.SetFromIconName("document-open", Gtk.IconSize.Menu);
fileOpen.Image = fileOpenIcon;
fileOpen.AddAccelerator(
"activate", accels,
new Gtk.AccelKey(Gdk.Key.o, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible));
fileOpen.Activated += (s,e) => System.Console.WriteLine("Open ...");
fileSubmenu.Add(fileOpen);
win.Add(mb);
win.ShowAll();
win.DeleteEvent += (s,e) => Gtk.Application.Quit();
Gtk.Application.Run();
}
}
Ok, 'fileSubmenu.ReserveToggleSize = false;' fonctionne. Mais l'accélérateur (qui serait 'fileNewLabel.Xalign = 0.0f;') n'est pas montré ... –
Désolé, j'ai raté que vous avez ajouté les éléments à l'hboy différemment, l'a réparé. – Kyto
Hmm ... ne fonctionne pas. Je crains de ne pas comprendre ce que l'emballage de la boîte a à voir avec la visibilité de la touche accélératrice. –