Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Thu, 05 Mar 2015 21:51:40 UTC Commit: c92f785f13d9c74b482dffa43d5d7ccfb3efcd1c https://github.com/geany/geany-plugins/commit/c92f785f13d9c74b482dffa43d5d7c...
Log Message: ----------- git-changebar: Fix repository monitoring after closing a file
The monitoring callbacks used to only push an update to the very document for which the monitoring was initially setup. However, as monitoring is not reset when switching to another file in the same repository, it was easy to nullify the monitoring by opening two files from the same repository and closing the first one, as then the monitoring callbacks couldn't push the update to the closed document.
So, fix the monitoring callbacks to push an update to the current document at the moment they are fired. This is not a problem because the monitoring is properly reset when switching between different repositories' files, and the update doesn't enforce a repository anyway.
Modified Paths: -------------- git-changebar/src/gcb-plugin.c
Modified: git-changebar/src/gcb-plugin.c 47 lines changed, 13 insertions(+), 34 deletions(-) =================================================================== @@ -112,16 +112,11 @@ struct GotoNextHunkData { };
-static void on_git_head_changed (GFileMonitor *monitor, +static void on_git_repo_changed (GFileMonitor *monitor, GFile *file, GFile *other_file, GFileMonitorEvent event_type, - gpointer user_data); -static void on_git_ref_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - gpointer user_data); + gpointer force); static gboolean on_sci_query_tooltip (GtkWidget *widget, gint x, gint y, @@ -327,11 +322,11 @@ worker_thread (gpointer data) /* we need to monitor HEAD, in case of e.g. branch switch (e.g. * git checkout -b will switch the ref we need to watch) */ monitors[0] = monitor_repo_file (repo, "HEAD", - G_CALLBACK (on_git_head_changed), - job->user_data); + G_CALLBACK (on_git_repo_changed), + GINT_TO_POINTER (TRUE)); /* and of course the real ref (branch) for when changes get committed */ - monitors[1] = monitor_head_ref (repo, G_CALLBACK (on_git_ref_changed), - job->user_data); + monitors[1] = monitor_head_ref (repo, G_CALLBACK (on_git_repo_changed), + GINT_TO_POINTER (FALSE)); } }
@@ -359,7 +354,6 @@ worker_thread (gpointer data) return NULL; }
-/* @user_data will also be used to the file monitor callback */ static void get_cached_blob_async (const gchar *path, gboolean force, @@ -872,32 +866,17 @@ on_startup_complete (GObject *obj, }
static void -on_git_head_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - gpointer user_data) +on_git_repo_changed (GFileMonitor *monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + gpointer force) { - GeanyDocument *doc = document_find_by_id (GPOINTER_TO_UINT (user_data)); - - if (doc) { - clear_cached_blob (); - update_diff_push (doc, TRUE); - } -} - -static void -on_git_ref_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - gpointer user_data) -{ - GeanyDocument *doc = document_find_by_id (GPOINTER_TO_UINT (user_data)); + GeanyDocument *doc = document_get_current ();
if (doc) { clear_cached_blob (); - update_diff_push (doc, FALSE); + update_diff_push (doc, GPOINTER_TO_INT (force)); } }
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).