Make updating diff asynchronously and be called on Idle

Before this commit, huge changes will affect the performance of the application
A lot due to fetching the changes and showing them on the screen.

This commit helps in reducing the lag a bit, by moving the updating and buffering
The changes to Idle.
This commit is contained in:
Mahmoud Khalil 2020-08-29 23:15:57 +02:00
parent 4aaf3fd368
commit e8186875a8

View File

@ -57,6 +57,8 @@ public class Gitg.DiffView : Gtk.Grid
private uint d_reveal_options_timeout;
private uint d_unreveal_options_timeout;
private uint d_update_diff_id;
private static Gee.HashSet<string> s_image_mime_types;
public Ggit.DiffOptions options
@ -231,6 +233,12 @@ public class Gitg.DiffView : Gtk.Grid
d_cancellable.cancel();
}
if(d_update_diff_id != 0)
{
Source.remove(d_update_diff_id);
d_update_diff_id = 0;
}
base.dispose();
}
@ -590,7 +598,22 @@ public class Gitg.DiffView : Gtk.Grid
if (d_diff != null)
{
update_diff(d_diff, preserve_expanded, d_cancellable);
if(d_update_diff_id != 0)
{
Source.remove(d_update_diff_id);
d_update_diff_id = 0;
}
d_update_diff_id = Idle.add(() => {
update_diff.begin(d_diff,
preserve_expanded,
d_cancellable,
(obj, res) => {
d_update_diff_id = 0;
});
return false;
});
}
}
@ -692,7 +715,7 @@ public class Gitg.DiffView : Gtk.Grid
return "";
}
private void update_diff(Ggit.Diff diff, bool preserve_expanded, Cancellable? cancellable)
private async void update_diff(Ggit.Diff diff, bool preserve_expanded, Cancellable? cancellable)
{
var nqueries = 0;
var finished = false;