rendered paste body/* vim: set sw=2 ts=2 sts=2 et: */
using Gtk;
struct SearchEngine {
public string name;
public string url;
public string icon;
}
public class EphyLocationPlus : Gtk.Entry
{
const SearchEngine[] engines = {
{ "Google", "www.google.com", "face-wink" },
{ "Youtube", "www.youtube.com", "face-smile" }
};
private void menu_item_activate_cb (Gtk.MenuItem item)
{
SearchEngine engine = item.get_data ("engine");
this.set_text (engine.url);
this.set_icon_from_icon_name (Gtk.EntryIconPosition.PRIMARY,
engine.icon);
}
private void icon_press_cb (Gtk.EntryIconPosition pos, Gdk.Event event)
{
var menu = new Gtk.Menu ();
foreach (SearchEngine engine in this.engines)
{
var item = new Gtk.ImageMenuItem.with_label (engine.icon);
item.set_data ("engine", engine);
item.activate.connect (menu_item_activate_cb);
menu.append (item);
item.show ();
}
menu.popup (null, null, null,
event.button.button, Gtk.get_current_event_time ());
}
public EphyLocationPlus ()
{
this.set_icon_from_icon_name (Gtk.EntryIconPosition.PRIMARY, "face-angel");
this.icon_press.connect (icon_press_cb);
}
}
int main (string[] args)
{
Gtk.init (ref args);
var window = new Gtk.Window (Gtk.WindowType.TOPLEVEL);
window.title = "ELP";
window.set_default_size (300, 50);
window.position = Gtk.WindowPosition.CENTER;
window.destroy.connect (Gtk.main_quit);
window.add (new EphyLocationPlus ());
window.show_all ();
Gtk.main ();
return 0;
}