Skip to content

Instantly share code, notes, and snippets.

@3v1n0
Created October 14, 2011 22:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 3v1n0/1288553 to your computer and use it in GitHub Desktop.
Save 3v1n0/1288553 to your computer and use it in GitHub Desktop.
Test bad menu files with Unity
using Gtk;
const string win_ui = """
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<object class="GtkWindow" id="window">
<property name="can_focus">False</property>
<property name="border_width">10</property>
<property name="title" translatable="yes">Sample Application</property>
<property name="window_position">center</property>
<property name="default_width">300</property>
<property name="default_height">70</property>
<signal name="destroy" handler="gtk_main_quit" swapped="no"/>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<child>
<object class="GtkMenuBar" id="main_menu">
<property name="visible">True</property>
<child>
<object class="GtkMenuItem" id="menuitem1">
<property name="visible">True</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menuitem1_menu">
<child>
<object class="GtkImageMenuItem" id="reload">
<property name="label">_Reload</property>
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<accelerator key="R" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="edit_timelog">
<property name="label">_Edit timelog.txt</property>
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<accelerator key="E" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="main_quit">
<property name="label">gtk-quit</property>
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<accelerator key="q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuItem" id="view1">
<property name="visible">True</property>
<property name="label" translatable="yes">_View</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="view1_menu">
<child>
<object class="GtkRadioMenuItem" id="chronological">
<property name="visible">True</property>
<property name="label" translatable="yes">_Chronological</property>
<property name="use_underline">True</property>
<accelerator key="1" signal="activate" modifiers="GDK_MOD1_MASK"/>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="grouped">
<property name="visible">True</property>
<property name="label" translatable="yes">_Grouped</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<property name="group">chronological</property>
<accelerator key="2" signal="activate" modifiers="GDK_MOD1_MASK"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="separator2">
<property name="visible">True</property>
</object>
</child>
<child>
<object class="GtkCheckMenuItem" id="show_task_pane">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Tasks</property>
<property name="use_underline">True</property>
<property name="active">True</property>
<accelerator key="F9" signal="activate"/>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">4</property>
<property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
<child>
<object class="GtkButton" id="button1">
<property name="label" translatable="yes">Click me!</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<accelerator key="F8" signal="clicked"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button2">
<property name="label" translatable="yes">Me too!</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</interface>
""";
int main (string[] args) {
Gtk.init (ref args);
try {
var builder = new Builder ();
builder.add_from_string(win_ui, -1);
builder.connect_signals (null);
(builder.get_object("button1") as Button).clicked.connect((b) => {
message("BUtton 1 clicked");
});
(builder.get_object("button2") as Button).clicked.connect((b) => {
message("BUtton 2 clicked");
});
(builder.get_object("reload") as MenuItem).activate.connect((m) => {
message(@"Clicked on menu-item '$(m.label)'");
});
(builder.get_object("edit_timelog") as MenuItem).activate.connect((m) => {
message(@"Clicked on menu-item '$(m.label)'");
});
(builder.get_object("main_quit") as MenuItem).activate.connect((m) => {
message(@"Clicked on menu-item '$(m.label)'");
});
(builder.get_object("reload") as MenuItem).activate.connect((m) => {
message(@"Clicked on menu-item '$(m.label)'");
});
(builder.get_object("chronological") as MenuItem).activate.connect((m) => {
message(@"Clicked on menu-item '$(m.label)'");
});
(builder.get_object("grouped") as MenuItem).activate.connect((m) => {
message(@"Clicked on menu-item '$(m.label)'");
});
(builder.get_object("show_task_pane") as MenuItem).activate.connect((m) => {
message(@"Clicked on menu-item '$(m.label)'");
});
var window = builder.get_object ("window") as Window;
message("WIndow is %p".printf(window));
message("Main menu is %p".printf(builder.get_object("main_menu")));
window.show_all ();
Gtk.main ();
} catch (Error e) {
stderr.printf ("Could not load UI: %s\n", e.message);
return 1;
}
return 0;
}
/* Compile me with badunitymenus.vala */
using Gtk;
int main (string[] args) {
Gtk.init (ref args);
var window = new Window ();
window.title = "Bad Menus testing app";
window.set_default_size (300, 200);
window.destroy.connect (Gtk.main_quit);
var vbox = new Box(Orientation.VERTICAL, 10);
var key_group = new AccelGroup();
var menubar = new MenuBar();
var submenu = new Menu();
var testmenu = new MenuItem.with_label("Test Menu");
var submenuitem = new MenuItem.with_label("SUbTest");
submenuitem.add_accelerator("activate", key_group, 0x0072,
Gdk.ModifierType.CONTROL_MASK, AccelFlags.VISIBLE);
submenuitem.activate.connect(() => {message("GOt click over menu!");});
submenu.add(submenuitem);
testmenu.set_submenu(submenu);
menubar.add(testmenu);
vbox.add(menubar);
vbox.add(new Label("Hey, press Ctrl+R and test how I'm broken! ;)"));
window.add(vbox);
window.add_accel_group(key_group);
window.show_all ();
Gtk.main ();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment