# # # patch "mtn-browse" # from [a02e9ee76d42e5a1c9f50a582631be1b5173b993] # to [4d5832665828e6a3d453ea084e999b50cbc34a75] # # patch "mtn-browse.glade" # from [bb6f5450ac874158428dbe8ca25c33b7adf083ee] # to [c06616f74897b9ba83fd1ab23e06ecc4dfe56cfa] # ============================================================ --- mtn-browse a02e9ee76d42e5a1c9f50a582631be1b5173b993 +++ mtn-browse 4d5832665828e6a3d453ea084e999b50cbc34a75 @@ -51,10 +51,12 @@ use Gnome2; use integer; use Glib qw(FALSE TRUE); use Gnome2; +use Gnome2::VFS -init; use Gtk2 -init; set_locale Gtk2; init Gtk2; use Gtk2::GladeXML; +use Gtk2::SourceView; use IPC::Open3; use Monotone::AutomateStdio; @@ -91,10 +93,59 @@ use constant RLS_DATE_COLUMN = use constant RLS_ICON_COLUMN => 0; use constant RLS_NAME_COLUMN => 1; use constant RLS_DATE_COLUMN => 2; -use constant RLS_MANIFEST_ENTRY_COLUMN => 3; +use constant RLS_AUTHOR_COLUMN => 3; +use constant RLS_MANIFEST_ENTRY_COLUMN => 4; -# The Glade generated widgets object. +# Text viewable application mime types. +my @text_viewable_app_mime_types = + qw(postscript + rtf + x-awk + x-cgi + x-csh + x-glade + x-java + x-javascript + x-jbuilder-project + x-perl + x-php + x-python + x-shellscript + x-troff-man + x-troff + xhtml+xml); + +# Supported text mime types (used for syntax highlighting. + +my @text_mime_types = + ( + { + pattern => qr/.*\.c$/o, + type => "text/x-csrc" + }, + { + pattern => qr/.*\.(C)|(cc)|(cp)|(cpp)|(CPP)|(cxx)|(c\+\+)$/o, + type => "text/x-c++src" + }, + { + pattern => qr/.*\.(h)|(hh)|(H)$/o, + type => "text/x-c++hdr" + }, + { + pattern => qr/.*\.h$/o, + type => "text/x-chdr" + }, + { + pattern => qr/(^[Mm]akefile(\.[^.]+)?)|(.*\.mk)$/o, + type => "text/x-makefile" + }, + { + pattern => qr/.*/o, + type => "text/plain" + } + ); + # ***** FUNCTIONAL PROTOTYPES FOR THIS FILE ***** # Private routines. @@ -137,6 +188,8 @@ sub update_browser_state($$); Gtk2->main(); + Gnome2::VFS->shutdown(); + exit 0; } @@ -161,6 +214,7 @@ sub new_browser_instance() my(@branch_list, $browser, + $font, $renderer, $tv_column, $div); @@ -193,16 +247,18 @@ sub new_browser_instance() $browser->{main_appbar} = $browser->{glade}->get_widget("main_appbar"); $browser->{branch_combo} = $browser->{glade}->get_widget("branch_comboboxentry"); + $browser->{revision_combo} = + $browser->{glade}->get_widget("revision_comboboxentry"); + $browser->{tagged_tick} = + $browser->{glade}->get_widget("tagged_checkbutton"); $browser->{directory_combo} = $browser->{glade}->get_widget("directory_comboboxentry"); $browser->{directory_up_button} = $browser->{glade}->get_widget("directory_up_button"); - $browser->{revision_combo} = - $browser->{glade}->get_widget("revision_comboboxentry"); $browser->{manifest_treeview} = $browser->{glade}->get_widget("manifest_browser_treeview"); - $browser->{tagged_tick} = - $browser->{glade}->get_widget("tagged_only_checkbutton"); + $browser->{file_view_scrolledwindow} = + $browser->{glade}->get_widget("file_view_scrolledwindow"); # Setup the comboboxentry key release signal handlers. @@ -243,6 +299,7 @@ sub new_browser_instance() $browser->{manifest_liststore} = Gtk2::ListStore->new("Glib::String", "Glib::String", "Glib::String", + "Glib::String", "Glib::Scalar"); $browser->{manifest_treeview}->set_model($browser->{manifest_liststore}); @@ -268,17 +325,47 @@ sub new_browser_instance() $browser->{manifest_treeview}->append_column($tv_column); $tv_column = Gtk2::TreeViewColumn->new(); - $tv_column->set_title("Last Modified"); + $tv_column->set_title("Last Update"); $tv_column->set_resizable(TRUE); - $tv_column->set_sizing("fixed"); + $tv_column->set_sizing("grow-only"); $tv_column->set_sort_column_id(RLS_DATE_COLUMN); $renderer = Gtk2::CellRendererText->new(); $tv_column->pack_start($renderer, FALSE); - $tv_column->set_attributes($renderer, "markup" => RLS_DATE_COLUMN); + $tv_column->set_attributes($renderer, "text" => RLS_DATE_COLUMN); $browser->{manifest_treeview}->append_column($tv_column); + $tv_column = Gtk2::TreeViewColumn->new(); + $tv_column->set_title("Author"); + $tv_column->set_resizable(TRUE); + $tv_column->set_sizing("grow-only"); + $tv_column->set_sort_column_id(RLS_AUTHOR_COLUMN); + $renderer = Gtk2::CellRendererText->new(); + $tv_column->pack_start($renderer, FALSE); + $tv_column->set_attributes($renderer, "text" => RLS_AUTHOR_COLUMN); + $browser->{manifest_treeview}->append_column($tv_column); + $browser->{manifest_treeview}->set_search_column(RLS_NAME_COLUMN); + # $tv_column = $browser->{manifest_treeview}->get_column(RLS_DATE_COLUMN); + # $browser->{manifest_treeview}->remove_column($tv_column); + + # Setup the file file viewer (with syntax highlighting). + + $browser->{file_view_svbuffer} = Gtk2::SourceView::Buffer->new(undef); + $browser->{file_view_svbuffer}->set_max_undo_levels(0); + $browser->{file_view_svbuffer}->begin_not_undoable_action(); + $browser->{file_view_svlangmgr} = + Gtk2::SourceView::LanguagesManager->new(); + $browser->{file_view_sv} = Gtk2::SourceView::View-> + new_with_buffer($browser->{file_view_svbuffer}); + $font = Gtk2::Pango::FontDescription->from_string("monospace 10"); + $browser->{file_view_sv}->modify_font($font) if (defined($font)); + $browser->{file_view_sv}->set_cursor_visible(FALSE); + $browser->{file_view_sv}->set_editable(FALSE); + $browser->{glade}->get_widget("file_view_scrolledwindow")-> + add($browser->{file_view_sv}); + $browser->{file_view_sv}->show_all(); + # Update the browser'a internal state. update_browser_state($browser, DATABASE_CHANGED); @@ -648,7 +735,8 @@ sub manifest_treeview_row_activated_cb($ my($widget, $tree_path, $tree_view_column, $browser) = @_; my(@list, - $manifest_entry); + $manifest_entry, + $short_name); return if ($browser->{in_cb}); local $browser->{in_cb} = 1; @@ -659,6 +747,7 @@ sub manifest_treeview_row_activated_cb($ (sub { my($model, $path, $iter) = @_; + $short_name = $model->get($iter, RLS_NAME_COLUMN); $manifest_entry = $model->get($iter, RLS_MANIFEST_ENTRY_COLUMN); }); @@ -674,6 +763,13 @@ sub manifest_treeview_row_activated_cb($ $browser->{main_appbar}->set_status(""); update_browser_state($browser, DIRECTORY_CHANGED); } + else + { + $browser->{file_being_viewed} = {short_name => $short_name, + manifest_entry => $manifest_entry}; + $browser->{main_appbar}->set_status(""); + update_browser_state($browser, FILE_CHANGED); + } } # @@ -765,8 +861,7 @@ sub update_browser_state($$) if ($changed & BRANCH) { - my($branch, - @branch_list); + my @branch_list; # Reset the branch selection. @@ -782,7 +877,7 @@ sub update_browser_state($$) # Update the branch list combobox. $browser->{branch_combo}->get_model()->clear(); - foreach $branch (@branch_list) + foreach my $branch (@branch_list) { $browser->{branch_combo}->append_text($branch); } @@ -795,8 +890,7 @@ sub update_browser_state($$) if ($changed & REVISION) { - my($revision, - @revision_list); + my @revision_list; # Reset the revision selection. @@ -820,7 +914,7 @@ sub update_browser_state($$) # Update the revision list combobox. $browser->{revision_combo}->get_model()->clear(); - foreach $revision (@revision_list) + foreach my $revision (@revision_list) { $revision = "i:" . $revision; $browser->{revision_combo}->append_text($revision); @@ -835,7 +929,6 @@ sub update_browser_state($$) { my(@directory_list, - $item, @manifest_list, $revision); @@ -846,6 +939,10 @@ sub update_browser_state($$) $browser->{directory_combo_details}->{last_typed_len} = 0; $browser->{directory_combo_details}->{value} = ""; + # Reset the name of the file being viewed. + + $browser->{file_being_viewed} = {}; + # Get the new manifest. if ($browser->{revision_combo_details}->{completed}) @@ -858,7 +955,7 @@ sub update_browser_state($$) # Generate a simple list of directories for auto completion. - foreach $item (@manifest_list) + foreach my $item (@manifest_list) { push(@directory_list, $item->{name}) if ($item->{type} eq "directory"); @@ -868,7 +965,7 @@ sub update_browser_state($$) # Update the directory list combobox. $browser->{directory_combo}->get_model()->clear(); - foreach $item (@directory_list) + foreach my $item (@directory_list) { $browser->{directory_combo}->append_text($item); } @@ -881,8 +978,12 @@ sub update_browser_state($$) if ($changed & DIRECTORY_VIEW) { - my(@directory_entry_list, - $item); + my($author, + @certs_list, + @directory_entry_list, + $last_update, + @revision_list, + $revision); # Reset the manifest tree view. @@ -897,7 +998,6 @@ sub update_browser_state($$) @{$browser->{manifest}}, @directory_entry_list); } - $browser->{directory_entry_list} = address@hidden; # Disable the directory up button if we are already at the top level, # otherwise make sure it is enabled. @@ -908,16 +1008,66 @@ sub update_browser_state($$) # Update the directory tree view. - foreach $item (@directory_entry_list) + $revision = $browser->{revision_combo_details}->{value}; + $revision =~ s/^i://o; + foreach my $item (@directory_entry_list) { + + # Get the latest modification time if the entry is a file (caching + # the result in the manifest for future reference if we have to + # work it out). + + if ($item->{manifest_entry}->{type} eq "file") + { + if (! exists($item->{manifest_entry}->{author})) + { + $browser->{mtn}->get_content_changed + (address@hidden, + $revision, + $item->{manifest_entry}->{name}); + $browser->{mtn}->certs(address@hidden, $revision_list[0]); + $author = $last_update = ""; + foreach my $cert (@certs_list) + { + if ($cert->{name} eq "author") + { + $author = $cert->{value}; + $item->{manifest_entry}->{author} = $author; + } + if ($cert->{name} eq "date") + { + $last_update = $cert->{value}; + $last_update =~ s/T/ /o; + $item->{manifest_entry}->{last_update} = + $last_update; + } + last if ($author ne "" && $last_update ne ""); + } + } + else + { + $author = $item->{manifest_entry}->{author}; + $last_update = $item->{manifest_entry}->{last_update}; + } + } + else + { + $author = ""; + $last_update = ""; + } + + # Put the entry into the liststore. + $browser->{manifest_liststore}-> set($browser->{manifest_liststore}->append(), RLS_ICON_COLUMN, ($item->{manifest_entry}->{type} eq "directory") ? "gtk-open" : "gtk-file", RLS_NAME_COLUMN, $item->{name}, - RLS_DATE_COLUMN, "2005-01-01", + RLS_DATE_COLUMN, $last_update, + RLS_AUTHOR_COLUMN, $author, RLS_MANIFEST_ENTRY_COLUMN, $item->{manifest_entry}); + } $browser->{manifest_treeview}->scroll_to_point(0, 0) @@ -925,11 +1075,131 @@ sub update_browser_state($$) } - if ($changed & FILE) + # The displayed file contents has changed. + + if ($changed & DISPLAY_OF_FILE) { + + my($contents, + $lang, + $mime_type, + $scrolled_window); + + # Reset the file view buffer. + + $browser->{file_view_svbuffer}->set_text(""); + $browser->{file_view_svbuffer}->set("highlight", FALSE); + + # Load up the selected file's contents into the file viewer. + + if (exists($browser->{file_being_viewed}->{short_name})) + { + + # Get contents. + + $browser->{mtn}->get_file + (\$contents, + $browser->{file_being_viewed}->{manifest_entry}->{file_id}); + + # Try and work out the mime type, first based on contents and then + # based on the file name extension. + + if (! defined($mime_type = + Gnome2::VFS->get_mime_type_for_data($contents)) + || $mime_type eq "text/plain") + { + my $name = $browser->{file_being_viewed}->{short_name}; + foreach my $item (@text_mime_types) + { + if ($name =~ m/$item->{pattern}/) + { + $mime_type = $item->{type}; + last; + } + } + } + + # Override some mis-identified types. + + $mime_type = "image/svg+xml" + if ($mime_type eq "text/xml" + && $browser->{file_being_viewed}->{short_name} + =~ m/.*\.svg$/o); + + # If it's image data then attempt to render it. + + if ($mime_type =~ m/^image\/.+$/o) + { + eval + { + my $loader = Gtk2::Gdk::PixbufLoader->new(); + $loader->write($contents); + $loader->close(); + $browser->{file_view_svbuffer}->insert_pixbuf + ($browser->{file_view_svbuffer}->get_start_iter(), + $loader->get_pixbuf()); + }; + $browser->{file_view_svbuffer}-> + set_text("<" . $mime_type . ">\n") if ($@ ne ""); + } + else + { + + my $ok_to_render = 0; + + # Attempt to syntax highlight the file if it looks safe. + + if ($mime_type =~ m/^application\/.+$/o) + { + my $part; + ($part) = ($mime_type =~ m/^application\/(.+)$/o); + foreach my $item (@text_viewable_app_mime_types) + { + if ($part eq $item) + { + $ok_to_render = 1; + last; + } + } + } + + if ($mime_type =~ m/^text\/.+$/o || $ok_to_render) + { + if (defined($lang = $browser->{file_view_svlangmgr}-> + get_language_from_mime_type($mime_type))) + { + $browser->{file_view_svbuffer}->set("highlight", TRUE); + $browser->{file_view_svbuffer}->set_language($lang); + } + + # Load in the contents. + + $browser->{file_view_svbuffer}->set_text($contents); + } + else + { + $browser->{file_view_svbuffer}->set("highlight", FALSE); + $browser->{file_view_svbuffer}-> + set_text("<" . $mime_type . ">\n"); + } + + } + + # Scroll back up to the top left. + + if ($browser->{file_view_scrolledwindow}->realized()) + { + $browser->{file_view_scrolledwindow}-> + get_vadjustment()->set_value(0); + $browser->{file_view_scrolledwindow}-> + get_hadjustment()->set_value(0); + } + + } + } - if ($changed & DISPLAY_OF_FILE) + if ($changed & FILE) { } @@ -1014,7 +1284,7 @@ sub get_completion(address@hidden;\%) $$result = ""; foreach $char (split(//o, $value)) { - last unless exists($level->{$char}); + last unless (exists($level->{$char})); $level = $level->{$char}; $$result .= $char; } ============================================================ --- mtn-browse.glade bb6f5450ac874158428dbe8ca25c33b7adf083ee +++ mtn-browse.glade c06616f74897b9ba83fd1ab23e06ecc4dfe56cfa @@ -230,7 +230,7 @@ True - New File + New workspace gtk-new True True @@ -238,14 +238,14 @@ False - True + False True - Open File + Open database gtk-open True True @@ -253,24 +253,84 @@ False - True + False True - Save File - gtk-save + Reload database + _Reload + True + gtk-refresh True True False False - True + False + + + + True + Database properties + gtk-properties + True + True + False + + + False + False + + + + + + True + True + True + True + + + False + False + + + + + + True + User preferences + gtk-preferences + True + True + False + + + False + False + + + + + + True + Help + gtk-help + True + True + False + + + False + False + + @@ -317,18 +377,27 @@ 5 - + True - Branch: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 + Project branch to access + True + False + + + + True + Branch: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + 0 @@ -368,18 +437,27 @@ - + True - Revision: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 + Revision within project to access + True + False + + + + True + Revision: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + 0 @@ -419,13 +497,13 @@ - + True Select this if only those revisions that have been tagged on the current branch are to be listed True - Tagged Only + Tagged True GTK_RELIEF_NORMAL True @@ -446,10 +524,20 @@ criteria for selecting a revisionUse more advanced selection criteria for selecting a revision True - Advanced Find - True GTK_RELIEF_NORMAL True + + + + True + gtk-find + 4 + 0.5 + 0.5 + 0 + 0 + + 0 @@ -457,6 +545,61 @@ criteria for selecting a revisionFalse + + + + True + View the revision's change log + True + GTK_RELIEF_NORMAL + True + + + + True + gtk-dialog-info + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + + True + Compare revision contents +with another revision + True + GTK_RELIEF_NORMAL + True + + + + True + gnome-stock-multiple-file + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + @@ -527,18 +670,27 @@ criteria for selecting a revision5 - + True - Directory: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 + Directory to be viewed + True + False + + + + True + Directory: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + 0 @@ -583,6 +735,7 @@ criteria for selecting a revision25 25 True + Go up one directory level True GTK_RELIEF_NORMAL True @@ -618,8 +771,8 @@ criteria for selecting a revision True True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT @@ -650,7 +803,7 @@ criteria for selecting a revision True - <b>Browse</b> + <b>Revision Browser</b> False True GTK_JUSTIFY_LEFT @@ -714,30 +867,6 @@ criteria for selecting a revision5 - - True - Last Update: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - True True @@ -752,7 +881,7 @@ criteria for selecting a revisionName of the file being displayed 1 1 - 0 0 118 10 106.2 118 + 0 0 277 10 249.3 277 0 0 17 10 15.3 17 @@ -804,7 +933,7 @@ criteria for selecting a revisionDate of when file was last changed 1 1 - 0 0 118 10 106.2 118 + 0 0 277 10 249.3 277 0 0 17 10 15.3 17 @@ -842,18 +971,27 @@ criteria for selecting a revision - + True - File: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 + Name of file being displayed + True + False + + + + True + File: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + 0 @@ -861,9 +999,43 @@ criteria for selecting a revision0 1 fill - + fill + + + + True + Time when the displayed file was last +updated with respect to this revision + True + False + + + + True + Last Update: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + + + 0 + 1 + 1 + 2 + fill + fill + + 0 @@ -882,30 +1054,6 @@ criteria for selecting a revision5 - - True - Revision Id: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - True True @@ -920,7 +1068,7 @@ criteria for selecting a revisionFile's unique id in database 1 1 - 0 0 124 10 111.6 124 + 0 0 283 10 254.7 283 0 0 17 10 15.3 17 @@ -973,7 +1121,7 @@ file was last changed file was last changed 1 1 - 0 0 124 10 111.6 124 + 0 0 283 10 254.7 283 0 0 17 10 15.3 17 @@ -1011,18 +1159,27 @@ file was last changed - + True - File Id: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 + Id of file being displayed + True + False + + + + True + File Id: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + 0 @@ -1030,9 +1187,43 @@ file was last changed 0 1 fill - + fill + + + + True + Revision id in which the displayed file was +last updated with respect to this revision + True + False + + + + True + Revision Id: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + + + 0 + 1 + 1 + 2 + fill + fill + + 0 @@ -1058,29 +1249,13 @@ file was last changed True True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC GTK_SHADOW_IN GTK_CORNER_TOP_LEFT - - True - True - False - False - True - GTK_JUSTIFY_LEFT - GTK_WRAP_NONE - True - 0 - 0 - 0 - 0 - 0 - 0 - - + @@ -1091,42 +1266,30 @@ file was last changed - + True False 5 - + True - <b>Revision:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - Get all the information -on the current revision + Search text True - Information - True GTK_RELIEF_NORMAL True + + + + True + gtk-find + 4 + 0.5 + 0.5 + 0 + 0 + + 0 @@ -1136,118 +1299,140 @@ on the current revision - + True - Load the contents of -this file into an editor + Save file contents to disk True - View - True GTK_RELIEF_NORMAL True + + + + True + gtk-save-as + 4 + 0.5 + 0.5 + 0 + 0 + + 0 False False - GTK_PACK_END - + True - Save the contents -of this file to disk + Load file contents +into an editor True - Save As - True GTK_RELIEF_NORMAL True + + + + True + gtk-open + 4 + 0.5 + 0.5 + 0 + 0 + + 0 False False - GTK_PACK_END - + True - Compare the current revision -of the file with an older one + Annotate file contents True - Difference - True GTK_RELIEF_NORMAL True + + + + True + gnome-stock-text-bulleted-list + 4 + 0.5 + 0.5 + 0 + 0 + + 0 False False - GTK_PACK_END True - View the file's change log + View file's change log True - Change Log - True GTK_RELIEF_NORMAL True + + + + True + gtk-dialog-info + 4 + 0.5 + 0.5 + 0 + 0 + + 0 False False - GTK_PACK_END - + True - Get an annotated listing -of the current file + Compare file contents +with another version + True - Annotate - True GTK_RELIEF_NORMAL True - - - 0 - False - False - GTK_PACK_END - - - - - True - <b>File:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 + + + True + gnome-stock-multiple-file + 4 + 0.5 + 0.5 + 0 + 0 + + 0 False False - GTK_PACK_END @@ -1272,7 +1457,7 @@ of the current file True - <b>File View</b> + <b>File Viewer</b> False True GTK_JUSTIFY_LEFT @@ -1437,18 +1622,27 @@ of the current file - + True - Database: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 + Name of the database being accessed + True + False + + + + True + Database: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + 0 @@ -1456,23 +1650,32 @@ of the current file 0 1 fill - + fill - + True - Author: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 + Author of the currently selected revision + True + False + + + + True + Author: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + 0 @@ -1480,7 +1683,7 @@ of the current file 1 2 fill - + fill @@ -1501,54 +1704,6 @@ of the current file 5 - - True - Revision Id: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Change Log: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - True True @@ -1647,6 +1802,72 @@ of the current file fill + + + + True + Id of the currently selected revision + True + False + + + + True + Revision Id: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + + + 0 + 1 + 0 + 1 + fill + fill + + + + + + True + Change log's first line for the currently selected revision + True + False + + + + True + Change Log: + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + + + + + 0 + 1 + 1 + 2 + fill + fill + + 0