[Pkg-bazaar-commits] ./bzr-gtk/unstable r429: Merge from mainline

Aaron Bentley aaron at aaronbentley.com
Fri Apr 10 07:44:56 UTC 2009


------------------------------------------------------------
revno: 429
committer: Aaron Bentley <aaron at aaronbentley.com>
branch nick: gtk-applymerge
timestamp: Fri 2008-02-22 23:55:56 -0500
message:
  Merge from mainline
added:
  branchview/
  branchview/__init__.py
renamed:
  viz/graphcell.py => branchview/graphcell.py
  viz/linegraph.py => branchview/linegraph.py
  viz/treemodel.py => branchview/treemodel.py
  viz/treeview.py => branchview/treeview.py
modified:
  NEWS
  __init__.py
  about.py
  diff.py
  olive/__init__.py
  revisionmenu.py
  revisionview.py
  setup.py
  viz/__init__.py
  viz/branchwin.py
  branchview/graphcell.py
  branchview/treemodel.py
  branchview/treeview.py
    ------------------------------------------------------------
    revno: 423.2.1
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: pkg-refactor
    timestamp: Sun 2008-01-13 15:12:49 +0100
    message:
      Moved branch view to its own package.
    added:
      branchview/
      branchview/__init__.py
    renamed:
      viz/graphcell.py => branchview/graphcell.py
      viz/linegraph.py => branchview/linegraph.py
      viz/treemodel.py => branchview/treemodel.py
      viz/treeview.py => branchview/treeview.py
    modified:
      viz/branchwin.py
    ------------------------------------------------------------
    revno: 423.2.2
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: pkg-refactor
    timestamp: Sun 2008-01-13 15:15:20 +0100
    message:
      Moved the branch window class to the viz package.
    modified:
      __init__.py
      viz/__init__.py
    ------------------------------------------------------------
    revno: 423.1.2
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Sun 2008-01-20 21:42:59 +0100
    message:
      Merged changes to packages.
    added:
      branchview/
      branchview/__init__.py
    renamed:
      viz/graphcell.py => branchview/graphcell.py
      viz/linegraph.py => branchview/linegraph.py
      viz/treemodel.py => branchview/treemodel.py
      viz/treeview.py => branchview/treeview.py
    modified:
      __init__.py
      viz/__init__.py
      viz/branchwin.py
    ------------------------------------------------------------
    revno: 423.1.3
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Tue 2008-01-22 20:09:03 +0100
    message:
      Merged with Daniel's branch.
    modified:
      revisionview.py
        ------------------------------------------------------------
        revno: 423.3.1
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: revisionview-tags
        timestamp: Mon 2008-01-21 16:46:50 +0100
        message:
          Made the tag list be a comma-separated line instead of a vertically stacked box.
        modified:
          revisionview.py
    ------------------------------------------------------------
    revno: 423.1.4
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Tue 2008-01-22 20:10:09 +0100
    message:
      Updated NEWS.
    modified:
      NEWS
    ------------------------------------------------------------
    revno: 423.1.5
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Tue 2008-01-22 21:27:21 +0100
    message:
      Merged fixes to treemodel.py.
    modified:
      branchview/treemodel.py
      branchview/treeview.py
        ------------------------------------------------------------
        revno: 423.4.1
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: treemodel-fixes
        timestamp: Sun 2008-01-20 20:49:04 +0100
        message:
          Renamed the MESSAGE column to SUMMARY.
        modified:
          viz/treemodel.py
          viz/treeview.py
        ------------------------------------------------------------
        revno: 423.4.2
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: treemodel-fixes
        timestamp: Sun 2008-01-20 20:52:23 +0100
        message:
          Added a MESSAGE column to the tree model.
        modified:
          viz/treemodel.py
        ------------------------------------------------------------
        revno: 423.4.3
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: treemodel-fixes
        timestamp: Sun 2008-01-20 20:53:30 +0100
        message:
          Made the MESSAGE column be the tooltip column.
        modified:
          viz/treeview.py
        ------------------------------------------------------------
        revno: 423.4.4
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: treemodel-fixes
        timestamp: Sun 2008-01-20 20:55:06 +0100
        message:
          Renamed COMMITER column into the correct COMMITTER.
        modified:
          viz/treemodel.py
          viz/treeview.py
        ------------------------------------------------------------
        revno: 423.4.5
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: treemodel-fixes
        timestamp: Sun 2008-01-20 21:40:29 +0100
        message:
          Fixed indendation issues.
        modified:
          viz/treemodel.py
        ------------------------------------------------------------
        revno: 423.4.6
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: treemodel-fixes
        timestamp: Tue 2008-01-22 20:06:29 +0100
        message:
          Removed unnecessary spaces.
        modified:
          viz/treemodel.py
    ------------------------------------------------------------
    revno: 423.1.6
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Wed 2008-01-23 17:17:08 +0100
    message:
      Merged Ali's fancy tags branch.
    modified:
      branchview/graphcell.py
      branchview/treemodel.py
      branchview/treeview.py
        ------------------------------------------------------------
        revno: 423.5.1
        committer: Ali Sabil <ali.sabil at gmail.com>
        branch nick: gtk
        timestamp: Mon 2008-01-21 13:31:58 +0100
        message:
          Added tags visualization in the graph
        modified:
          branchview/graphcell.py
          branchview/treemodel.py
          branchview/treeview.py
        ------------------------------------------------------------
        revno: 423.5.2
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Mon 2008-01-21 15:42:05 +0100
        message:
          Made tag labels smaller.
        modified:
          branchview/graphcell.py
        ------------------------------------------------------------
        revno: 423.5.3
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Mon 2008-01-21 16:01:39 +0100
        message:
          Made tag labels stack horizontally instead of vertically, and added padding to the labels.
        modified:
          branchview/graphcell.py
        ------------------------------------------------------------
        revno: 423.5.4
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Mon 2008-01-21 16:17:39 +0100
        message:
          Made the tag label stack look good, even with many tags.
        modified:
          branchview/graphcell.py
        ------------------------------------------------------------
        revno: 423.5.5
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Mon 2008-01-21 16:37:34 +0100
        message:
          Merged Ali's changes.
        modified:
          branchview/graphcell.py
            ------------------------------------------------------------
            revno: 423.6.1
            committer: Ali Sabil <ali.sabil at gmail.com>
            branch nick: gtk
            timestamp: Mon 2008-01-21 16:33:53 +0100
            message:
              Set the tags colour to yellow
            modified:
              branchview/graphcell.py
        ------------------------------------------------------------
        revno: 423.5.6
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Mon 2008-01-21 16:50:13 +0100
        message:
          Merged with Ali's changes.
        modified:
          branchview/graphcell.py
            ------------------------------------------------------------
            revno: 423.6.2
            committer: Ali Sabil <ali.sabil at gmail.com>
            branch nick: gtk
            timestamp: Mon 2008-01-21 16:46:50 +0100
            message:
              Enhanced the tag drawing
            modified:
              branchview/graphcell.py
        ------------------------------------------------------------
        revno: 423.5.7
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Mon 2008-01-21 16:57:05 +0100
        message:
          Made tag label holes larger.
        modified:
          branchview/graphcell.py
        ------------------------------------------------------------
        revno: 423.5.8
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Tue 2008-01-22 19:59:23 +0100
        message:
          Improved tag handling in branchview model.
        modified:
          branchview/treemodel.py
        ------------------------------------------------------------
        revno: 423.5.9
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Tue 2008-01-22 23:58:29 +0100
        message:
          Fixed bug where markup in tags would cause rendering errors.
        modified:
          branchview/graphcell.py
        ------------------------------------------------------------
        revno: 423.5.10
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Wed 2008-01-23 00:09:28 +0100
        message:
          Merged with trunk.
        modified:
          NEWS
          branchview/treemodel.py
          branchview/treeview.py
          revisionview.py
    ------------------------------------------------------------
    revno: 423.1.7
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Wed 2008-01-23 17:18:27 +0100
    message:
      Added NEWS entry about the fancy tags.
    modified:
      NEWS
    ------------------------------------------------------------
    revno: 423.1.8
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Sun 2008-01-27 02:16:45 +0100
    message:
      Merged fixes to the tag actions.
    modified:
      branchview/treemodel.py
      branchview/treeview.py
      revisionmenu.py
      revisionview.py
      viz/branchwin.py
        ------------------------------------------------------------
        revno: 423.7.1
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Mon 2008-01-21 17:38:50 +0100
        message:
          Removed end-of-line markers.
        modified:
          branchview/treemodel.py
        ------------------------------------------------------------
        revno: 423.7.2
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-tags-fancy
        timestamp: Mon 2008-01-21 17:43:10 +0100
        message:
          Improved tag handling in branchview model.
        modified:
          branchview/treemodel.py
        ------------------------------------------------------------
        revno: 423.7.3
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: add-tags
        timestamp: Mon 2008-01-21 18:23:10 +0100
        message:
          Moved tag writing logic inside the branchview treemodel.
        modified:
          branchview/treemodel.py
          branchview/treeview.py
          viz/branchwin.py
        ------------------------------------------------------------
        revno: 423.7.4
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: add-tags
        timestamp: Mon 2008-01-21 18:32:13 +0100
        message:
          Made revisionview and branchview update when a tag is added.
        modified:
          branchview/treeview.py
          revisionview.py
          viz/branchwin.py
        ------------------------------------------------------------
        revno: 423.7.5
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: add-tags
        timestamp: Mon 2008-01-21 18:45:58 +0100
        message:
          Made the revision history window update the Go->Tags menu when a tag is added.
        modified:
          viz/branchwin.py
        ------------------------------------------------------------
        revno: 423.7.6
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: add-tags
        timestamp: Wed 2008-01-23 17:24:25 +0100
        message:
          Merged with trunk.
        modified:
          NEWS
          branchview/graphcell.py
          branchview/treemodel.py
          branchview/treeview.py
          revisionview.py
        ------------------------------------------------------------
        revno: 423.7.7
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: add-tags
        timestamp: Wed 2008-01-23 17:30:21 +0100
        message:
          Simplified Go->Tag Revision menu item in the viz.
        modified:
          viz/branchwin.py
        ------------------------------------------------------------
        revno: 423.7.8
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: add-tags
        timestamp: Wed 2008-01-23 17:36:21 +0100
        message:
          Made the revision popup menu correctly add tags.
        modified:
          branchview/treeview.py
          revisionmenu.py
    ------------------------------------------------------------
    revno: 423.1.9
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Sun 2008-01-27 02:17:31 +0100
    message:
      Updated NEWS.
    modified:
      NEWS
    ------------------------------------------------------------
    revno: 423.1.10
    committer: Jelmer Vernooij <jelmer at samba.org>
    branch nick: trunk
    timestamp: Sun 2008-01-27 02:43:53 +0100
    message:
      Merge diff widget splitup.
    modified:
      diff.py
        ------------------------------------------------------------
        revno: 423.8.1
        committer: Jelmer Vernooij <jelmer at samba.org>
        branch nick: changes-below
        timestamp: Sun 2008-01-27 00:48:18 +0100
        message:
          Allow using the diff control as a widget
        modified:
          diff.py
    ------------------------------------------------------------
    revno: 423.1.11
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Mon 2008-01-28 14:15:46 +0100
    message:
      Merged with viz About dialog branch.
    modified:
      about.py
      viz/branchwin.py
        ------------------------------------------------------------
        revno: 423.9.1
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-about-dialog
        timestamp: Sat 2008-01-26 22:43:29 +0100
        message:
          Added Help->About menu item to the viz.
        modified:
          viz/branchwin.py
        ------------------------------------------------------------
        revno: 423.9.2
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-about-dialog
        timestamp: Sat 2008-01-26 22:43:55 +0100
        message:
          Made the About dialog show bzr-gtk information instead of Bazaar information.
        modified:
          about.py
        ------------------------------------------------------------
        revno: 423.9.3
        committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
        branch nick: viz-about-dialog
        timestamp: Sun 2008-01-27 02:13:38 +0100
        message:
          Changed About dialog URL, reverted change to license dialog.
        modified:
          about.py
    ------------------------------------------------------------
    revno: 423.1.12
    committer: Gary van der Merwe <garyvdm at garyvdm-desktop>
    branch nick: gtk
    timestamp: Wed 2008-02-13 10:10:08 +0200
    message:
      Add missing contributors to Credit dialog. Sort alphabetically.
    modified:
      olive/__init__.py
    ------------------------------------------------------------
    revno: 423.1.13
    committer: Gary van der Merwe <garyvdm at garyvdm-desktop>
    branch nick: gtk
    timestamp: Wed 2008-02-13 11:25:46 +0200
    message:
      Move viz loading msg from branchwin to treeview.
    modified:
      branchview/treeview.py
      viz/branchwin.py
    ------------------------------------------------------------
    revno: 423.1.14
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Wed 2008-02-13 14:40:06 +0100
    message:
      Merged in Gary's fix of the setup script.
    modified:
      setup.py
        ------------------------------------------------------------
        revno: 423.10.1
        committer: Gary van der Merwe <garyvdm at garyvdm-desktop>
        branch nick: gtk
        timestamp: Wed 2008-02-13 10:53:14 +0200
        message:
          Add branchview dir to setup.py
        modified:
          setup.py
    ------------------------------------------------------------
    revno: 423.1.15
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Wed 2008-02-13 14:45:58 +0100
    message:
      Merged Gary's fix of the Olive encoding issue.
    modified:
      olive/__init__.py
        ------------------------------------------------------------
        revno: 423.11.1
        committer: Gary van der Merwe <garyvdm at garyvdm-desktop>
        branch nick: gtk
        timestamp: Wed 2008-02-13 11:50:42 +0200
        message:
          Add encoding header to olive/__init__.py as it now has non ASCII chars.
        modified:
          olive/__init__.py
    ------------------------------------------------------------
    revno: 423.1.16
    committer: Daniel Schierbeck <daniel.schierbeck at gmail.com>
    branch nick: trunk
    timestamp: Wed 2008-02-13 16:29:23 +0100
    message:
      Reverted change to Olive's credits list.
    modified:
      olive/__init__.py
