[gnome-builder] minimap: use EggSignalGroup for buffer signals
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] minimap: use EggSignalGroup for buffer signals
- Date: Thu, 21 May 2015 04:25:04 +0000 (UTC)
commit 323781b345ee67654bcaee13677774ac1548589d
Author: Christian Hergert <christian hergert me>
Date: Wed May 20 21:24:27 2015 -0700
minimap: use EggSignalGroup for buffer signals
We only have one at the moment, but I much prefer trusting EggSignalGroup
to managed the weak refs than to do all of that machinery manually in
callbacks.
libide/ide-source-map.c | 83 +++++++++++++++++++++-------------------------
1 files changed, 38 insertions(+), 45 deletions(-)
---
diff --git a/libide/ide-source-map.c b/libide/ide-source-map.c
index 2bad436..e8faab9 100644
--- a/libide/ide-source-map.c
+++ b/libide/ide-source-map.c
@@ -26,14 +26,14 @@
#include "ide-source-map.h"
#include "ide-source-view.h"
-#define CONCEAL_TIMEOUT 2000
+#define CONCEAL_TIMEOUT 2000
struct _IdeSourceMap
{
GtkSourceMap parent_instance;
- EggSignalGroup *signal_group;
- GtkTextBuffer *buffer;
+ EggSignalGroup *view_signals;
+ EggSignalGroup *buffer_signals;
GtkSourceGutterRenderer *line_renderer;
guint delayed_conceal_timeout;
guint show_map : 1;
@@ -168,26 +168,7 @@ ide_source_map__view_notify_buffer (IdeSourceMap *self,
g_assert (GTK_SOURCE_IS_VIEW (view));
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
- if (self->buffer != buffer)
- {
- if (self->buffer != NULL)
- {
- g_signal_handlers_disconnect_by_func (self->buffer,
- G_CALLBACK (ide_source_map__buffer_line_flags_changed),
- self);
- ide_clear_weak_pointer (&self->buffer);
- }
-
- if (IDE_IS_BUFFER (buffer))
- {
- ide_set_weak_pointer (&self->buffer, buffer);
- g_signal_connect_object (buffer,
- "line-flags-changed",
- G_CALLBACK (ide_source_map__buffer_line_flags_changed),
- self,
- G_CONNECT_SWAPPED);
- }
- }
+ egg_signal_group_set_target (self->buffer_signals, buffer);
}
static gboolean
@@ -223,7 +204,7 @@ ide_source_map__view_changed (IdeSourceMap *self,
g_object_bind_property_full (view, "font-desc", self, "font-desc", G_BINDING_SYNC_CREATE,
shrink_font, NULL, NULL, NULL);
- egg_signal_group_set_target (self->signal_group, view);
+ egg_signal_group_set_target (self->view_signals, view);
}
static void
@@ -237,8 +218,10 @@ ide_source_map_destroy (GtkWidget *widget)
self->delayed_conceal_timeout = 0;
}
- ide_clear_weak_pointer (&self->buffer);
- g_clear_object (&self->signal_group);
+ self->line_renderer = NULL;
+
+ g_clear_object (&self->view_signals);
+ g_clear_object (&self->buffer_signals);
GTK_WIDGET_CLASS (ide_source_map_parent_class)->destroy (widget);
}
@@ -276,55 +259,65 @@ static void
ide_source_map_init (IdeSourceMap *self)
{
GtkSourceGutter *gutter;
- GtkSourceView *child_view = gtk_source_map_get_child_view (GTK_SOURCE_MAP (self));
+ GtkSourceView *child_view;
- gutter = gtk_source_view_get_gutter (child_view, GTK_TEXT_WINDOW_LEFT);
- self->line_renderer = g_object_new (IDE_TYPE_LINE_CHANGE_GUTTER_RENDERER,
- "size", 2,
- "visible", TRUE,
- NULL);
- gtk_source_gutter_insert (gutter, self->line_renderer, 0);
+ /* Buffer */
+ self->buffer_signals = egg_signal_group_new (GTK_TYPE_TEXT_BUFFER);
+ egg_signal_group_connect_object (self->buffer_signals,
+ "line-flags-changed",
+ G_CALLBACK (ide_source_map__buffer_line_flags_changed),
+ self,
+ G_CONNECT_SWAPPED);
/* View */
- self->signal_group = egg_signal_group_new (GTK_SOURCE_TYPE_VIEW);
+ self->view_signals = egg_signal_group_new (GTK_SOURCE_TYPE_VIEW);
- g_signal_connect_object (self,
- "notify::view",
- G_CALLBACK (ide_source_map__view_changed),
- self,
- G_CONNECT_SWAPPED);
-
- egg_signal_group_connect_object (self->signal_group,
+ egg_signal_group_connect_object (self->view_signals,
"notify::buffer",
G_CALLBACK (ide_source_map__view_notify_buffer),
self,
G_CONNECT_SWAPPED);
- egg_signal_group_connect_object (self->signal_group,
+ egg_signal_group_connect_object (self->view_signals,
"enter-notify-event",
G_CALLBACK (ide_source_map__enter_notify_event),
self,
G_CONNECT_SWAPPED);
- egg_signal_group_connect_object (self->signal_group,
+ egg_signal_group_connect_object (self->view_signals,
"leave-notify-event",
G_CALLBACK (ide_source_map__leave_notify_event),
self,
G_CONNECT_SWAPPED);
- egg_signal_group_connect_object (self->signal_group,
+ egg_signal_group_connect_object (self->view_signals,
"motion-notify-event",
G_CALLBACK (ide_source_map__motion_notify_event),
self,
G_CONNECT_SWAPPED);
- egg_signal_group_connect_object (self->signal_group,
+ egg_signal_group_connect_object (self->view_signals,
"scroll-event",
G_CALLBACK (ide_source_map__scroll_event),
self,
G_CONNECT_SWAPPED);
+ g_signal_connect_object (self,
+ "notify::view",
+ G_CALLBACK (ide_source_map__view_changed),
+ self,
+ G_CONNECT_SWAPPED);
+
/* Child view */
+ child_view = gtk_source_map_get_child_view (GTK_SOURCE_MAP (self));
+
+ gutter = gtk_source_view_get_gutter (child_view, GTK_TEXT_WINDOW_LEFT);
+ self->line_renderer = g_object_new (IDE_TYPE_LINE_CHANGE_GUTTER_RENDERER,
+ "size", 2,
+ "visible", TRUE,
+ NULL);
+ gtk_source_gutter_insert (gutter, self->line_renderer, 0);
+
g_signal_connect_object (child_view,
"enter-notify-event",
G_CALLBACK (ide_source_map__enter_notify_event),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]