[Xfce4-commits] <xfce4-vala:master> Add small test program for garcon-1
Mike Massonnet
noreply at xfce.org
Sat Oct 20 19:18:01 CEST 2012
Updating branch refs/heads/master
to 1bb4b24802e857acf2f642a6dc8269606024badb (commit)
from dd1689a0b5b1a37476f817564499c7ac9096b2a3 (commit)
commit 1bb4b24802e857acf2f642a6dc8269606024badb
Author: Mike Massonnet <mmassonnet at gmail.com>
Date: Sat Oct 20 19:16:53 2012 +0200
Add small test program for garcon-1
Build an applications menu with GTK+.
Makefile.am | 1 +
tests/garcon-1.vala | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 92 insertions(+), 0 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 0987497..e29ed74 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -35,6 +35,7 @@ tests: tests.stamp
tests.stamp:
(cd tests;\
$(VALAC) --pkg=posix --pkg=$(LIBXFCE4UTIL) --vapidir=../vapi $(LIBXFCE4UTIL).vala;\
+ $(VALAC) --pkg=gtk+-2.0 --pkg=$(GARCON) --vapidir=../vapi $(GARCON).vala;\
$(VALAC) --pkg=$(XFCONF) --vapidir=../vapi $(XFCONF).vala;\
$(VALAC) --pkg=$(EXO) --vapidir=../vapi $(EXO).vala;\
)
diff --git a/tests/garcon-1.vala b/tests/garcon-1.vala
new file mode 100644
index 0000000..540cf33
--- /dev/null
+++ b/tests/garcon-1.vala
@@ -0,0 +1,91 @@
+using Gtk;
+using Garcon;
+
+public class ButtonMenu : Gtk.Button {
+
+ private Gtk.Menu menu = null;
+ private Garcon.Menu apps_menu = null;
+
+ construct {
+ this.label = "Show Menu";
+ this.clicked.connect (() => {
+ menu.popup (null, null, null, 0, Gtk.get_current_event_time ());
+ });
+
+ init_menu ();
+ }
+
+ private void init_menu () {
+
+ /* Build an apps menu */
+ try {
+ apps_menu = new Garcon.Menu.applications ();
+ apps_menu.load (null);
+ } catch (Error ex) {
+ error ("Couldn't load applications menu.");
+ }
+
+ /* Create the gtk menu */
+ menu = new Gtk.Menu ();
+ create_menu_items (menu, apps_menu);
+ menu.show_all ();
+ }
+
+ private void create_menu_items (Gtk.Menu gtk_menu, Garcon.Menu menu) {
+ unowned List<Garcon.MenuItem> items;
+ Gtk.MenuItem mi = null;
+
+ /* Retrieves menu items */
+ items = @menu.get_elements ();
+
+ /* Create gtk menu items */
+ foreach (Garcon.MenuItem item in items) {
+ if (item is Garcon.MenuItem) {
+ mi = new Gtk.MenuItem.with_label (item.get_name ());
+ mi.set_data ("command", item.get_command());
+ mi.activate.connect ((mi) => {
+ message ("execute `%s'", mi.get_data<string> ("command"));
+ });
+ }
+ else if (item is Garcon.MenuSeparator) {
+ mi = new Gtk.SeparatorMenuItem ();
+ }
+ else if (item is Garcon.Menu) {
+ Garcon.Menu submenu = (Garcon.Menu)item;
+ if (submenu.get_items () == null)
+ continue;
+
+ mi = new Gtk.MenuItem.with_label (item.get_name ());
+
+ Gtk.Menu gtk_submenu = new Gtk.Menu ();
+ create_menu_items (gtk_submenu, submenu);
+ mi.set_submenu (gtk_submenu);
+ }
+ gtk_menu.add (mi);
+ }
+ }
+}
+
+public class GtkSample : Gtk.Window {
+
+ construct {
+ this.title = "Apps Menu";
+ this.destroy.connect (() => { Gtk.main_quit (); });
+
+ var button = new ButtonMenu ();
+ this.add (button);
+ }
+
+ static int main (string[] args) {
+ Gtk.init (ref args);
+ Garcon.set_environment ("XFCE");
+
+ var sample = new GtkSample ();
+ sample.show_all ();
+
+ Gtk.main ();
+
+ return 0;
+ }
+}
+
More information about the Xfce4-commits
mailing list