All pastes #1947221 Raw Edit

diego

public text v1 · immutable
#1947221 ·published 2010-09-23 08:58 UTC
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;
}