diff -NaurZ deja-dup-36.3/deja-dup/AssistantOperation.vala deja-dup-36.3-scrollfix/deja-dup/AssistantOperation.vala --- deja-dup-36.3/deja-dup/AssistantOperation.vala 2017-10-20 22:27:02.000000000 +0200 +++ deja-dup-36.3-scrollfix/deja-dup/AssistantOperation.vala 2018-02-04 10:41:48.892127000 +0100 @@ -89,6 +89,8 @@ int saved_x; int saved_y; + bool adjustment_at_end; + construct { add_custom_config_pages(); @@ -168,7 +170,6 @@ string log_line = prefix + " " + file.get_parse_name(); - bool adjustment_at_end = false; Gtk.Adjustment adjust = progress_scroll.get_vadjustment(); if (adjust.value >= adjust.upper - adjust.page_size || adjust.page_size == 0 || // means never been set, means not realized @@ -178,19 +179,10 @@ var buffer = progress_text.buffer; if (buffer.get_char_count() > 0) log_line = "\n" + log_line; - if (buffer.get_line_count() >= 100 && adjustment_at_end) { - // If we're watching text scroll by, save memory by only keeping last 100 lines - Gtk.TextIter start, line100; - buffer.get_start_iter(out start); - buffer.get_iter_at_line(out line100, buffer.get_line_count() - 100); - buffer.delete(ref start, ref line100); - } Gtk.TextIter iter; buffer.get_end_iter(out iter); buffer.insert_text(ref iter, log_line, (int)log_line.length); - if (adjustment_at_end) - adjust.value = adjust.upper; } protected void set_secondary_label(string text) @@ -203,6 +195,25 @@ secondary_label.hide(); } + void update_autoscroll() + { + if( adjustment_at_end ) + { + Gtk.Adjustment adjust = progress_scroll.get_vadjustment(); + adjust.value = adjust.upper - adjust.page_size; + } + } + + bool stop_autoscroll() + { + Gtk.Adjustment adjust = progress_scroll.get_vadjustment(); + + if (adjust.value < adjust.upper - adjust.page_size ) + adjustment_at_end = false; + + return false; + } + protected virtual Gtk.Widget make_progress_page() { var page = new Gtk.Grid(); @@ -238,7 +249,11 @@ progress_text = new Gtk.TextView(); progress_text.editable = false; + progress_text.size_allocate.connect( update_autoscroll ); progress_scroll = new Gtk.ScrolledWindow(null, null); + progress_scroll.scroll_event.connect( stop_autoscroll ); + progress_scroll.expand = true; + ((Gtk.Range)progress_scroll.get_vscrollbar()).change_value.connect( stop_autoscroll ); progress_scroll.child = progress_text; progress_scroll.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC; progress_scroll.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC;