#
#
# patch "AdvancedFind.pm"
# from [d62fc3a65a6f7c361800185d8907280fefe0dd75]
# to [ec8d93ce749bdd731367afb9c9de6e84229b759c]
#
# patch "Annotate.pm"
# from [96f269e7203303f964dfb0fd024a3f6b55104591]
# to [a8457486cdc3bd7165083242cc481c26fdd45270]
#
# patch "ChangeLog.pm"
# from [1bc50a48e82d47e18f69a426dcf068ecfa9cbb78]
# to [004a61a71b3a465a2c7e03be259d50882bff05e5]
#
# patch "FindFiles.pm"
# from [1f4661fa7ac0fc844818a0fb9762dddbbcf8d0ec]
# to [a7435609a35bff3fe384b3f145b58021b70c8dfa]
#
# patch "FindText.pm"
# from [6b84fd52375956b82047faa0b453a36646b8f75b]
# to [8e704f3b0b00cd3234c13a446365d83146432f5e]
#
# patch "History.pm"
# from [3d555a25521e72193dd2e8bdfd63ddb61c8edc8b]
# to [f639c00b18bd36a1fc701e1ef76765f950a7fdfb]
#
# patch "mtn-browse"
# from [53961484ff210d65a9a82866523ac6ee68a85448]
# to [ec2ce0ce464b32c43dcc3dbffab5b864d4861485]
#
# patch "mtn-browse.glade"
# from [91f78642431d06166c66500947afe38933877de6]
# to [841280e4818281fa8c95a48f847de33d1c74d0aa]
#
============================================================
--- AdvancedFind.pm d62fc3a65a6f7c361800185d8907280fefe0dd75
+++ AdvancedFind.pm ec8d93ce749bdd731367afb9c9de6e84229b759c
@@ -773,6 +773,8 @@ sub update_advanced_find_state($$)
}
++ $counter;
}
+ $advanced_find->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
$advanced_find->{branch_comboboxentry}->child()->
set_text($advanced_find->{branch_combo_details}->{value});
$advanced_find->{appbar}->set_progress_percentage(0);
@@ -835,6 +837,8 @@ sub update_advanced_find_state($$)
}
++ $counter;
}
+ $advanced_find->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
$advanced_find->{revision_comboboxentry}->child()->
set_text($advanced_find->{revision_combo_details}->{value});
$advanced_find->{appbar}->set_progress_percentage(0);
@@ -969,11 +973,12 @@ sub update_advanced_find_state($$)
++ $counter;
last if ($advanced_find->{stop});
}
+ $advanced_find->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
$advanced_find->{stop_button}->set_sensitive(FALSE);
$advanced_find->{stop} = 0;
$advanced_find->{revisions_treeview}->scroll_to_point(0, 0)
if ($advanced_find->{revisions_treeview}->realized());
-
$advanced_find->{appbar}->set_progress_percentage(0);
$advanced_find->{appbar}->set_status("");
$wm->update_gui();
============================================================
--- Annotate.pm 96f269e7203303f964dfb0fd024a3f6b55104591
+++ Annotate.pm a8457486cdc3bd7165083242cc481c26fdd45270
@@ -169,6 +169,8 @@ sub display_annotation($$$)
}
}
+ $instance->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
# Delete the trailing newline.
@@ -246,6 +248,7 @@ sub get_annotation_window()
my($widget, $event, $instance) = @_;
return TRUE if ($instance->{in_cb});
local $instance->{in_cb} = 1;
+ hide_find_text($instance->{annotation_textview});
$widget->hide();
$instance->{annotation_buffer}->set_text("");
return TRUE;
============================================================
--- ChangeLog.pm 1bc50a48e82d47e18f69a426dcf068ecfa9cbb78
+++ ChangeLog.pm 004a61a71b3a465a2c7e03be259d50882bff05e5
@@ -376,6 +376,7 @@ sub get_change_log_window()
my($widget, $event, $instance) = @_;
return TRUE if ($instance->{in_cb});
local $instance->{in_cb} = 1;
+ hide_find_text($instance->{changelog_textview});
$widget->hide();
$instance->{changelog_buffer}->set_text("");
return TRUE;
============================================================
--- FindFiles.pm 1f4661fa7ac0fc844818a0fb9762dddbbcf8d0ec
+++ FindFiles.pm a7435609a35bff3fe384b3f145b58021b70c8dfa
@@ -618,6 +618,8 @@ sub search_files_button_clicked_cb($$)
}
++ $counter;
}
+ $instance->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
$instance->{stop_button}->set_sensitive(FALSE);
$instance->{stop} = 0;
============================================================
--- FindText.pm 6b84fd52375956b82047faa0b453a36646b8f75b
+++ FindText.pm 8e704f3b0b00cd3234c13a446365d83146432f5e
@@ -55,8 +55,10 @@ my $window_type = "find_text_window";
# Public routines.
-sub disable_find_text($$);
+sub enable_find_text($$);
sub find_text($$);
+sub find_text_textview_key_press_event_cb($$$);
+sub find_text_textview_populate_popup_cb($$$);
sub hide_find_text($);
sub reset_find_text($);
@@ -125,44 +127,44 @@ sub reset_find_text($)
#
##############################################################################
#
-# Routine - disable_find_text
+# Routine - enable_find_text
#
-# Description - Disables or enables the find text window associated with
+# Description - Enables or disables the find text window associated with
# the specified textview widget.
#
# Data - $text_view : The textview widget to which the find text
# window is associated.
-# $disable : True if the window is to be disabled,
-# otherwise false if it is to be enabled.
+# $disable : True if the window is to be enabled,
+# otherwise false if it is to be disabled.
#
##############################################################################
-sub disable_find_text($$)
+sub enable_find_text($$)
{
- my($text_view, $disable) = @_;
+ my($text_view, $enable) = @_;
my $instance;
- # Simply disable/enable the found find text window.
+ # Simply enable/disable the found find text window.
if (defined($instance = find_current_window($text_view)))
{
- if ($disable)
+ if ($enable)
{
- $instance->{main_vbox}->set_sensitive(FALSE);
- $instance->{find_button}->set_sensitive(FALSE);
- }
- else
- {
$instance->{main_vbox}->set_sensitive(TRUE);
$instance->{find_button}->set_sensitive
((length($instance->{find_comboboxentry}->child()->get_text())
> 0) ?
TRUE : FALSE);
}
+ else
+ {
+ $instance->{main_vbox}->set_sensitive(FALSE);
+ $instance->{find_button}->set_sensitive(FALSE);
+ }
}
}
@@ -197,6 +199,116 @@ sub hide_find_text($)
#
##############################################################################
#
+# Routine - find_text_textview_populate_popup_cb
+#
+# Description - Callback routine called when the user right clicks on any
+# textview window.
+#
+# Data - $widget : The widget object that received the signal.
+# $menu : The Gtk2::Menu widget that is to be updated.
+# $instance : The window instance that is associated with
+# this widget.
+#
+##############################################################################
+
+
+
+sub find_text_textview_populate_popup_cb($$$)
+{
+
+ my($widget, $menu, $instance) = @_;
+
+ return if ($instance->{in_cb});
+ local $instance->{in_cb} = 1;
+
+ my($menu_item,
+ $separator);
+
+ # Add a `Find' option to the right-click menu that displays the find text
+ # dialog.
+
+ $menu_item = Gtk2::MenuItem->new("_Find");
+ $menu_item->signal_connect
+ ("activate",
+ sub {
+ my($widget, $details) = @_;
+ return if ($details->{instance}->{in_cb});
+ local $details->{instance}->{in_cb} = 1;
+ find_text($details->{instance}->{window},
+ $details->{textview_widget});
+ },
+ {instance => $instance,
+ textview_widget => $widget});
+ $menu_item->show();
+ $separator = Gtk2::SeparatorMenuItem->new();
+ $separator->show();
+ $menu->append($separator);
+ $menu->append($menu_item);
+
+}
+#
+##############################################################################
+#
+# Routine - find_text_textview_key_press_event_cb
+#
+# Description - Callback routine called when the user presses a key inside
+# a textview window.
+#
+# Data - $widget : The widget object that received the signal.
+# $event : A Gtk2::Gdk::Event object describing the
+# event that has occurred.
+# $instance : The window instance that is associated with
+# this widget.
+# Return Value : TRUE if the event has been handled and needs
+# no further handling, otherwise false if the
+# event should carry on through the remaining
+# event handling.
+#
+##############################################################################
+
+
+
+sub find_text_textview_key_press_event_cb($$$)
+{
+
+ my($widget, $event, $instance) = @_;
+
+ return FALSE if ($instance->{in_cb});
+ local $instance->{in_cb} = 1;
+
+ my($consumed_modifiers,
+ $keymap,
+ $keyval,
+ $state);
+
+ # Ignore the state of the caps-lock key.
+
+ $state = $event->state() - "lock_mask";
+
+ # Work out what the key is having taken into account any modifier keys
+ # (except caps-lock).
+
+ $keymap =
+ Gtk2::Gdk::Keymap->get_for_display(Gtk2::Gdk::Display->get_default());
+ ($keyval, $consumed_modifiers) =
+ ($keymap->translate_keyboard_state
+ ($event->hardware_keycode(), $state, $event->group()))[0, 3];
+
+ # We are only interested in Ctrl-f.
+
+ if (defined($keyval) && $keyval == $Gtk2::Gdk::Keysyms{f}
+ && ($state - $consumed_modifiers) == "control_mask")
+ {
+ find_text($instance->{window}, $widget);
+ return TRUE;
+ }
+
+ return FALSE;
+
+}
+#
+##############################################################################
+#
# Routine - find_button_clicked_cb
#
# Description - Callback routine called when the user clicks on the find
@@ -225,12 +337,66 @@ sub find_button_clicked_cb($$)
$forward,
$found,
$line,
+ $match_len,
$rect,
$search_term,
- $start_iter);
+ $start_iter,
+ $use_regexp);
+ # Get the search parameters.
+
$search_term = $instance->{find_comboboxentry}->child()->get_text();
+ $case_sensitive = $instance->{case_sensitive_checkbutton}->get_active();
+ $forward = ! $instance->{search_backwards_checkbutton}->get_active();
+ $use_regexp = $instance->{regular_expression_checkbutton}->get_active();
+ # Precompile the regular expression based upon the search term. When the
+ # user themselves is using regular expressions then check for errors. Also
+ # use the bytes pragma as $search_term could potentially be used against
+ # binary data.
+
+ {
+ use bytes;
+ if ($use_regexp)
+ {
+ eval
+ {
+ if ($case_sensitive)
+ {
+ $expr = qr/$search_term/;
+ }
+ else
+ {
+ $expr = qr/$search_term/i;
+ }
+ };
+ if ($@ ne "")
+ {
+ my $dialog = Gtk2::MessageDialog->new
+ ($instance->{window},
+ ["modal"],
+ "warning",
+ "close",
+ __x("`{pattern}' is an invalid\ncontent search pattern.",
+ pattern => $search_term));
+ $dialog->run();
+ $dialog->destroy();
+ return;
+ }
+ }
+ else
+ {
+ if ($case_sensitive)
+ {
+ $expr = qr/\Q$search_term\E/;
+ }
+ else
+ {
+ $expr = qr/\Q$search_term\E/i;
+ }
+ }
+ }
+
# Store the search term in the history.
$found = 0;
@@ -255,11 +421,6 @@ sub find_button_clicked_cb($$)
}
}
- # Get the search parameters.
-
- $case_sensitive = $instance->{case_sensitive_checkbutton}->get_active();
- $forward = ! $instance->{search_backwards_checkbutton}->get_active();
-
# Work out where to start searching from.
$rect = $instance->{text_view}->get_visible_rect();
@@ -330,17 +491,6 @@ sub find_button_clicked_cb($$)
}
- # Precompile the regular expression based upon the search term.
-
- if ($case_sensitive)
- {
- $expr = qr/\Q$search_term\E/;
- }
- else
- {
- $expr = qr/\Q$search_term\E/i;
- }
-
# Search for the text.
$found = 0;
@@ -351,20 +501,25 @@ sub find_button_clicked_cb($$)
$instance->{text_buffer}->get_text($start_iter, $end_iter, TRUE);
if ($forward)
{
- $pos = pos($line) if ($found = scalar($line =~ m/$expr/g));
+ if ($found = scalar($line =~ m/$expr/g))
+ {
+ $pos = pos($line);
+ $match_len = length($&);
+ }
}
else
{
while ($line =~ m/$expr/g)
{
$pos = pos($line);
+ $match_len = length($&);
$found = 1;
}
}
if ($found)
{
$instance->{match_offset_start} =
- $start_iter->get_offset() + $pos - length($search_term);
+ $start_iter->get_offset() + $pos - $match_len;
$instance->{match_offset_end} = $start_iter->get_offset() + $pos;
$done = 1;
}
@@ -533,6 +688,7 @@ sub get_find_text_window($$)
"find_comboboxentry",
"case_sensitive_checkbutton",
"search_backwards_checkbutton",
+ "regular_expression_checkbutton",
"find_button")
{
$instance->{$widget} = $instance->{glade}->get_widget($widget);
@@ -594,7 +750,7 @@ sub get_find_text_window($$)
((length($instance->{find_comboboxentry}->child()->get_text()) > 0) ?
TRUE : FALSE);
- # Store the associated textview and text buffer.
+ # Store the associated textview and textbuffer.
$instance->{text_view} = $text_view;
$instance->{text_buffer} = $instance->{text_view}->get_buffer();
@@ -604,6 +760,11 @@ sub get_find_text_window($$)
$instance->{window}->set_transient_for($parent);
$instance->{window}->show_all();
+ # Make sure that the find comboboxentry has the focus.
+
+ $instance->{find_comboboxentry}->child()->grab_focus();
+ $instance->{find_comboboxentry}->child()->set_position(-1);
+
# If necessary, register the window for management.
$wm->manage($instance, $window_type, $instance->{window}) if ($new);
============================================================
--- History.pm 3d555a25521e72193dd2e8bdfd63ddb61c8edc8b
+++ History.pm f639c00b18bd36a1fc701e1ef76765f950a7fdfb
@@ -131,7 +131,6 @@ sub display_revision_change_history($$$)
# Get the list of file change revisions. Remember to include the current
# revision in the history.
- $instance->{appbar}->set_progress_percentage(0);
$instance->{appbar}->set_status(__("Fetching revision list"));
$wm->update_gui();
$history_hash{$revision_id} = 1;
@@ -139,12 +138,15 @@ sub display_revision_change_history($$$)
# Sort the list.
+ $instance->{appbar}->set_progress_percentage(0.5);
$instance->{appbar}->set_status(__("Sorting revision list"));
$wm->update_gui();
$instance->{history} = [];
$instance->{mtn}->toposort($instance->{history}, keys(%history_hash));
%history_hash = ();
@{$instance->{history}} = reverse(@{$instance->{history}});
+ $instance->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
# Display the file's history.
@@ -263,6 +265,8 @@ sub display_revision_change_history($$$)
}
}
+ $instance->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
$instance->{stop_button}->set_sensitive(FALSE);
set_label_value($instance->{numbers_value_label}, $counter)
@@ -333,7 +337,6 @@ sub display_file_change_history($$$)
# generated when one goes back beyond a file's addition revision, so
# temporarily disable the warning handler.
- $instance->{appbar}->set_progress_percentage(0);
$instance->{appbar}->set_status(__("Fetching revision list"));
$instance->{stop_button}->set_sensitive(TRUE);
$wm->update_gui();
@@ -345,12 +348,15 @@ sub display_file_change_history($$$)
# Sort the list.
+ $instance->{appbar}->set_progress_percentage(0.5);
$instance->{appbar}->set_status(__("Sorting revision list"));
$wm->update_gui();
$instance->{history} = [];
$instance->{mtn}->toposort($instance->{history}, keys(%history_hash));
%history_hash = ();
@{$instance->{history}} = reverse(@{$instance->{history}});
+ $instance->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
# Display the file's history.
@@ -463,6 +469,8 @@ sub display_file_change_history($$$)
++ $counter;
}
+ $instance->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
# Make sure we are at the top.
@@ -1030,6 +1038,9 @@ sub compare_revisions($$$;$)
}
+ $instance->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
+
$instance->{stop_button}->set_sensitive(FALSE);
# Delete the trailing newline.
@@ -1062,9 +1073,15 @@ sub compare_revisions($$$;$)
CLS_LINE_NR_COLUMN, $file->{line_nr},
CLS_FILE_ID_1_COLUMN, $file->{file_id_1},
CLS_FILE_ID_2_COLUMN, $file->{file_id_2});
- $instance->{appbar}->set_progress_percentage($i ++ / scalar(@files));
- $wm->update_gui();
+ if (($i % 10) == 0)
+ {
+ $instance->{appbar}->set_progress_percentage($i / scalar(@files));
+ $wm->update_gui();
+ }
+ ++ $i;
}
+ $instance->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
if (defined($file_name))
{
$instance->{file_comparison_combobox}->set_active(1);
@@ -1404,6 +1421,7 @@ sub get_history_window()
my($widget, $event, $instance) = @_;
return TRUE if ($instance->{in_cb});
local $instance->{in_cb} = 1;
+ hide_find_text($instance->{history_textview});
$widget->hide();
$instance->{history_buffer}->set_text("");
$instance->{mtn} = undef;
@@ -1612,6 +1630,7 @@ sub get_revision_comparison_window()
my($widget, $event, $instance) = @_;
return TRUE if ($instance->{in_cb});
local $instance->{in_cb} = 1;
+ hide_find_text($instance->{comparison_textview});
$widget->hide();
$instance->{file_comparison_combobox}->get_model()->clear();
$instance->{comparison_buffer}->set_text("");
============================================================
--- mtn-browse 53961484ff210d65a9a82866523ac6ee68a85448
+++ mtn-browse ec2ce0ce464b32c43dcc3dbffab5b864d4861485
@@ -63,6 +63,7 @@ use Gtk2 -init;
use Gnome2;
use Gnome2::VFS -init;
use Gtk2 -init;
+use Gtk2::Gdk::Keysyms;
use Gtk2::GladeXML;
use Gtk2::Helper;
use Gtk2::Pango;
@@ -123,6 +124,7 @@ sub display_file($$);
sub determine_mime_type($$$$);
sub directory_up_button_clicked_cb($$);
sub display_file($$);
+sub enable_find_text_dialog($$);
sub file_change_history_button_clicked_cb($$);
sub find_files_button_clicked_cb($$);
sub get_browser_window(;$$$$$);
@@ -1571,6 +1573,17 @@ sub get_browser_window(;$$$$$)
$browser->{file_view_sv}->set_cursor_visible(FALSE);
$browser->{file_view_sv}->set_editable(FALSE);
$browser->{file_view_scrolledwindow}->add($browser->{file_view_sv});
+ $browser->{file_view_sv_populate_popup_handler} =
+ $browser->{file_view_sv}->signal_connect
+ ("populate_popup",
+ \&find_text_textview_populate_popup_cb,
+ $browser);
+ $browser->{file_view_sv_key_press_handler} =
+ $browser->{file_view_sv}->signal_connect
+ ("key_press_event",
+ \&find_text_textview_key_press_event_cb,
+ $browser);
+ $browser->{file_view_sv_enabled_find_text} = 1;
$browser->{file_view_sv}->show_all();
local $browser->{in_cb} = 1;
@@ -1779,6 +1792,8 @@ sub update_browser_state($$)
}
++ $counter;
}
+ $browser->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
$browser->{branch_comboboxentry}->child()->
set_text($browser->{branch_combo_details}->{value});
$browser->{appbar}->set_progress_percentage(0);
@@ -1840,6 +1855,8 @@ sub update_browser_state($$)
}
++ $counter;
}
+ $browser->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
$browser->{revision_comboboxentry}->child()->
set_text($browser->{revision_combo_details}->{value});
$browser->{appbar}->set_progress_percentage(0);
@@ -1966,6 +1983,8 @@ sub update_browser_state($$)
}
++ $counter;
}
+ $browser->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
$browser->{directory_comboboxentry}->child()->
set_text($browser->{directory_combo_details}->{value});
$browser->{appbar}->set_progress_percentage(0);
@@ -2091,6 +2110,11 @@ sub update_browser_state($$)
++ $counter;
}
+ if ($taking_our_time)
+ {
+ $browser->{appbar}->set_progress_percentage(1);
+ $wm->update_gui();
+ }
$browser->{manifest_browser_treeview}->scroll_to_point(0, 0)
if ($browser->{manifest_browser_treeview}->realized());
@@ -2132,7 +2156,7 @@ sub update_browser_state($$)
$widget->set_sensitive(FALSE);
}
reset_find_text($browser->{file_view_sv});
- disable_find_text($browser->{file_view_sv}, 1);
+ enable_find_text_dialog($browser, 0);
# Display the selected file's contents.
@@ -2149,7 +2173,7 @@ sub update_browser_state($$)
{
$widget->set_sensitive(TRUE);
}
- disable_find_text($browser->{file_view_sv}, 0);
+ enable_find_text_dialog($browser, 1);
}
# Update the file details labels.
@@ -2194,7 +2218,7 @@ sub update_browser_state($$)
set_label_value($browser->{file_id_value_label}, "");
set_label_value($browser->{last_update_value_label}, "");
set_label_value($browser->{file_revision_id_value_label}, "");
- disable_find_text($browser->{file_view_sv}, 1);
+ enable_find_text_dialog($browser, 0);
}
@@ -2433,6 +2457,53 @@ sub determine_mime_type($$$$)
#
##############################################################################
#
+# Routine - enable_find_text_dialog
+#
+# Description - Enable or disable any find text dialog associated with the
+# specified browser instance.
+#
+# Data - $browser : The browser instance that is to have any
+# associated find text dialog enabled or disabled.
+# $enable : True if the find text dialog is to be enabled,
+# otherwise false if it is to be disabled.
+#
+##############################################################################
+
+
+
+sub enable_find_text_dialog($$)
+{
+
+ my($browser, $enable) = @_;
+
+ enable_find_text($browser->{file_view_sv}, $enable);
+ if ($enable)
+ {
+ if (! $browser->{file_view_sv_enabled_find_text})
+ {
+ $browser->{file_view_sv}->signal_handler_unblock
+ ($browser->{file_view_sv_populate_popup_handler});
+ $browser->{file_view_sv}->signal_handler_unblock
+ ($browser->{file_view_sv_key_press_handler});
+ $browser->{file_view_sv_enabled_find_text} = 1;
+ }
+ }
+ else
+ {
+ if ($browser->{file_view_sv_enabled_find_text})
+ {
+ $browser->{file_view_sv}->signal_handler_block
+ ($browser->{file_view_sv_populate_popup_handler});
+ $browser->{file_view_sv}->signal_handler_block
+ ($browser->{file_view_sv_key_press_handler});
+ $browser->{file_view_sv_enabled_find_text} = 0;
+ }
+ }
+
+}
+#
+##############################################################################
+#
# Routine - mtn_error_handler
#
# Description - This routine is called when ever there is a problem with
============================================================
--- mtn-browse.glade 91f78642431d06166c66500947afe38933877de6
+++ mtn-browse.glade 841280e4818281fa8c95a48f847de33d1c74d0aa
@@ -3325,6 +3325,8 @@ Tag