MenuButton

The GtkMenuButton widget is used to display a menu when clicked on. This menu can be provided either as a GtkMenu, or an abstract GMenuModel. The GtkMenuButton widget can hold any valid child widget. That is, it can hold almost any other standard GtkWidget. The most commonly used child is the provided GtkArrow.

You need to be running GNOME 3.6 for the MenuButton to work.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public class MyWindow : Gtk.ApplicationWindow {

	internal MyWindow (MyApplication app) {
		Object (application: app, title: "MenuButton Example");
		this.set_default_size (600, 400);
		var grid = new Gtk.Grid ();

		var menubutton = new Gtk.MenuButton();
		menubutton.set_size_request (80, 35);

		var menumodel = new Menu ();
		menumodel.append ("New", "app.new");
		menumodel.append ("About", "win.about");

		/* We create the last item as a MenuItem, so that
		 * a submenu can be appended to this menu item.
		 */
		var submenu = new Menu ();
		menumodel.append_submenu ("Other", submenu);
		submenu.append ("Quit", "app.quit");
		menubutton.set_menu_model (menumodel);

		var about_action = new SimpleAction ("about", null);
		about_action.activate.connect (this.about_cb);
		this.add_action (about_action);

		this.add(grid);
		grid.attach(menubutton, 0, 0, 1, 1);
	}

	void about_cb (SimpleAction simple, Variant? parameter) {
		print ("You clicked \"About\"\n");
	}
}

public class MyApplication : Gtk.Application {
	protected override void activate () {
		new MyWindow (this).show_all ();
	}

	internal MyApplication () {
		Object (application_id: "org.example.MyApplication");
	}

	/* Override the 'startup' signal of GLib.Application. */
	protected override void startup () {
		base.startup ();

		var new_action = new SimpleAction ("new", null);
		new_action.activate.connect (this.new_cb);
		this.add_action (new_action);

		var quit_action = new SimpleAction ("quit", null);
		quit_action.activate.connect (this.quit);
		this.add_action (quit_action);
	}

	void new_cb (SimpleAction simple, Variant? parameter) {
		print ("You clicked \"New\"\n");
	}
}

public int main (string[] args) {
	return new MyApplication ().run (args);
}

In this sample we used the following: