[gnome-builder/gnome-builder-43] plugins/git: emit monitor changed when index changes
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/gnome-builder-43] plugins/git: emit monitor changed when index changes
- Date: Mon, 26 Sep 2022 23:53:02 +0000 (UTC)
commit bbb17c2eed173e66b99b0d854d6970122f7ab897
Author: Christian Hergert <chergert redhat com>
Date: Mon Sep 26 16:52:10 2022 -0700
plugins/git: emit monitor changed when index changes
When we discover the IdeVcs::changed signal is emitted, the buffer change
monitor (for git) also needs to emit IdeBufferChangeMonitor::changed so
that the gutter is re-rendered with the updated state.
This matters more now in GTK 4 since the widgets are more likely to retain
state and not render anything new until forced.
Fixes #1820
src/plugins/git/gbp-git-buffer-change-monitor.c | 81 +++++++++++++++++--------
1 file changed, 56 insertions(+), 25 deletions(-)
---
diff --git a/src/plugins/git/gbp-git-buffer-change-monitor.c b/src/plugins/git/gbp-git-buffer-change-monitor.c
index e12606e03..2ab5bf76a 100644
--- a/src/plugins/git/gbp-git-buffer-change-monitor.c
+++ b/src/plugins/git/gbp-git-buffer-change-monitor.c
@@ -29,12 +29,14 @@
#include "daemon/line-cache.h"
#include "gbp-git-buffer-change-monitor.h"
+#include "gbp-git-vcs.h"
struct _GbpGitBufferChangeMonitor
{
IdeBufferChangeMonitor parent;
IpcGitChangeMonitor *proxy;
- IdeSignalGroup *buffer_signals;
+ GSignalGroup *buffer_signals;
+ GSignalGroup *vcs_signals;
LineCache *cache;
guint last_change_count;
guint queued_source;
@@ -93,10 +95,16 @@ gbp_git_buffer_change_monitor_destroy (IdeObject *object)
if (self->buffer_signals)
{
- ide_signal_group_set_target (self->buffer_signals, NULL);
+ g_signal_group_set_target (self->buffer_signals, NULL);
g_clear_object (&self->buffer_signals);
}
+ if (self->vcs_signals)
+ {
+ g_signal_group_set_target (self->vcs_signals, NULL);
+ g_clear_object (&self->vcs_signals);
+ }
+
if (self->proxy != NULL)
{
ipc_git_change_monitor_call_close (self->proxy, NULL, NULL, NULL);
@@ -114,12 +122,19 @@ gbp_git_buffer_change_monitor_load (IdeBufferChangeMonitor *monitor,
IdeBuffer *buffer)
{
GbpGitBufferChangeMonitor *self = (GbpGitBufferChangeMonitor *)monitor;
+ g_autoptr(IdeContext) context = NULL;
+ IdeVcs *vcs;
g_assert (IDE_IS_MAIN_THREAD ());
g_assert (GBP_IS_GIT_BUFFER_CHANGE_MONITOR (self));
g_assert (IDE_IS_BUFFER (buffer));
- ide_signal_group_set_target (self->buffer_signals, buffer);
+ context = ide_buffer_ref_context (buffer);
+ vcs = ide_vcs_from_context (context);
+
+ g_signal_group_set_target (self->vcs_signals, vcs);
+ g_signal_group_set_target (self->buffer_signals, buffer);
+
gbp_git_buffer_change_monitor_queue_update (self, FAST);
}
@@ -330,6 +345,16 @@ gbp_git_buffer_change_monitor_get_change (IdeBufferChangeMonitor *monitor,
return IDE_BUFFER_LINE_CHANGE_NONE;
}
+static void
+vcs_changed_cb (GbpGitBufferChangeMonitor *self,
+ IdeVcs *vcs)
+{
+ g_assert (IDE_IS_BUFFER_CHANGE_MONITOR (self));
+ g_assert (IDE_IS_VCS (vcs));
+
+ gbp_git_buffer_change_monitor_queue_update (self, FAST);
+}
+
static void
gbp_git_buffer_change_monitor_class_init (GbpGitBufferChangeMonitorClass *klass)
{
@@ -347,28 +372,34 @@ gbp_git_buffer_change_monitor_class_init (GbpGitBufferChangeMonitorClass *klass)
static void
gbp_git_buffer_change_monitor_init (GbpGitBufferChangeMonitor *self)
{
- self->buffer_signals = ide_signal_group_new (IDE_TYPE_BUFFER);
-
- ide_signal_group_connect_object (self->buffer_signals,
- "insert-text",
- G_CALLBACK (buffer_insert_text_after_cb),
- self,
- G_CONNECT_SWAPPED | G_CONNECT_AFTER);
- ide_signal_group_connect_object (self->buffer_signals,
- "delete-range",
- G_CALLBACK (buffer_delete_range_cb),
- self,
- G_CONNECT_SWAPPED);
- ide_signal_group_connect_object (self->buffer_signals,
- "delete-range",
- G_CALLBACK (buffer_delete_range_after_cb),
- self,
- G_CONNECT_SWAPPED | G_CONNECT_AFTER);
- ide_signal_group_connect_object (self->buffer_signals,
- "changed",
- G_CALLBACK (buffer_changed_after_cb),
- self,
- G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+ self->buffer_signals = g_signal_group_new (IDE_TYPE_BUFFER);
+ g_signal_group_connect_object (self->buffer_signals,
+ "insert-text",
+ G_CALLBACK (buffer_insert_text_after_cb),
+ self,
+ G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+ g_signal_group_connect_object (self->buffer_signals,
+ "delete-range",
+ G_CALLBACK (buffer_delete_range_cb),
+ self,
+ G_CONNECT_SWAPPED);
+ g_signal_group_connect_object (self->buffer_signals,
+ "delete-range",
+ G_CALLBACK (buffer_delete_range_after_cb),
+ self,
+ G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+ g_signal_group_connect_object (self->buffer_signals,
+ "changed",
+ G_CALLBACK (buffer_changed_after_cb),
+ self,
+ G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+
+ self->vcs_signals = g_signal_group_new (IDE_TYPE_VCS);
+ g_signal_group_connect_object (self->vcs_signals,
+ "changed",
+ G_CALLBACK (vcs_changed_cb),
+ self,
+ G_CONNECT_SWAPPED | G_CONNECT_AFTER);
}
IdeBufferChangeMonitor *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]