# # # patch "lib/perl/AdvancedFind.pm" # from [55f479535ab7252fc8db2acae5398ce2ed82c147] # to [48410d00023da121a42f6d6ef55b885b087ffc1b] # # patch "lib/perl/FindFiles.pm" # from [8545f8bea2d6d5b76ff34a5d949a7e29a553315d] # to [50442bdb5574186ddbdd9c57c2b9167d86eed66d] # # patch "lib/perl/ManageServerBookmarks.pm" # from [ffd8ccb8c00934951b92dc89e3c6edcd34ddfc36] # to [d5f02f11915c8ae331935b51bd41a18d5ac3297d] # # patch "lib/perl/Preferences.pm" # from [7efe98b8d386c359f092b1abba558689a081a763] # to [cdb591343c2e489bc75b43c693b1eb549850c850] # # patch "lib/ui/mtn-browse.glade" # from [e41c19886ad565ade73e69402c1a878e2345d01a] # to [fba49e593b91f655d1edcbe681f8bdfe406cff19] # # patch "mtn-browse" # from [44ebbb64d1104c09425fcd6290a5a000a53ee294] # to [639c401c334db456171039a883b861d01a229d7f] # ============================================================ --- lib/perl/AdvancedFind.pm 55f479535ab7252fc8db2acae5398ce2ed82c147 +++ lib/perl/AdvancedFind.pm 48410d00023da121a42f6d6ef55b885b087ffc1b @@ -66,7 +66,7 @@ sub populate_button_clicked_cb($$); sub execute_button_clicked_cb($$); sub get_advanced_find_window($); sub populate_button_clicked_cb($$); -sub revisions_treeview_cursor_changed_cb($$); +sub revisions_treeselection_changed_cb($$); sub revisions_treeview_row_activated_cb($$$$); sub simple_query_radiobutton_toggled_cb($$); sub term_combobox_changed_cb($$); @@ -419,7 +419,7 @@ sub term_combobox_changed_cb($$) # ############################################################################## # -# Routine - revisions_treeview_cursor_changed_cb +# Routine - revisions_treeselection_changed_cb # # Description - Callback routine called when the user selects an entry in # the revisions treeview in the advanced find window. @@ -433,7 +433,7 @@ sub term_combobox_changed_cb($$) -sub revisions_treeview_cursor_changed_cb($$) +sub revisions_treeselection_changed_cb($$) { my($widget, $advanced_find) = @_; @@ -441,22 +441,32 @@ sub revisions_treeview_cursor_changed_cb return if ($advanced_find->{in_cb}); local $advanced_find->{in_cb} = 1; - my $revision_id; + # Get the selected revision id and update the window accordingly. - # Get the selected revision id. - - $widget->get_selection()->selected_foreach - (sub { - my($model, $path, $iter) = @_; - $revision_id = $model->get($iter, AFLS_REVISION_ID_COLUMN); }); - - if (defined($revision_id) - && $revision_id + if ($widget->count_selected_rows() > 0) + { + my($iter, + $model, + $revision_id); + ($model, $iter) = $widget->get_selected(); + $revision_id = $model->get($iter, AFLS_REVISION_ID_COLUMN); + if ($revision_id ne $advanced_find->{revisions_treeview_details}->{value}) + { + $advanced_find->{revisions_treeview_details}->{value} = + $revision_id; + &{$advanced_find->{update_handler}}($advanced_find, + SELECTED_REVISION_CHANGED); + } + } + else { - $advanced_find->{revisions_treeview_details}->{value} = $revision_id; - &{$advanced_find->{update_handler}}($advanced_find, - SELECTED_REVISION_CHANGED); + if ($advanced_find->{revisions_treeview_details}->{value} ne "") + { + $advanced_find->{revisions_treeview_details}->{value} = ""; + &{$advanced_find->{update_handler}}($advanced_find, + SELECTED_REVISION_CHANGED); + } } } @@ -702,6 +712,9 @@ sub get_advanced_find_window($) $instance->{revisions_treeview}-> set_search_equal_func(\&treeview_column_searcher); + $instance->{revisions_treeview}->get_selection()->signal_connect + ("changed", \&revisions_treeselection_changed_cb, $instance); + # Setup the revision details viewer. $instance->{details_buffer} = ============================================================ --- lib/perl/FindFiles.pm 8545f8bea2d6d5b76ff34a5d949a7e29a553315d +++ lib/perl/FindFiles.pm 50442bdb5574186ddbdd9c57c2b9167d86eed66d @@ -81,7 +81,7 @@ sub get_find_files_window(); sub between_range_radiobutton_toggled_cb($$); sub date_range_checkbutton_toggled_cb($$); sub get_find_files_window(); -sub results_treeview_cursor_changed_cb($$); +sub results_treeselection_changed_cb($$); sub results_treeview_row_activated_cb($$$$); sub save_query_from_gui($); sub search_files_button_clicked_cb($$); @@ -665,7 +665,7 @@ sub search_files_button_clicked_cb($$) # ############################################################################## # -# Routine - results_treeview_cursor_changed_cb +# Routine - results_treeselection_changed_cb # # Description - Callback routine called when the user selects an entry in # the results treeview in a find files window. @@ -678,7 +678,7 @@ sub search_files_button_clicked_cb($$) -sub results_treeview_cursor_changed_cb($$) +sub results_treeselection_changed_cb($$) { my($widget, $instance) = @_; @@ -686,22 +686,21 @@ sub results_treeview_cursor_changed_cb($ return if ($instance->{in_cb}); local $instance->{in_cb} = 1; - my $manifest_entry; + my($author, + $file_id, + $last_changed_revision, + $last_update); - # Get the manifest entry details for the item that was selected. + # Get the manifest entry details for the item that was selected and then + # display them if appropriate. - $widget->get_selection()->selected_foreach - (sub { - my($model, $path, $iter) = @_; - $manifest_entry = $model->get($iter, RLS_MANIFEST_ENTRY_COLUMN); - }); - - if (defined($manifest_entry)) + if ($widget->count_selected_rows() > 0) { - my($author, - $file_id, - $last_changed_revision, - $last_update); + my($iter, + $manifest_entry, + $model); + ($model, $iter) = $widget->get_selected(); + $manifest_entry = $model->get($iter, RLS_MANIFEST_ENTRY_COLUMN); if ($manifest_entry->{type} eq "file") { if (! exists($manifest_entry->{author})) @@ -716,16 +715,16 @@ sub results_treeview_cursor_changed_cb($ $last_update = $manifest_entry->{last_update}; $last_update =~ s/T/ /; } - else - { - $author = $file_id = $last_changed_revision = $last_update = ""; - } - set_label_value($instance->{author_value_label}, $author); - set_label_value($instance->{file_id_value_label}, $file_id); - set_label_value($instance->{last_update_value_label}, $last_update); - set_label_value($instance->{file_revision_id_value_label}, - $last_changed_revision); } + else + { + $author = $file_id = $last_changed_revision = $last_update = ""; + } + set_label_value($instance->{author_value_label}, $author); + set_label_value($instance->{file_id_value_label}, $file_id); + set_label_value($instance->{last_update_value_label}, $last_update); + set_label_value($instance->{file_revision_id_value_label}, + $last_changed_revision); } # @@ -975,10 +974,16 @@ sub get_find_files_window() $tv_column->pack_start($renderer, TRUE); $tv_column->set_attributes($renderer, "text" => 0); $instance->{results_treeview}->append_column($tv_column); + $instance->{results_treeview}->set_search_column(0); $instance->{results_treeview}-> set_search_equal_func(\&treeview_column_searcher); + $instance->{results_treeview}->get_selection()-> + signal_connect("changed", + \&results_treeselection_changed_cb, + $instance); + # Disable the appropriate widgets by default. for my $widget (@{$instance->{date_sensitive_group}}, ============================================================ --- lib/perl/ManageServerBookmarks.pm ffd8ccb8c00934951b92dc89e3c6edcd34ddfc36 +++ lib/perl/ManageServerBookmarks.pm d5f02f11915c8ae331935b51bd41a18d5ac3297d @@ -65,7 +65,7 @@ sub server_entry_changed_cb($$); sub load_servers_treeview($); sub remove_server_button_clicked_cb($$); sub server_entry_changed_cb($$); -sub servers_treeview_cursor_changed_cb($$); +sub servers_treeselection_changed_cb($$); # ############################################################################## # @@ -115,7 +115,7 @@ sub manage_server_bookmarks($$) # ############################################################################## # -# Routine - servers_treeview_cursor_changed_cb +# Routine - servers_treeselection_changed_cb # # Description - Callback routine called when the user selects an entry in # the servers treeview in the manage server bookmarks window. @@ -128,7 +128,7 @@ sub manage_server_bookmarks($$) -sub servers_treeview_cursor_changed_cb($$) +sub servers_treeselection_changed_cb($$) { my($widget, $instance) = @_; @@ -136,19 +136,23 @@ sub servers_treeview_cursor_changed_cb($ return if ($instance->{in_cb}); local $instance->{in_cb} = 1; - # Store the details of the newly selected file name pattern. + # Store the details of the newly selected server if one was selected, also + # enabling the remove button if appropriate. - $widget->get_selection()->selected_foreach - (sub { - my($model, $path, $iter) = @_; - $instance->{selected_server} = $model->get($iter, 0); - }); + if ($widget->count_selected_rows() > 0) + { + my($iter, + $model); + ($model, $iter) = $widget->get_selected(); + $instance->{selected_server} = $model->get($iter, 0); + $instance->{remove_server_button}->set_sensitive(TRUE); + } + else + { + $instance->{selected_server} = undef; + $instance->{remove_server_button}->set_sensitive(FALSE); + } - # Enable the remove server button if something was selected. - - $instance->{remove_server_button}->set_sensitive(TRUE) - if (defined($instance->{selected_server})); - } # ############################################################################## @@ -376,21 +380,11 @@ sub get_manage_server_bookmarks_window($ $instance->{servers_treeview}-> set_search_equal_func(\&treeview_column_searcher); - } - else - { + $instance->{servers_treeview}->get_selection()-> + signal_connect("changed", + \&servers_treeselection_changed_cb, + $instance); - my($height, - $width); - - $instance->{in_cb} = 0; - local $instance->{in_cb} = 1; - - # Reset the manage server bookmarks window's state. - - ($width, $height) = $instance->{window}->get_default_size(); - $instance->{window}->resize($width, $height); - } local $instance->{in_cb} = 1; @@ -398,11 +392,6 @@ sub get_manage_server_bookmarks_window($ $instance->{selected_server} = undef; $instance->{server_bookmarks} = []; - # Load in the server bookmarks. - - @{$instance->{server_bookmarks}} = @$bookmarks; - load_servers_treeview($instance); - # Disable the add and remove buttons and make sure the server entry field # is empty. @@ -416,6 +405,11 @@ sub get_manage_server_bookmarks_window($ $instance->{window}->show_all(); $instance->{window}->present(); + # Load in the server bookmarks. + + @{$instance->{server_bookmarks}} = @$bookmarks; + load_servers_treeview($instance); + # Make sure that the server entry field has the focus. $instance->{server_entry}->grab_focus(); ============================================================ --- lib/perl/Preferences.pm 7efe98b8d386c359f092b1abba558689a081a763 +++ lib/perl/Preferences.pm cdb591343c2e489bc75b43c693b1eb549850c850 @@ -151,16 +151,17 @@ sub file_name_pattern_entry_changed_cb($ sub database_browse_button_clicked_cb($$); sub defaults_button_clicked_cb($$); sub file_name_pattern_entry_changed_cb($$); -sub file_name_patterns_treeview_cursor_changed_cb($$); +sub file_name_patterns_treeselection_changed_cb($$); sub get_preferences_window($$); sub home_dir(); sub initialise_mime_info_table(); sub initialise_preferences(); +sub load_current_mime_types_settings($); sub load_file_name_patterns_treeview($); sub load_mime_types_page($); sub load_preferences_into_gui($); sub mime_type_entry_changed_cb($$); -sub mime_types_treeview_cursor_changed_cb($$); +sub mime_types_treeselection_changed_cb($$); sub remove_file_name_pattern_button_clicked_cb($$); sub remove_mime_type_button_clicked_cb($$); sub save_current_mime_types_settings($); @@ -519,7 +520,7 @@ sub database_browse_button_clicked_cb($$ # ############################################################################## # -# Routine - mime_types_treeview_cursor_changed_cb +# Routine - mime_types_treeselection_changed_cb # # Description - Callback routine called when the user selects an entry in # the MIME types treeview in the preferences window. @@ -532,7 +533,7 @@ sub database_browse_button_clicked_cb($$ -sub mime_types_treeview_cursor_changed_cb($$) +sub mime_types_treeselection_changed_cb($$) { my($widget, $instance) = @_; @@ -541,66 +542,46 @@ sub mime_types_treeview_cursor_changed_c local $instance->{in_cb} = 1; my($entry, - $entry_path); + $entry_path, + @paths); # Get the MIME table entry details for the item that was selected. - $widget->get_selection()->selected_foreach - (sub { - my($model, $path, $iter) = @_; - $entry = $model->get($iter, MTLS_ENTRY_COLUMN); - $entry_path = $path->to_string(); - }); + @paths = $widget->get_selected_rows(); + if (scalar(@paths) > 0) + { + my($iter, + $model); + ($model, $iter) = $widget->get_selected(); + $entry = $model->get($iter, MTLS_ENTRY_COLUMN); + $entry_path = $paths[0]->to_string(); + } - # If something has been selected and it is different from before then deal - # with it. + # If the selection has changed then, if necessary, save any changes made + # and update the liststore before loading in the new entry. - if (defined($entry) - && (! defined($instance->{selected_mime_types_entry}) + if (defined($instance->{selected_mime_types_entry}) + && (! defined($entry) || $entry != $instance->{selected_mime_types_entry})) { + save_current_mime_types_settings($instance); + $instance->{mime_types_liststore}-> + set($instance->{mime_types_liststore}-> + get_iter_from_string($instance->{selected_mime_types_path}), + MTLS_PATTERNS_COLUMN, + join(" ", + @{$instance->{selected_mime_types_entry}-> + {file_name_patterns}}), + MTLS_HELPER_COLUMN, + $instance->{selected_mime_types_entry}->{helper_application}); + } - # If an entry was selected before then save any changes and update the - # liststore. + # Load in the newly selected entry. - if (defined($instance->{selected_mime_types_entry})) - { - save_current_mime_types_settings($instance); - $instance->{mime_types_liststore}-> - set($instance->{mime_types_liststore}-> - get_iter_from_string($instance-> - {selected_mime_types_path}), - MTLS_PATTERNS_COLUMN, - join(" ", - @{$instance->{selected_mime_types_entry}-> - {file_name_patterns}}), - MTLS_HELPER_COLUMN, - $instance->{selected_mime_types_entry}-> - {helper_application}); - } + $instance->{selected_mime_types_entry} = $entry; + $instance->{selected_mime_types_path} = $entry_path; + load_current_mime_types_settings($instance); - # Load in the newly selected entry. - - $instance->{selected_mime_types_entry} = $entry; - $instance->{selected_mime_types_path} = $entry_path; - $instance->{remove_mime_type_button}->set_sensitive(TRUE); - foreach my $widget (@{$instance->{mime_type_sensitivity_list}}) - { - $widget->set_sensitive(TRUE); - } - load_file_name_patterns_treeview($instance); - $instance->{file_name_pattern_entry}->set_text(""); - $instance->{add_file_name_pattern_button}->set_sensitive(FALSE); - $instance->{remove_file_name_pattern_button}->set_sensitive(FALSE); - $instance->{display_internally_checkbutton}-> - set_active($entry->{display_internally} ? TRUE : FALSE); - $instance->{syntax_highlight_checkbutton}-> - set_active($entry->{syntax_highlight} ? TRUE : FALSE); - $instance->{helper_application_entry}-> - set_text($entry->{helper_application}); - - } - } # ############################################################################## @@ -764,7 +745,7 @@ sub remove_mime_type_button_clicked_cb($ # ############################################################################## # -# Routine - file_name_patterns_treeview_cursor_changed_cb +# Routine - file_name_patterns_treeselection_changed_cb # # Description - Callback routine called when the user selects an entry in # the file name patterns treeview in the preferences window. @@ -777,7 +758,7 @@ sub remove_mime_type_button_clicked_cb($ -sub file_name_patterns_treeview_cursor_changed_cb($$) +sub file_name_patterns_treeselection_changed_cb($$) { my($widget, $instance) = @_; @@ -787,17 +768,20 @@ sub file_name_patterns_treeview_cursor_c # Store the details of the newly selected file name pattern. - $widget->get_selection()->selected_foreach - (sub { - my($model, $path, $iter) = @_; - $instance->{selected_file_name_pattern} = $model->get($iter, 0); - }); + if ($widget->count_selected_rows() > 0) + { + my($iter, + $model); + ($model, $iter) = $widget->get_selected(); + $instance->{selected_file_name_pattern} = $model->get($iter, 0); + $instance->{remove_file_name_pattern_button}->set_sensitive(TRUE); + } + else + { + $instance->{selected_file_name_pattern} = undef; + $instance->{remove_file_name_pattern_button}->set_sensitive(FALSE); + } - # Enable the remove file name patterns button if something was selected. - - $instance->{remove_file_name_pattern_button}->set_sensitive(TRUE) - if (defined($instance->{selected_file_name_pattern})); - } # ############################################################################## @@ -1155,6 +1139,11 @@ sub get_preferences_window($$) $instance->{mime_types_treeview}-> set_search_equal_func(\&treeview_column_searcher); + $instance->{mime_types_treeview}->get_selection()-> + signal_connect("changed", + \&mime_types_treeselection_changed_cb, + $instance); + # Setup the file name patterns list. $instance->{file_name_patterns_liststore} = @@ -1173,6 +1162,11 @@ sub get_preferences_window($$) $instance->{file_name_patterns_treeview}-> set_search_equal_func(\&treeview_column_searcher); + $instance->{file_name_patterns_treeview}->get_selection()-> + signal_connect("changed", + \&file_name_patterns_treeselection_changed_cb, + $instance); + # Reparent the preferences window to the specified parent. $instance->{window}->set_transient_for($parent); @@ -1380,20 +1374,9 @@ sub load_mime_types_page($) if ($instance->{mime_types_treeview}->realized()); $instance->{mime_type_entry}->set_text(""); $instance->{add_mime_type_button}->set_sensitive(FALSE); - $instance->{remove_mime_type_button}->set_sensitive(FALSE); - $instance->{file_name_patterns_liststore}->clear(); - $instance->{file_name_pattern_entry}->set_text(""); - foreach my $widget (@{$instance->{mime_type_sensitivity_list}}) - { - $widget->set_sensitive(FALSE); - } - $instance->{add_file_name_pattern_button}->set_sensitive(FALSE); - $instance->{remove_file_name_pattern_button}->set_sensitive(FALSE); - $instance->{display_internally_checkbutton}->set_active(FALSE); - $instance->{syntax_highlight_checkbutton}->set_active(FALSE); - $instance->{helper_application_entry}->set_text(""); $instance->{selected_mime_types_entry} = undef; $instance->{selected_mime_types_path} = undef; + load_current_mime_types_settings($instance); } # @@ -1542,10 +1525,67 @@ sub save_preferences_from_gui($) # ############################################################################## # +# Routine - load_current_mime_types_settings +# +# Description - load the settings for the currently selected MIME type +# entry from the preferences record. +# +# Data - $instance : The associated window instance. +# +############################################################################## + + + +sub load_current_mime_types_settings($) +{ + + my $instance = $_[0]; + + if (defined($instance->{selected_mime_types_entry})) + { + $instance->{remove_mime_type_button}->set_sensitive(TRUE); + load_file_name_patterns_treeview($instance); + $instance->{file_name_pattern_entry}->set_text(""); + foreach my $widget (@{$instance->{mime_type_sensitivity_list}}) + { + $widget->set_sensitive(TRUE); + } + $instance->{add_file_name_pattern_button}->set_sensitive(FALSE); + $instance->{remove_file_name_pattern_button}->set_sensitive(FALSE); + $instance->{display_internally_checkbutton}-> + set_active($instance->{selected_mime_types_entry}-> + {display_internally} ? TRUE : FALSE); + $instance->{syntax_highlight_checkbutton}-> + set_active($instance->{selected_mime_types_entry}-> + {syntax_highlight} ? TRUE : FALSE); + $instance->{helper_application_entry}-> + set_text($instance->{selected_mime_types_entry}-> + {helper_application}); + } + else + { + $instance->{remove_mime_type_button}->set_sensitive(FALSE); + $instance->{file_name_patterns_liststore}->clear(); + $instance->{file_name_pattern_entry}->set_text(""); + foreach my $widget (@{$instance->{mime_type_sensitivity_list}}) + { + $widget->set_sensitive(FALSE); + } + $instance->{add_file_name_pattern_button}->set_sensitive(FALSE); + $instance->{remove_file_name_pattern_button}->set_sensitive(FALSE); + $instance->{display_internally_checkbutton}->set_active(FALSE); + $instance->{syntax_highlight_checkbutton}->set_active(FALSE); + $instance->{helper_application_entry}->set_text(""); + } + +} +# +############################################################################## +# # Routine - save_current_mime_types_settings # -# Description - Save the settings for the currently selected MIME typ entry -# back to the preferences record. +# Description - Save the settings for the currently selected MIME type +# entry back to the preferences record. # # Data - $instance : The associated window instance. # ============================================================ --- lib/ui/mtn-browse.glade e41c19886ad565ade73e69402c1a878e2345d01a +++ lib/ui/mtn-browse.glade fba49e593b91f655d1edcbe681f8bdfe406cff19 @@ -997,7 +997,6 @@ or more search criteria False False True - @@ -2929,7 +2928,6 @@ Tag False False True - @@ -7290,7 +7288,6 @@ used in annotated listings False False True - @@ -7483,7 +7480,6 @@ MIME type from the list False False True - @@ -8899,7 +8895,6 @@ MB False False True - @@ -9699,14 +9694,11 @@ that you want - True Manage Server Bookmarks GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER_ON_PARENT True - 420 - 200 - True + False False mtn-browse.png True @@ -9770,6 +9762,8 @@ that you want + 200 + 150 True True GTK_POLICY_AUTOMATIC @@ -9785,7 +9779,6 @@ that you want False False True - ============================================================ --- mtn-browse 44ebbb64d1104c09425fcd6290a5a000a53ee294 +++ mtn-browse 639c401c334db456171039a883b861d01a229d7f @@ -81,7 +81,6 @@ use POSIX qw(:errno_h :locale_h :sys_wai use Locale::TextDomain (APPLICATION_NAME, File::Spec->catfile(PREFIX_DIR, "share", "locale")); use POSIX qw(:errno_h :locale_h :sys_wait_h strftime); -use Socket; use Symbol qw(gensym); use Text::Tabs; use Time::Local; @@ -166,7 +165,7 @@ sub manage_server_bookmarks_activate_cb( sub home_page_activate_cb($$); sub main_window_delete_event_cb($$$); sub manage_server_bookmarks_activate_cb($$); -sub manifest_browser_treeview_cursor_changed_cb($$); +sub manifest_browser_treeselection_changed_cb($$); sub manifest_browser_treeview_row_activated_cb($$$$); sub monotone_viz_button_clicked_cb($$); sub mtn_db_locked_handler($$); @@ -400,6 +399,100 @@ sub view_button_clicked_cb($$); # ############################################################################## # +# Routine - connect_to_server_activate_cb +# +# Description - Callback routine called when the user selects a server +# bookmark menu option. +# +# Data - $widget : The widget object that received the signal. +# $details : A record containing the browser instance that is +# associated with this widget and the name of the +# server that is to be connected to. +# +############################################################################## + + + +sub connect_to_server_activate_cb($$) +{ + + my($widget, $details) = @_; + + return if ($details->{browser}->{in_cb}); + local $details->{browser}->{in_cb} = 1; + + my($exception, + $host, + $mtn); + my $browser = $details->{browser}; + my $wm = WindowManager->instance(); + + $wm->make_busy($browser, 1); + $browser->{appbar}->push($browser->{appbar}->get_status()->get_text()); + $wm->update_gui(); + + # Try connecting to the specified server. + + $host = $details->{server}; + $host =~ s/:\d+$//g; + CachingAutomateStdio->register_error_handler + (MTN_SEVERITY_ALL, + sub { + my($severity, $message) = @_; + my $dialog; + $message =~ s/mtn: warning: //g; + $message =~ s/mtn: error: //g; + $message =~ s/mtn: //g; + $message =~ s/^Corrupt\/missing mtn [^\n]+\n//g; + $message =~ s/ at .+ line \d+$//g; + $message =~ s/\s+$//g; + $message =~ s/\n/ /g; + $message .= "." unless ($message =~ m/.+\.$/); + $dialog = Gtk2::MessageDialog->new_with_markup + ($browser->{window}, + ["modal"], + "warning", + "close", + __x("There is a problem connecting to the server, the " + . "details are:\n{error_message}", + error_message => + Glib::Markup::escape_text($message))); + $wm->allow_input(sub { $dialog->run(); }); + $dialog->destroy(); + die("Bad open"); + }); + $browser->{appbar}->set_status(__x("Connecting to server `{server}'", + server => $host)); + eval + { + $mtn = CachingAutomateStdio->new_from_service($details->{server}); + }; + $exception = $@; + CachingAutomateStdio->register_error_handler + (MTN_SEVERITY_ALL, \&mtn_error_handler); + if (! $exception) + { + + # Seems to be ok so set up the browser. + + setup_mtn_object($mtn, $browser->{window}); + $browser->{mtn} = $mtn; + $browser->{appbar}->pop(); + $browser->{appbar}->clear_stack(); + &{$browser->{update_handler}}($browser, DATABASE_CHANGED); + + } + else + { + $browser->{appbar}->pop(); + } + + $wm->make_busy($browser, 0); + +} +# +############################################################################## +# # Routine - manage_server_bookmarks_activate_cb # # Description - Callback routine called when the user selects the manage @@ -458,114 +551,6 @@ sub manage_server_bookmarks_activate_cb( # ############################################################################## # -# Routine - connect_to_server_activate_cb -# -# Description - Callback routine called when the user selects a server -# bookmark menu option. -# -# Data - $widget : The widget object that received the signal. -# $details : A record containing the browser instance that is -# associated with this widget and the name of the -# server that is to be connected to. -# -############################################################################## - - - -sub connect_to_server_activate_cb($$) -{ - - my($widget, $details) = @_; - - return if ($details->{browser}->{in_cb}); - local $details->{browser}->{in_cb} = 1; - - my($exception, - $host, - $mtn); - my $browser = $details->{browser}; - my $wm = WindowManager->instance(); - - $wm->make_busy($browser, 1); - $wm->update_gui(); - - # See if we know about the server first. - - $host = $details->{server}; - $host =~ s/:\d+$//g; - if (! defined(inet_aton($host))) - { - my $dialog; - $dialog = Gtk2::MessageDialog->new - ($browser->{window}, - ["modal"], - "warning", - "close", - __x("Server `{server}' is not\nknown to the system.", - server => $host)); - $wm->allow_input(sub { $dialog->run(); }); - $dialog->destroy(); - } - else - { - - # Try connecting to the specified server. - - CachingAutomateStdio->register_error_handler - (MTN_SEVERITY_ALL, - sub { - my($severity, $message) = @_; - my $dialog; - $message =~ s/mtn: warning: //g; - $message =~ s/mtn: error: //g; - $message =~ s/mtn: //g; - $message =~ s/^Corrupt\/missing mtn [^\n]+\n//g; - $message =~ s/ at .+ line \d+$//g; - $message =~ s/\s+$//g; - $message =~ s/\n/ /g; - $message .= "." unless ($message =~ m/.+\.$/); - $dialog = Gtk2::MessageDialog->new_with_markup - ($browser->{window}, - ["modal"], - "warning", - "close", - __x("There is a problem connecting to the server, the " - . "details are:\n{error_message}", - error_message => - Glib::Markup::escape_text($message))); - $wm->allow_input(sub { $dialog->run(); }); - $dialog->destroy(); - die("Bad open"); - }); - $browser->{appbar}->set_status(__x("Connecting to server `{server}'", - server => $host)); - eval - { - $mtn = CachingAutomateStdio->new_from_service($details->{server}); - }; - $exception = $@; - CachingAutomateStdio->register_error_handler - (MTN_SEVERITY_ALL, \&mtn_error_handler); - $browser->{appbar}->clear_stack(); - if (! $exception) - { - - # Seems to be ok so set up the browser. - - setup_mtn_object($mtn, $browser->{window}); - $browser->{mtn} = $mtn; - &{$browser->{update_handler}}($browser, DATABASE_CHANGED); - - } - - } - - $wm->make_busy($browser, 0); - -} -# -############################################################################## -# # Routine - quit_activate_cb # # Description - Callback routine called when the user selects the quit menu @@ -1548,7 +1533,7 @@ sub file_change_history_button_clicked_c # ############################################################################## # -# Routine - manifest_browser_treeview_cursor_changed_cb +# Routine - manifest_browser_treeselection_changed_cb # # Description - Callback routine called when the user selects an entry in # the manifest treeview in a main browser window. @@ -1561,7 +1546,7 @@ sub file_change_history_button_clicked_c -sub manifest_browser_treeview_cursor_changed_cb($$) +sub manifest_browser_treeselection_changed_cb($$) { my($widget, $browser) = @_; @@ -1574,12 +1559,14 @@ sub manifest_browser_treeview_cursor_cha # Get the manifest entry details for the item that was selected. - $widget->get_selection()->selected_foreach - (sub { - my($model, $path, $iter) = @_; - $short_name = $model->get($iter, MLS_NAME_COLUMN); - $manifest_entry = $model->get($iter, MLS_MANIFEST_ENTRY_COLUMN); - }); + if ($widget->count_selected_rows() > 0) + { + my($iter, + $model); + ($model, $iter) = $widget->get_selected(); + $short_name = $model->get($iter, MLS_NAME_COLUMN); + $manifest_entry = $model->get($iter, MLS_MANIFEST_ENTRY_COLUMN); + } # If the item is a file then display its contents, otherwise if it is a # directory then just ignore it. @@ -1588,9 +1575,13 @@ sub manifest_browser_treeview_cursor_cha { $browser->{file_being_viewed} = {short_name => $short_name, manifest_entry => $manifest_entry}; - $browser->{appbar}->clear_stack(); - &{$browser->{update_handler}}($browser, FILE_CHANGED); } + else + { + $browser->{file_being_viewed} = {}; + } + $browser->{appbar}->clear_stack(); + &{$browser->{update_handler}}($browser, FILE_CHANGED); } # @@ -1794,6 +1785,7 @@ sub get_browser_window(;$$$$$) "branch_comboboxentry", "revision_comboboxentry", "tagged_checkbutton", + "monotone_viz_button", "directory_comboboxentry", "directory_up_button", "find_files_button", @@ -1975,6 +1967,11 @@ sub get_browser_window(;$$$$$) $browser->{manifest_browser_treeview}-> set_search_equal_func(\&treeview_column_searcher); + $browser->{manifest_browser_treeview}->get_selection()-> + signal_connect("changed", + \&manifest_browser_treeselection_changed_cb, + $browser); + # Setup the file file viewer (with syntax highlighting). $browser->{file_view_svbuffer} = Gtk2::SourceView::Buffer->new(undef); @@ -2272,25 +2269,35 @@ sub update_server_bookmarks_menu($) # Create a new connect to server submenu. $submenu = Gtk2::Menu->new(); + if (scalar(@{$user_preferences->{server_bookmarks}}) > 0) + { + for my $server (@{$user_preferences->{server_bookmarks}}) + { + $menu_item = Gtk2::MenuItem->new(__($server)); + $menu_item->signal_connect("activate", + \&connect_to_server_activate_cb, + {browser => $browser, + server => $server}); + $menu_item->show(); + $submenu->append($menu_item); + } + } + else + { + $menu_item = Gtk2::MenuItem->new(__("No Bookmarks")); + $menu_item->set_sensitive(FALSE); + $menu_item->show(); + $submenu->append($menu_item); + } + $menu_item = Gtk2::SeparatorMenuItem->new(); + $menu_item->show(); + $submenu->append($menu_item); $menu_item = Gtk2::MenuItem->new(__("Manage Server Bookmarks")); $menu_item->signal_connect("activate", \&manage_server_bookmarks_activate_cb, $browser); $menu_item->show(); $submenu->append($menu_item); - $menu_item = Gtk2::SeparatorMenuItem->new(); - $menu_item->show(); - $submenu->append($menu_item); - for my $server (@{$user_preferences->{server_bookmarks}}) - { - $menu_item = Gtk2::MenuItem->new(__($server)); - $menu_item->signal_connect("activate", - \&connect_to_server_activate_cb, - {browser => $browser, - server => $server}); - $menu_item->show(); - $submenu->append($menu_item); - } $submenu->show(); # Replace the existing menu with the new one. @@ -2363,6 +2370,7 @@ sub update_browser_state($$) ($browser->{database_name_value_label}, __x(" ({service_name})", service_name => $browser->{mtn}->get_service_name())); + $browser->{monotone_viz_button}->set_sensitive(FALSE); } else { @@ -2378,6 +2386,7 @@ sub update_browser_state($$) __x(" ({database_name})", database_name => $db_name)); } + $browser->{monotone_viz_button}->set_sensitive(TRUE); } # Make sure that the branch comboboxentry has the focus and not the