-------------- next part --------------
=== modified file 'NEWS'
--- a/NEWS	2008-01-08 19:39:39 +0000
+++ b/NEWS	2008-01-27 01:17:31 +0000
@@ -1,6 +1,15 @@
 0.94.0  UNRELEASED
 
+ UI
+
+  * Made the tags associated with a revision render next to the revision
+    node in the branch view. (Ali Sabil)
+
+  * Made the tag list in the revision view be comma-separated. (Daniel Schierbeck)
+
  BUG FIXES
+
+  * Make adding tags from the viz work again. (Daniel Schierbeck)
  
   * Catch UnsupportedProtocol exception in the Nautilus extension. (#77965)
   

=== modified file '__init__.py'
--- a/__init__.py	2008-01-15 07:18:53 +0000
+++ b/__init__.py	2008-02-23 04:55:56 +0000
@@ -219,7 +219,7 @@
     
     :return: The viz window object.
     """
-    from viz.branchwin import BranchWindow
+    from viz import BranchWindow
     return BranchWindow(branch, revision, limit)
 
 

=== modified file 'about.py'
--- a/about.py	2007-07-23 12:03:29 +0000
+++ b/about.py	2008-01-27 01:13:38 +0000
@@ -28,10 +28,10 @@
 class AboutDialog(gtk.AboutDialog):
     def __init__(self):
         super(AboutDialog, self).__init__()
-        self.set_name("Bazaar")
-        self.set_version(bzrlib.version_string)
-        self.set_website("http://bazaar-vcs.org/")
-        self.set_license("GNU GPLv2")
+        self.set_name("Bazaar GTK")
+        self.set_version(bzrlib.plugins.gtk.version_string)
+        self.set_website("http://bazaar-vcs.org/BzrGtk")
+        self.set_license("GNU GPL v2")
         self.set_icon(gtk.gdk.pixbuf_new_from_file(os.path.join(data_path(), "bzr-icon-64.png")))
         self.connect ("response", lambda d, r: d.destroy())
 

=== added directory 'branchview'
=== added file 'branchview/__init__.py'
--- a/branchview/__init__.py	1970-01-01 00:00:00 +0000
+++ b/branchview/__init__.py	2008-01-13 14:12:49 +0000
@@ -0,0 +1,2 @@
+
+from treeview import *

=== renamed file 'viz/graphcell.py' => 'branchview/graphcell.py'
--- a/viz/graphcell.py	2007-09-22 15:01:53 +0000
+++ b/branchview/graphcell.py	2008-01-22 22:58:29 +0000
@@ -38,6 +38,10 @@
                           "revision node instruction",
                           gobject.PARAM_WRITABLE
                         ),
+        "tags":         ( gobject.TYPE_PYOBJECT, "tags",
+                          "list of tags associated with the node",
+                          gobject.PARAM_WRITABLE
+                        ),
         "in-lines":     ( gobject.TYPE_PYOBJECT, "in-lines",
                           "instructions to draw lines into the cell",
                           gobject.PARAM_WRITABLE
@@ -52,6 +56,8 @@
         """Set properties from GObject properties."""
         if property.name == "node":
             self.node = value
+        elif property.name == "tags":
+            self.tags = value
         elif property.name == "in-lines":
             self.in_lines = value
         elif property.name == "out-lines":
@@ -168,8 +174,10 @@
 
         self.set_colour(ctx, colour, 0.5, 1.0)
         ctx.fill()
+
+        self.render_tags(ctx, widget.create_pango_context(), cell_area, box_size)
     
-    def render_line (self, ctx, cell_area, box_size, mid, height, start, end, colour):
+    def render_line(self, ctx, cell_area, box_size, mid, height, start, end, colour):
         if start is None:
             x = cell_area.x + box_size * end + box_size / 2
             ctx.move_to(x, mid + height / 3)
@@ -202,4 +210,58 @@
                 
         self.set_colour(ctx, colour, 0.0, 0.65)
         ctx.stroke()
-        
\ No newline at end of file
+
+    def render_tags(self, ctx, pango_ctx, cell_area, box_size):
+        # colour ID used in self.set_colour on the tags
+        TAG_COLOUR_ID = 1
+
+        (column, colour) = self.node
+
+        font_desc = pango.FontDescription()
+        font_desc.set_size(pango.SCALE * 7)
+
+        tag_layout = pango.Layout(pango_ctx)
+        tag_layout.set_font_description(font_desc)
+
+        # The width of the tag label stack
+        width = 0
+
+        for tag_idx, tag in enumerate(self.tags):
+            tag_layout.set_text(" " + tag + " ")
+            text_width, text_height = tag_layout.get_pixel_size()
+
+            x0 = cell_area.x + \
+                 box_size * (column + 1.3) + width
+
+            y0 = cell_area.y + \
+                 cell_area.height / 2 - \
+                 text_height / 2
+
+            width += text_width + 5
+
+            # Draw the tag border
+            ctx.move_to(x0 - box_size / 3, y0 + text_height / 2)
+            ctx.line_to(x0, y0)
+            ctx.line_to(x0 + text_width, y0)
+            ctx.line_to(x0 + text_width, y0 + text_height)
+            ctx.line_to(x0, y0 + text_height)
+            ctx.line_to(x0 - box_size / 3, y0 + text_height / 2)
+
+            ctx.new_sub_path()
+            ctx.arc(x0 - box_size / 12,
+                        y0 + text_height / 2,
+                        box_size / 7,
+                        0, 2 * math.pi);
+
+            self.set_colour(ctx, TAG_COLOUR_ID, 0.0, 0.5)
+            ctx.stroke_preserve()
+
+            ctx.set_fill_rule (cairo.FILL_RULE_EVEN_ODD)
+            self.set_colour(ctx, TAG_COLOUR_ID, 0.5, 1.0)
+            ctx.fill()
+
+            # Draw the tag text
+            self.set_colour(ctx, 0, 0.0, 0.0)
+            ctx.move_to(x0, y0)
+            ctx.show_layout(tag_layout)
+

=== renamed file 'viz/linegraph.py' => 'branchview/linegraph.py'
=== renamed file 'viz/treemodel.py' => 'branchview/treemodel.py'
--- a/viz/treemodel.py	2007-12-20 23:43:57 +0000
+++ b/branchview/treemodel.py	2008-01-23 16:24:25 +0000
@@ -20,27 +20,42 @@
 LINES = 2
 LAST_LINES = 3
 REVNO = 4
-MESSAGE = 5
-COMMITER = 6
-TIMESTAMP = 7
-REVISION = 8
-PARENTS = 9
-CHILDREN = 10
+SUMMARY = 5
+MESSAGE = 6
+COMMITTER = 7
+TIMESTAMP = 8
+REVISION = 9
+PARENTS = 10
+CHILDREN = 11
+TAGS = 12
 
 class TreeModel(gtk.GenericTreeModel):
 
     
-    def __init__ (self, repository, line_graph_data):
+    def __init__ (self, branch, line_graph_data):
         gtk.GenericTreeModel.__init__(self)
         self.revisions = {}
-        self.repository = repository
+	self.branch = branch
+        self.repository = branch.repository
         self.line_graph_data = line_graph_data
-    
+
+    	if self.branch.supports_tags():
+            self.tags = self.branch.tags.get_reverse_tag_dict()
+        else:
+            self.tags = {}
+
+    def add_tag(self, tag, revid):
+        self.branch.tags.set_tag(tag, revid)
+        try:
+            self.tags[revid].append(tag)
+        except KeyError:
+            self.tags[revid] = [tag]
+
     def on_get_flags(self):
         return gtk.TREE_MODEL_LIST_ONLY
     
     def on_get_n_columns(self):
-        return 11
+        return 13
     
     def on_get_column_type(self, index):
         if index == REVID: return gobject.TYPE_STRING
@@ -48,12 +63,14 @@
         if index == LINES: return gobject.TYPE_PYOBJECT
         if index == LAST_LINES: return gobject.TYPE_PYOBJECT
         if index == REVNO: return gobject.TYPE_STRING
+        if index == SUMMARY: return gobject.TYPE_STRING
         if index == MESSAGE: return gobject.TYPE_STRING
-        if index == COMMITER: return gobject.TYPE_STRING
+        if index == COMMITTER: return gobject.TYPE_STRING
         if index == TIMESTAMP: return gobject.TYPE_STRING
         if index == REVISION: return gobject.TYPE_PYOBJECT
         if index == PARENTS: return gobject.TYPE_PYOBJECT
         if index == CHILDREN: return gobject.TYPE_PYOBJECT
+        if index == TAGS: return gobject.TYPE_PYOBJECT
         
     def on_get_iter(self, path):
         return path[0]
@@ -80,7 +97,9 @@
             return []
         if column == REVNO: return ".".join(["%d" % (revno)
                                       for revno in revno_sequence])
-        
+
+        if column == TAGS: return self.tags.get(revid, [])
+
         if revid is None:
             return None
         if revid not in self.revisions:
@@ -90,8 +109,9 @@
             revision = self.revisions[revid]
         
         if column == REVISION: return revision
-        if column == MESSAGE: return escape(revision.get_summary())
-        if column == COMMITER: return re.sub('<.*@.*>', '', 
+        if column == SUMMARY: return escape(revision.get_summary())
+        if column == MESSAGE: return escape(revision.message)
+        if column == COMMITTER: return re.sub('<.*@.*>', '', 
                                              revision.committer).strip(' ')
         if column == TIMESTAMP: 
             return strftime("%Y-%m-%d %H:%M", localtime(revision.timestamp))

=== renamed file 'viz/treeview.py' => 'branchview/treeview.py'
--- a/viz/treeview.py	2007-12-02 17:04:48 +0000
+++ b/branchview/treeview.py	2008-02-13 09:25:46 +0000
@@ -19,7 +19,7 @@
 from treemodel import TreeModel
 from bzrlib.revision import NULL_REVISION
 
-class TreeView(gtk.ScrolledWindow):
+class TreeView(gtk.VBox):
 
     __gproperties__ = {
         'branch': (gobject.TYPE_PYOBJECT,
@@ -74,7 +74,10 @@
                              ()),
         'revision-selected': (gobject.SIGNAL_RUN_FIRST,
                               gobject.TYPE_NONE,
-                              ())
+                              ()),
+        'tag-added': (gobject.SIGNAL_RUN_FIRST,
+                              gobject.TYPE_NONE,
+                              (gobject.TYPE_STRING, gobject.TYPE_STRING))
     }
 
     def __init__(self, branch, start, maxnum, compact=True):
@@ -87,15 +90,24 @@
         :param broken_line_length: After how much lines to break 
                                    branches.
         """
-        gtk.ScrolledWindow.__init__(self)
-
-        self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
-        self.set_shadow_type(gtk.SHADOW_IN)
-
-        self.construct_treeview()
-
-        self.iter   = None
+        gtk.VBox.__init__(self, spacing=0)
+
+        self.pack_start(self.construct_loading_msg(), expand=False, fill=True)
+        self.connect('revisions-loaded', 
+                lambda x: self.loading_msg_box.hide())
+
+        self.scrolled_window = gtk.ScrolledWindow()
+        self.scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
+        self.scrolled_window.set_shadow_type(gtk.SHADOW_IN)
+        self.scrolled_window.show()
+        self.pack_start(self.scrolled_window, expand=True, fill=True)
+
+        self.scrolled_window.add(self.construct_treeview())
+        
+
+        self.iter = None
         self.branch = branch
+        self.revision = None
 
         self.start = start
         self.maxnum = maxnum
@@ -167,8 +179,26 @@
         :return: list of revision ids.
         """
         return self.get_property('parents')
+
+    def add_tag(self, tag, revid=None):
+        if revid is None: revid = self.revision.revision_id
+
+        try:
+            self.branch.unlock()
+
+            try:
+                self.branch.lock_write()
+                self.model.add_tag(tag, revid)
+            finally:
+                self.branch.unlock()
+
+        finally:
+            self.branch.lock_read()
+
+        self.emit('tag-added', tag, revid)
         
     def refresh(self):
+        self.loading_msg_box.show()
         gobject.idle_add(self.populate, self.get_revision())
 
     def update(self):
@@ -233,7 +263,7 @@
                                                         self.maxnum, 
                                                         broken_line_length)
 
-        self.model = TreeModel(self.branch.repository, linegraphdata)
+        self.model = TreeModel(self.branch, linegraphdata)
         self.graph_cell.columns_len = columns_len
         width = self.graph_cell.get_size(self.treeview)[2]
         if width > 500:
@@ -297,7 +327,6 @@
 
         self.treeview.set_property('fixed-height-mode', True)
 
-        self.add(self.treeview)
         self.treeview.show()
 
         cell = gtk.CellRendererText()
@@ -317,6 +346,7 @@
         self.graph_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
         self.graph_column.pack_start(self.graph_cell, expand=False)
         self.graph_column.add_attribute(self.graph_cell, "node", treemodel.NODE)
+        self.graph_column.add_attribute(self.graph_cell, "tags", treemodel.TAGS)
         self.graph_column.add_attribute(self.graph_cell, "in-lines", treemodel.LAST_LINES)
         self.graph_column.add_attribute(self.graph_cell, "out-lines", treemodel.LINES)
         self.treeview.append_column(self.graph_column)
@@ -324,13 +354,13 @@
         cell = gtk.CellRendererText()
         cell.set_property("width-chars", 65)
         cell.set_property("ellipsize", pango.ELLIPSIZE_END)
-        self.msg_column = gtk.TreeViewColumn("Message")
-        self.msg_column.set_resizable(True)
-        self.msg_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
-        self.msg_column.set_fixed_width(cell.get_size(self.treeview)[2])
-        self.msg_column.pack_start(cell, expand=True)
-        self.msg_column.add_attribute(cell, "markup", treemodel.MESSAGE)
-        self.treeview.append_column(self.msg_column)
+        self.summary_column = gtk.TreeViewColumn("Summary")
+        self.summary_column.set_resizable(True)
+        self.summary_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
+        self.summary_column.set_fixed_width(cell.get_size(self.treeview)[2])
+        self.summary_column.pack_start(cell, expand=True)
+        self.summary_column.add_attribute(cell, "markup", treemodel.SUMMARY)
+        self.treeview.append_column(self.summary_column)
 
         cell = gtk.CellRendererText()
         cell.set_property("width-chars", 15)
@@ -340,7 +370,7 @@
         self.committer_column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
         self.committer_column.set_fixed_width(cell.get_size(self.treeview)[2])
         self.committer_column.pack_start(cell, expand=True)
-        self.committer_column.add_attribute(cell, "text", treemodel.COMMITER)
+        self.committer_column.add_attribute(cell, "text", treemodel.COMMITTER)
         self.treeview.append_column(self.committer_column)
 
         cell = gtk.CellRendererText()
@@ -354,6 +384,26 @@
         self.date_column.pack_start(cell, expand=True)
         self.date_column.add_attribute(cell, "text", treemodel.TIMESTAMP)
         self.treeview.append_column(self.date_column)
+        
+        return self.treeview
+    
+    def construct_loading_msg(self):
+        image_loading = gtk.image_new_from_stock(gtk.STOCK_REFRESH,
+                                                 gtk.ICON_SIZE_BUTTON)
+        image_loading.show()
+        
+        label_loading = gtk.Label(_("Please wait, loading ancestral graph..."))
+        label_loading.set_alignment(0.0, 0.5)
+        label_loading.show()
+        
+        self.loading_msg_box = gtk.HBox()
+        self.loading_msg_box.set_spacing(5)
+        self.loading_msg_box.set_border_width(5)        
+        self.loading_msg_box.pack_start(image_loading, False, False)
+        self.loading_msg_box.pack_start(label_loading, True, True)
+        self.loading_msg_box.show()
+        
+        return self.loading_msg_box
 
     def _on_selection_changed(self, treeview):
         """callback for when the treeview changes."""
@@ -368,6 +418,7 @@
             menu = RevisionPopupMenu(self.branch.repository, 
                 [self.get_revision().revision_id],
                 self.branch)
+            menu.connect('tag-added', lambda w, t, r: self.add_tag(t, r))
             menu.popup(None, None, None, event.button, event.get_time())
 
     def _on_revision_activated(self, widget, path, col):

=== modified file 'diff.py'
--- a/diff.py	2008-01-15 07:18:53 +0000
+++ b/diff.py	2008-02-23 04:55:56 +0000
@@ -283,50 +283,18 @@
         self.buffer.set_text(decoded.encode('UTF-8'))
 
 
-class DiffWindow(Window):
-    """Diff window.
+class DiffWidget(gtk.HPaned):
+    """Diff widget
 
-    This object represents and manages a single window containing the
-    differences between two revisions on a branch.
     """
-
-    def __init__(self, parent=None):
-        Window.__init__(self, parent)
-        self.set_border_width(0)
-        self.set_title("bzrk diff")
-
-        # Use two thirds of the screen by default
-        screen = self.get_screen()
-        monitor = screen.get_monitor_geometry(0)
-        width = int(monitor.width * 0.66)
-        height = int(monitor.height * 0.66)
-        self.set_default_size(width, height)
-
-        self.construct()
-
-    def _get_button_bar(self):
-        return None
-
-    def construct(self):
-        """Construct the window contents."""
-        # The   window  consists  of   a  pane   containing:  the
-        # hierarchical list  of files on  the left, and  the diff
-        # for the currently selected file on the right.
-        self.vbox = gtk.VBox()
-        self.add(self.vbox)
-        self.vbox.show()
-        self.pane = gtk.HPaned()
-        self.vbox.pack_end(self.pane, expand=True, fill=True)
-        hbox = self._get_button_bar()
-        if hbox is not None:
-            self.vbox.pack_start(hbox, expand=False, fill=True)
-        self.pane.show()
+    def __init__(self):
+        super(DiffWidget, self).__init__()
 
         # The file hierarchy: a scrollable treeview
         scrollwin = gtk.ScrolledWindow()
         scrollwin.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
         scrollwin.set_shadow_type(gtk.SHADOW_IN)
-        self.pane.pack1(scrollwin)
+        self.pack1(scrollwin)
         scrollwin.show()
 
         self.model = gtk.TreeStore(str, str)
@@ -344,12 +312,12 @@
         column.add_attribute(cell, "text", 0)
         self.treeview.append_column(column)
 
-    def set_diff_text(self, description, lines):
+    def set_diff_text(self, lines):
         # The diffs of the  selected file: a scrollable source or
         # text view
         self.diff_view = DiffFileView()
         self.diff_view.show()
-        self.pane.pack2(self.diff_view)
+        self.pack2(self.diff_view)
         self.model.append(None, [ "Complete Diff", "" ])
         self.diff_view._diffs[None] = ''.join(lines)
         for patch in parse_patches(lines):
@@ -359,16 +327,14 @@
             self.diff_view._diffs[newname] = str(patch)
         self.diff_view.show_diff(None)
 
-    def set_diff(self, description, rev_tree, parent_tree):
+    def set_diff(self, rev_tree, parent_tree):
         """Set the differences showed by this window.
 
         Compares the two trees and populates the window with the
         differences.
         """
-        # The diffs of the  selected file: a scrollable source or
-        # text view
         self.diff_view = DiffView()
-        self.pane.pack2(self.diff_view)
+        self.pack2(self.diff_view)
         self.diff_view.show()
         self.diff_view.set_trees(rev_tree, parent_tree)
         self.rev_tree = rev_tree
@@ -401,8 +367,6 @@
                 self.model.append(titer, [ path, path ])
 
         self.treeview.expand_all()
-        self.set_title(description + " - bzrk diff")
-        self.diff_view.show_diff(None)
 
     def set_file(self, file_path):
         tv_path = None
@@ -428,6 +392,59 @@
         self.diff_view.show_diff(specific_files)
 
 
+class DiffWindow(Window):
+    """Diff window.
+
+    This object represents and manages a single window containing the
+    differences between two revisions on a branch.
+    """
+
+    def __init__(self, parent=None):
+        Window.__init__(self, parent)
+        self.set_border_width(0)
+        self.set_title("bzrk diff")
+
+        # Use two thirds of the screen by default
+        screen = self.get_screen()
+        monitor = screen.get_monitor_geometry(0)
+        width = int(monitor.width * 0.66)
+        height = int(monitor.height * 0.66)
+        self.set_default_size(width, height)
+
+        self.construct()
+
+    def construct(self):
+        """Construct the window contents."""
+        self.vbox = gtk.VBox()
+        self.add(self.vbox)
+        self.vbox.show()
+        hbox = self._get_button_bar()
+        if hbox is not None:
+            self.vbox.pack_start(hbox, expand=False, fill=True)
+        self.diff = DiffWidget()
+        self.vbox.add(self.diff)
+        self.diff.show_all()
+
+    def _get_button_bar(self):
+        return None
+
+    def set_diff_text(self, description, lines):
+        self.diff.set_diff_text(lines)
+        self.set_title(description + " - bzrk diff")
+
+    def set_diff(self, description, rev_tree, parent_tree):
+        """Set the differences showed by this window.
+
+        Compares the two trees and populates the window with the
+        differences.
+        """
+        self.diff.set_diff(rev_tree, parent_tree)
+        self.set_title(description + " - bzrk diff")
+
+    def set_file(self, file_path):
+        self.diff.set_file(file_path)
+
+
 class MergeDirectiveWindow(DiffWindow):
 
     def __init__(self, directive, parent=None):

=== modified file 'olive/__init__.py'
--- a/olive/__init__.py	2007-10-26 16:18:50 +0000
+++ b/olive/__init__.py	2008-02-13 15:29:23 +0000
@@ -1,3 +1,6 @@
+?#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+
 # Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas at gmail.com>
 #
 # This program is free software; you can redistribute it and/or modify

=== modified file 'revisionmenu.py'
--- a/revisionmenu.py	2007-11-21 23:49:58 +0000
+++ b/revisionmenu.py	2008-01-23 16:36:21 +0000
@@ -23,10 +23,20 @@
 
 import bzrlib
 import gtk
+import gobject
 from bzrlib import (errors, ui)
 from bzrlib.revision import NULL_REVISION
 
 class RevisionPopupMenu(gtk.Menu):
+
+    __gsignals__ = {
+            'tag-added': (
+                gobject.SIGNAL_RUN_FIRST,
+                gobject.TYPE_NONE,
+                (gobject.TYPE_STRING, gobject.TYPE_STRING)
+            )
+    }
+
     def __init__(self, repository, revids, branch=None, wt=None):
         super(RevisionPopupMenu, self).__init__()
         self.branch = branch
@@ -100,11 +110,7 @@
             dialog.hide()
         
             if response == gtk.RESPONSE_OK:
-                try:
-                    self.branch.lock_write()
-                    self.branch.tags.set_tag(dialog.tagname, dialog._revid)
-                finally:
-                    self.branch.unlock()
+                self.emit('tag-added', dialog.tagname, dialog._revid)
             
             dialog.destroy()
     

=== modified file 'revisionview.py'
--- a/revisionview.py	2007-12-06 23:49:08 +0000
+++ b/revisionview.py	2008-01-23 16:24:25 +0000
@@ -77,10 +77,7 @@
         self._revision = None
         self._branch = branch
 
-        if self._branch is not None and self._branch.supports_tags():
-            self._tagdict = self._branch.tags.get_reverse_tag_dict()
-        else:
-            self._tagdict = {}
+        self.update_tags()
 
         self.set_file_id(None)
 
@@ -179,6 +176,14 @@
         else:
             self.file_info_box.hide()
 
+    def update_tags(self):
+        if self._branch is not None and self._branch.supports_tags():
+            self._tagdict = self._branch.tags.get_reverse_tag_dict()
+        else:
+            self._tagdict = {}
+
+        self._add_tags()
+
     def set_children(self, children):
         self._add_parents_or_children(children,
                                       self.children_widgets,
@@ -192,6 +197,8 @@
         """Callback for when the go button for a parent is clicked."""
 
     def _add_tags(self, *args):
+        if self._revision is None: return
+
         if self._tagdict.has_key(self._revision.revision_id):
             tags = self._tagdict[self._revision.revision_id]
         else:
@@ -202,16 +209,8 @@
             self.tags_label.hide()
             return
 
-        for widget in self.tags_widgets:
-            self.tags_list.remove(widget)
-
-        self.tags_widgets = []
-
-        for tag in tags:
-            widget = gtk.Label(tag)
-            widget.set_selectable(True)
-            self.tags_widgets.append(widget)
-            self.tags_list.add(widget)
+        self.tags_list.set_text(", ".join(tags))
+
         self.tags_list.show_all()
         self.tags_label.show_all()
         
@@ -367,12 +366,11 @@
         self.tags_label.show()
 
         align = gtk.Alignment(0.0, 0.5)
-        self.tags_list = gtk.VBox()
+        self.tags_list = gtk.Label()
         align.add(self.tags_list)
         self.table.attach(align, 1, 2, 5, 6, gtk.EXPAND | gtk.FILL, gtk.FILL)
         align.show()
         self.tags_list.show()
-        self.tags_widgets = []
 
         self.connect('notify::revision', self._add_tags)
 

=== modified file 'setup.py'
--- a/setup.py	2007-12-10 16:01:51 +0000
+++ b/setup.py	2008-02-13 08:53:14 +0000
@@ -98,7 +98,8 @@
         "bzrlib.plugins.gtk.viz": "viz", 
         "bzrlib.plugins.gtk.annotate": "annotate",
         "bzrlib.plugins.gtk.olive": "olive",
-        "bzrlib.plugins.gtk.tests": "tests"
+        "bzrlib.plugins.gtk.tests": "tests",
+        "bzrlib.plugins.gtk.branchview": "branchview",
         },
     packages = [
         "olive",
@@ -106,7 +107,8 @@
         "bzrlib.plugins.gtk.viz",
         "bzrlib.plugins.gtk.annotate",
         "bzrlib.plugins.gtk.olive",
-        "bzrlib.plugins.gtk.tests"
+        "bzrlib.plugins.gtk.tests",
+        "bzrlib.plugins.gtk.branchview",
         ],
     data_files=[('share/olive', ['olive.glade',
                                  'cmenu.ui',

=== modified file 'viz/__init__.py'
--- a/viz/__init__.py	2006-09-06 09:27:12 +0000
+++ b/viz/__init__.py	2008-01-13 14:15:20 +0000
@@ -11,6 +11,8 @@
 The bottom hald of the window shows the details for the selected revision.
 """
 
+from branchwin import BranchWindow
+
 __copyright__ = "Copyright ? 2005 Canonical Ltd."
 __author__    = "Scott James Remnant <scott at ubuntu.com>"
 

=== modified file 'viz/branchwin.py'
--- a/viz/branchwin.py	2007-12-06 23:43:26 +0000
+++ b/viz/branchwin.py	2008-02-13 09:25:46 +0000
@@ -16,10 +16,10 @@
 from bzrlib.plugins.gtk.window import Window
 from bzrlib.plugins.gtk.tags import AddTagDialog
 from bzrlib.plugins.gtk.preferences import PreferencesWindow
+from bzrlib.plugins.gtk.branchview import TreeView
 from bzrlib.revision import Revision
 from bzrlib.config import BranchConfig
 from bzrlib.config import GlobalConfig
-from treeview import TreeView
 
 class BranchWindow(Window):
     """Branch window.
@@ -100,7 +100,6 @@
 
         vbox.pack_start(self.construct_menubar(), expand=False, fill=True)
         vbox.pack_start(self.construct_navigation(), expand=False, fill=True)
-        vbox.pack_start(self.construct_loading_msg(), expand=False, fill=True)
         
         vbox.pack_start(self.paned, expand=True, fill=True)
         vbox.set_focus_child(self.paned)
@@ -170,27 +169,13 @@
         go_menu_next = self.next_rev_action.create_menu_item()
         go_menu_prev = self.prev_rev_action.create_menu_item()
 
-        tags_menu = gtk.Menu()
-        go_menu_tags = gtk.MenuItem("_Tags")
-        go_menu_tags.set_submenu(tags_menu)
-
-        if self.branch.supports_tags():
-            tags = self.branch.tags.get_tag_dict().items()
-            tags.sort()
-            tags.reverse()
-            for tag, revid in tags:
-                tag_item = gtk.MenuItem(tag)
-                tag_item.connect('activate', self._tag_selected_cb, revid)
-                tags_menu.add(tag_item)
-
-            go_menu_tags.set_sensitive(len(tags) != 0)
-        else:
-            go_menu_tags.set_sensitive(False)
+        self.go_menu_tags = gtk.MenuItem("_Tags")
+        self._update_tags()
 
         go_menu.add(go_menu_next)
         go_menu.add(go_menu_prev)
         go_menu.add(gtk.SeparatorMenuItem())
-        go_menu.add(go_menu_tags)
+        go_menu.add(self.go_menu_tags)
 
         revision_menu = gtk.Menu()
         revision_menuitem = gtk.MenuItem("_Revision")
@@ -213,33 +198,25 @@
         branch_menu.add(gtk.MenuItem("Pu_ll Revisions"))
         branch_menu.add(gtk.MenuItem("Pu_sh Revisions"))
 
+        help_menu = gtk.Menu()
+        help_menuitem = gtk.MenuItem("_Help")
+        help_menuitem.set_submenu(help_menu)
+
+        help_about_menuitem = gtk.ImageMenuItem(gtk.STOCK_ABOUT, self.accel_group)
+        help_about_menuitem.connect('activate', self._about_dialog_cb)
+
+        help_menu.add(help_about_menuitem)
+
         menubar.add(file_menuitem)
         menubar.add(edit_menuitem)
         menubar.add(view_menuitem)
         menubar.add(go_menuitem)
         menubar.add(revision_menuitem)
         menubar.add(branch_menuitem)
+        menubar.add(help_menuitem)
         menubar.show_all()
 
         return menubar
-    
-    def construct_loading_msg(self):
-        image_loading = gtk.image_new_from_stock(gtk.STOCK_REFRESH,
-                                                 gtk.ICON_SIZE_BUTTON)
-        image_loading.show()
-        
-        label_loading = gtk.Label(_("Please wait, loading ancestral graph..."))
-        label_loading.set_alignment(0.0, 0.5)
-        label_loading.show()
-        
-        self.loading_msg_box = gtk.HBox()
-        self.loading_msg_box.set_spacing(5)
-        self.loading_msg_box.set_border_width(5)        
-        self.loading_msg_box.pack_start(image_loading, False, False)
-        self.loading_msg_box.pack_start(label_loading, True, True)
-        self.loading_msg_box.show()
-        
-        return self.loading_msg_box
 
     def construct_top(self):
         """Construct the top-half of the window."""
@@ -250,8 +227,7 @@
         self.treeview.connect('revision-selected',
                 self._treeselection_changed_cb)
 
-        self.treeview.connect('revisions-loaded', 
-                lambda x: self.loading_msg_box.hide())
+        self.treeview.connect('tag-added', lambda w, t, r: self._update_tags())
 
         for col in ["revno", "date"]:
             option = self.config.get_user_option(col + '-column-visible')
@@ -297,6 +273,7 @@
         self.revisionview.show()
         self.revisionview.set_show_callback(self._show_clicked_cb)
         self.revisionview.connect('notify::revision', self._go_clicked_cb)
+        self.treeview.connect('tag-added', lambda w, t, r: self.revisionview.update_tags())
         return self.revisionview
 
     def _tag_selected_cb(self, menuitem, revid):
@@ -388,26 +365,24 @@
     def _tag_revision_cb(self, w):
         try:
             self.treeview.set_sensitive(False)
-            self.branch.unlock()
             dialog = AddTagDialog(self.branch.repository, self.treeview.get_revision().revision_id, self.branch)
             response = dialog.run()
             if response != gtk.RESPONSE_NONE:
                 dialog.hide()
             
                 if response == gtk.RESPONSE_OK:
-                    try:
-                        self.branch.lock_write()
-                        self.branch.tags.set_tag(dialog.tagname, dialog._revid)
-                    finally:
-                        self.branch.unlock()
+                    self.treeview.add_tag(dialog.tagname, dialog._revid)
                 
                 dialog.destroy()
 
         finally:
-            self.branch.lock_read()
-            self.treeview.emit("revision-selected")
             self.treeview.set_sensitive(True)
 
+    def _about_dialog_cb(self, w):
+        from bzrlib.plugins.gtk.about import AboutDialog
+
+        AboutDialog().run()
+
     def _col_visibility_changed(self, col, property):
         self.config.set_user_option(property + '-column-visible', col.get_active())
         self.treeview.set_property(property + '-column-visible', col.get_active())
@@ -424,4 +399,25 @@
         dialog.run()
 
     def _refresh_clicked(self, w):
-        self.treeview.update()
+        self.treeview.refresh()
+
+    def _update_tags(self):
+        menu = gtk.Menu()
+
+        if self.branch.supports_tags():
+            tags = self.branch.tags.get_tag_dict().items()
+            tags.sort()
+            tags.reverse()
+            for tag, revid in tags:
+                tag_item = gtk.MenuItem(tag)
+                tag_item.connect('activate', self._tag_selected_cb, revid)
+                menu.add(tag_item)
+            self.go_menu_tags.set_submenu(menu)
+
+            self.go_menu_tags.set_sensitive(len(tags) != 0)
+        else:
+            self.go_menu_tags.set_sensitive(False)
+
+        self.go_menu_tags.show_all()
+
+



More information about the Pkg-bazaar-commits mailing list