<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -28,6 +28,9 @@
 #include &lt;gtk/gtkstock.h&gt;
 #include &lt;gtk/gtkaboutdialog.h&gt;
 #include &lt;gtk/gtkfilechooserdialog.h&gt;
+#include &lt;gtk/gtkentry.h&gt;
+#include &lt;gtk/gtktoolbar.h&gt;
+#include &lt;string.h&gt;
 
 #include &quot;git-main-window.h&quot;
 #include &quot;git-source-view.h&quot;
@@ -62,6 +65,9 @@ static void git_main_window_on_back (GtkAction *action,
 static void git_main_window_on_forward (GtkAction *action,
 					GitMainWindow *main_window);
 
+static void git_main_window_on_revision (GtkEntry *entry,
+					 GitMainWindow *main_window);
+
 G_DEFINE_TYPE (GitMainWindow, git_main_window, GTK_TYPE_WINDOW);
 
 #define GIT_MAIN_WINDOW_GET_PRIVATE(obj) \
@@ -70,7 +76,8 @@ G_DEFINE_TYPE (GitMainWindow, git_main_window, GTK_TYPE_WINDOW);
 
 struct _GitMainWindowPrivate
 {
-  GtkWidget *statusbar, *source_view, *commit_dialog, *file_dialog;
+  GtkWidget *revision_bar, *source_view, *statusbar;
+  GtkWidget *commit_dialog, *file_dialog;
 
   guint source_state_context;
   guint source_state_id;
@@ -78,6 +85,7 @@ struct _GitMainWindowPrivate
   guint commit_selected_handler;
   guint commit_response_handler;
   guint file_response_handler;
+  guint revision_activated_handler;
 
   GList *history;
   GList *history_pos;
@@ -163,8 +171,25 @@ git_main_window_init (GitMainWindow *self)
 			    FALSE, FALSE, 0);
 
       if ((widget = gtk_ui_manager_get_widget (ui_manager, &quot;/toolbar&quot;)))
-	gtk_box_pack_start (GTK_BOX (layout), widget,
-			    FALSE, FALSE, 0);
+	{
+	  GtkToolItem *tool_item = gtk_tool_item_new ();
+
+	  gtk_box_pack_start (GTK_BOX (layout), widget,
+			      FALSE, FALSE, 0);
+
+	  priv-&gt;revision_bar = g_object_ref_sink (gtk_entry_new ());
+	  priv-&gt;revision_activated_handler
+	    = g_signal_connect (priv-&gt;revision_bar, &quot;activate&quot;,
+				G_CALLBACK (git_main_window_on_revision),
+				self);
+	  gtk_widget_show (priv-&gt;revision_bar);
+	  gtk_container_add (GTK_CONTAINER (tool_item), priv-&gt;revision_bar);
+	  gtk_tool_item_set_expand (tool_item, TRUE);
+	  gtk_tool_item_set_tooltip_text (tool_item,
+					  _(&quot;Revision&quot;));
+	  gtk_widget_show (GTK_WIDGET (tool_item));
+	  gtk_toolbar_insert (GTK_TOOLBAR (widget), tool_item, -1);
+	}
 
       accel_group = gtk_ui_manager_get_accel_group (ui_manager);
       gtk_window_add_accel_group (GTK_WINDOW (self), accel_group);
@@ -212,12 +237,6 @@ git_main_window_dispose (GObject *object)
   GitMainWindow *self = (GitMainWindow *) object;
   GitMainWindowPrivate *priv = self-&gt;priv;
 
-  if (priv-&gt;statusbar)
-    {
-      g_object_unref (priv-&gt;statusbar);
-      priv-&gt;statusbar = NULL;
-    }
-
   if (priv-&gt;source_view)
     {
       g_signal_handler_disconnect (priv-&gt;source_view,
@@ -228,6 +247,20 @@ git_main_window_dispose (GObject *object)
       priv-&gt;source_view = NULL;
     }
 
+  if (priv-&gt;revision_bar)
+    {
+      g_signal_handler_disconnect (priv-&gt;revision_bar,
+				   priv-&gt;revision_activated_handler);
+      g_object_unref (priv-&gt;revision_bar);
+      priv-&gt;revision_bar = NULL;
+    }
+
+  if (priv-&gt;statusbar)
+    {
+      g_object_unref (priv-&gt;statusbar);
+      priv-&gt;statusbar = NULL;
+    }
+
   if (priv-&gt;commit_dialog)
     {
       g_signal_handler_disconnect (priv-&gt;commit_dialog,
@@ -291,6 +324,10 @@ git_main_window_do_set_file (GitMainWindow *main_window,
   if (priv-&gt;source_view)
     git_source_view_set_file (GIT_SOURCE_VIEW (priv-&gt;source_view),
 			      filename, revision);
+
+  if (priv-&gt;revision_bar)
+    gtk_entry_set_text (GTK_ENTRY (priv-&gt;revision_bar),
+			revision ? revision : &quot;&quot;);
 }
 
 static void
@@ -416,6 +453,10 @@ git_main_window_update_history_actions (GitMainWindow *main_window)
   if (priv-&gt;forward_action)
     gtk_action_set_sensitive (priv-&gt;forward_action,
 			      priv-&gt;history_pos &amp;&amp; priv-&gt;history_pos-&gt;next);
+
+  if (priv-&gt;revision_bar)
+    gtk_widget_set_sensitive (priv-&gt;revision_bar,
+			      priv-&gt;history_pos != NULL);
 }
 
 static void
@@ -650,3 +691,20 @@ git_main_window_on_forward (GtkAction *action,
       git_main_window_update_history_actions (main_window);
     }
 }
+
+static void
+git_main_window_on_revision (GtkEntry *entry,
+			     GitMainWindow *main_window)
+{
+  GitMainWindowPrivate *priv = main_window-&gt;priv;
+
+  if (priv-&gt;history_pos)
+    {
+      GitMainWindowHistoryItem *item
+	= (GitMainWindowHistoryItem *) priv-&gt;history_pos-&gt;data;
+      const gchar *revision = gtk_entry_get_text (entry);
+
+      git_main_window_set_file (main_window, item-&gt;filename,
+				strlen (revision) ? revision : NULL);
+    }  
+}</diff>
      <filename>src/git-main-window.c</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>545c1d4704e00a5791fb667f78caf12cd29bea28</id>
    </parent>
  </parents>
  <author>
    <name>Neil Roberts</name>
    <email>neil@o-hand.com</email>
  </author>
  <url>http://github.com/bpeel/blame-browse/commit/75e3e5816ffaa1a4230a41ad6204becf0f05bada</url>
  <id>75e3e5816ffaa1a4230a41ad6204becf0f05bada</id>
  <committed-date>2008-08-22T15:54:30-07:00</committed-date>
  <authored-date>2008-08-22T15:54:30-07:00</authored-date>
  <message>Added a GtkEntry to the toolbar to show the current revision. It can
be edited and activated to choose a different revision.</message>
  <tree>c59a47cd18eab84c3e9d4f76b8bad1ea714905f2</tree>
  <committer>
    <name>Neil Roberts</name>
    <email>neil@o-hand.com</email>
  </committer>
</commit>
