[gitg] Change the single line (un)stage to use a pixbuf renderer



commit 6ef33c5c8f866bc7028c6db70a475cec60e8b4a1
Author: Garrett Regier <garrettregier gmail com>
Date:   Sat Jul 23 03:31:54 2011 -0700

    Change the single line (un)stage to use a pixbuf renderer
    
    This is meant to fix issues caused in the past where (un)staging a single
    line does not work because a selection is started instead. This
    also makes the feature more visible.

 configure.ac                   |    2 +-
 gitg/gitg-commit-view.c        |  271 +++++++++++++++++++++++++++-------------
 gitg/gitg-diff-line-renderer.c |  181 +++------------------------
 gitg/gitg-diff-view.c          |   39 ------
 gitg/gitg-diff-view.h          |    9 --
 5 files changed, 203 insertions(+), 299 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 992a3fb..76776df 100644
--- a/configure.ac
+++ b/configure.ac
@@ -56,7 +56,7 @@ AC_CHECK_LIB([m], [sinf])
 
 GLIB_REQUIRED_VERSION=2.26
 GTK_REQUIRED_VERSION=3.0.0
-GTKSOURCEVIEW_REQUIRED_VERSION=3.0.0
+GTKSOURCEVIEW_REQUIRED_VERSION=3.1.3
 
 PKG_CHECK_MODULES(GITG, [
 	gtk+-3.0 >= $GTK_REQUIRED_VERSION
diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c
index 0b98b45..b7640d0 100644
--- a/gitg/gitg-commit-view.c
+++ b/gitg/gitg-commit-view.c
@@ -23,6 +23,7 @@
 #include <gtksourceview/gtksourceview.h>
 #include <gtksourceview/gtksourcelanguagemanager.h>
 #include <gtksourceview/gtksourcestyleschememanager.h>
+#include <gtksourceview/gtksourcegutterrendererpixbuf.h>
 #include <glib/gi18n.h>
 #include <string.h>
 #include <libgitg/gitg-commit.h>
@@ -70,6 +71,7 @@ struct _GitgCommitViewPrivate
 
 	GtkSourceView *changes_view;
 	GtkTextView *comment_view;
+	GtkSourceGutterRenderer *pixbuf_renderer;
 	GtkCheckButton *check_button_signed_off_by;
 	GtkCheckButton *check_button_amend;
 
@@ -142,6 +144,22 @@ static void on_delete_file (GtkAction      *action,
 
 static void on_check_button_amend_toggled (GtkToggleButton *button, GitgCommitView *view);
 
+static void pixbuf_renderer_query_data_cb (GtkSourceGutterRenderer      *renderer,
+                                           GtkTextIter                  *start,
+                                           GtkTextIter                  *end,
+                                           GtkSourceGutterRendererState  state,
+                                           GitgCommitView               *view);
+static gboolean pixbuf_renderer_query_activatable_cb (GtkSourceGutterRenderer *renderer,
+                                                      GtkTextIter             *iter,
+                                                      GdkRectangle            *area,
+                                                      GdkEvent                *event,
+                                                      GitgCommitView          *view);
+static void pixbuf_renderer_activate_cb (GtkSourceGutterRenderer *renderer,
+                                         GtkTextIter             *iter,
+                                         GdkRectangle            *area,
+                                         GdkEvent                *event,
+                                         GitgCommitView          *view);
+
 static void
 gitg_commit_view_finalize (GObject *object)
 {
@@ -1069,35 +1087,63 @@ set_highlight (GitgCommitView *view, GtkTextIter *iter)
 	                           &end);
 }
 
-static void
-update_cursor_view (GitgCommitView *view, gboolean isctrl)
+static gboolean
+gutter_event (GtkWidget *widget, GdkEventAny *event, GitgCommitView *view)
 {
-	gboolean is_hunk = FALSE;
+	GtkTextView *textview = GTK_TEXT_VIEW (view->priv->changes_view);
+	gint x;
+	gint y;
+	gint width;
+	gint height;
+	gint buf_x;
+	gint buf_y;
 	GtkTextIter iter;
-	GitgDiffLineType line_type = GITG_DIFF_LINE_TYPE_NONE;
-	GdkWindow *window;
+	GitgDiffLineType line_type;
+	GtkSourceGutter *gutter;
+	GtkSourceGutterRenderer *renderer_at_pos;
+
+	/* Get where the pointer really is. */
+	GdkWindow *win = gtk_text_view_get_window (textview, GTK_TEXT_WINDOW_LEFT);
+
+	gdk_window_get_pointer (win, &x, &y, NULL);
 
-	window = gtk_text_view_get_window (GTK_TEXT_VIEW (view->priv->changes_view), GTK_TEXT_WINDOW_TEXT);
+	width = gdk_window_get_width (win);
+	height = gdk_window_get_height (win);
 
-	if (!get_info_at_pointer (view, &iter, &is_hunk, NULL, &line_type))
+	if (x < 0 || y < 0 || x > width || y > height)
 	{
 		unset_highlight (view);
-		gdk_window_set_cursor (window, NULL);
-		return;
+		gdk_window_set_cursor (event->window, NULL);
+		return FALSE;
 	}
 
-	if (is_hunk ||
-	    (isctrl && (line_type == GITG_DIFF_LINE_TYPE_ADD ||
-	                line_type == GITG_DIFF_LINE_TYPE_REMOVE)))
+	/* Get the iter where the cursor is at */
+	gtk_text_view_window_to_buffer_coords (textview, GTK_TEXT_WINDOW_LEFT, x, y, &buf_x, &buf_y);
+	gtk_text_view_get_iter_at_location (textview, &iter, buf_x, buf_y);
+
+	gtk_text_iter_set_line_offset (&iter, 0);
+
+	line_type = gitg_diff_view_get_line_type (GITG_DIFF_VIEW (view->priv->changes_view),
+		                                  &iter);
+
+	gutter = gtk_source_view_get_gutter (view->priv->changes_view,
+	                                     GTK_TEXT_WINDOW_LEFT);
+	renderer_at_pos = gtk_source_gutter_get_renderer_at_pos (gutter, x, y);
+
+	if (renderer_at_pos == view->priv->pixbuf_renderer &&
+	    (line_type == GITG_DIFF_LINE_TYPE_ADD ||
+	     line_type == GITG_DIFF_LINE_TYPE_REMOVE))
 	{
-		gdk_window_set_cursor (window, view->priv->hand);
 		set_highlight (view, &iter);
+		gdk_window_set_cursor (event->window, view->priv->hand);
 	}
 	else
 	{
-		gdk_window_set_cursor (window, NULL);
 		unset_highlight (view);
+		gdk_window_set_cursor (event->window, NULL);
 	}
+
+	return FALSE;
 }
 
 static gboolean
@@ -1105,13 +1151,17 @@ view_event (GtkWidget *widget, GdkEventAny *event, GitgCommitView *view)
 {
 	GtkTextWindowType type;
 	GtkTextBuffer *buffer;
-
-	gboolean isctrl = FALSE;
-	GdkModifierType state;
+	GtkTextIter iter;
+	gboolean is_hunk = FALSE;
 
 	type = gtk_text_view_get_window_type (GTK_TEXT_VIEW (widget), event->window);
 	buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (widget));
 
+	if (type == GTK_TEXT_WINDOW_LEFT)
+	{
+		return gutter_event (widget, event, view);
+	}
+
 	if (type == GTK_TEXT_WINDOW_TEXT && event->type == GDK_LEAVE_NOTIFY)
 	{
 		unset_highlight (view);
@@ -1119,10 +1169,7 @@ view_event (GtkWidget *widget, GdkEventAny *event, GitgCommitView *view)
 		return FALSE;
 	}
 
-	if (gdk_event_get_state ((GdkEvent *)event, &state))
-	{
-		isctrl = state & GDK_CONTROL_MASK;
-	}
+	get_info_at_pointer (view, &iter, &is_hunk, NULL, NULL);
 
 	if (event->type == GDK_LEAVE_NOTIFY ||
 	    event->type == GDK_MOTION_NOTIFY ||
@@ -1130,79 +1177,30 @@ view_event (GtkWidget *widget, GdkEventAny *event, GitgCommitView *view)
 	    event->type == GDK_BUTTON_RELEASE ||
 	    event->type == GDK_ENTER_NOTIFY)
 	{
-		update_cursor_view (view, isctrl);
-	}
-
-	if (type == GTK_TEXT_WINDOW_TEXT && event->type == GDK_BUTTON_RELEASE &&
-	    ((GdkEventButton *)event)->button == 1 &&
-	    !gtk_text_buffer_get_has_selection (buffer))
-	{
-		GtkTextIter iter;
-		gboolean is_hunk = FALSE;
-		GitgDiffLineType line_type = GITG_DIFF_LINE_TYPE_NONE;
-
-		get_info_at_pointer (view, &iter, &is_hunk, NULL, &line_type);
-
 		if (is_hunk)
 		{
-			if (handle_stage_unstage (view, &iter))
-			{
-				unset_highlight (view);
-				update_cursor_view (view, isctrl);
-			}
+			set_highlight (view, &iter);
+			gdk_window_set_cursor (event->window, view->priv->hand);
 		}
-		else if (isctrl && (line_type == GITG_DIFF_LINE_TYPE_ADD ||
-		                    line_type == GITG_DIFF_LINE_TYPE_REMOVE))
+		else
 		{
-			if (handle_stage_unstage_line (view, &iter))
-			{
-				unset_highlight (view);
-				update_cursor_view (view, isctrl);
-			}
+			unset_highlight (view);
+			gdk_window_set_cursor (event->window, NULL);
 		}
 	}
 
-	return FALSE;
-}
-
-static gchar *
-stage_unstage_label_func (GitgDiffView   *diff_view,
-                          gint            line,
-                          GitgCommitView *view)
-{
-	static gchar const *format = "<small><b>%s</b></small>";
-
-	gchar const *labels[] = {
-		_("unstage"),
-		_("stage")
-	};
-
-	gboolean staging = (view->priv->current_changes & GITG_CHANGED_FILE_CHANGES_UNSTAGED) != 0;
-
-	if (line == -1)
-	{
-		return g_markup_printf_escaped (format, labels[staging]);
-	}
-	else if (view->priv->highlight_mark)
+	if (type == GTK_TEXT_WINDOW_TEXT &&event->type == GDK_BUTTON_RELEASE &&
+	    ((GdkEventButton *) event)->button == 1 && is_hunk &&
+	    !gtk_text_buffer_get_has_selection (buffer))
 	{
-		GtkTextBuffer *buffer;
-		GtkTextIter iter;
-		GtkTextIter hl_iter;
-
-		buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (diff_view));
-		gtk_text_buffer_get_iter_at_line (buffer, &iter, line);
-
-		gtk_text_buffer_get_iter_at_mark (buffer,
-		                                  &hl_iter,
-		                                  view->priv->highlight_mark);
-
-		if (gtk_text_iter_equal (&iter, &hl_iter))
+		if (handle_stage_unstage (view, &iter))
 		{
-			return g_markup_printf_escaped (format, labels[staging]);
+			unset_highlight (view);
+			gdk_window_set_cursor (event->window, NULL);
 		}
 	}
 
-	return NULL;
+	return FALSE;
 }
 
 static GtkTextBuffer *
@@ -1361,10 +1359,29 @@ on_tag_added (GtkTextTagTable *table,
 	                           gtk_text_tag_table_get_size (table) - 1);
 }
 
+/* Copied from GtkSourceView's gtksourceviewgutterrenderermarks.c */
+static int
+measure_line_height (GtkSourceView *view)
+{
+	PangoLayout *layout;
+	gint height = 12;
+
+	layout = gtk_widget_create_pango_layout (GTK_WIDGET (view), "QWERTY");
+
+	if (layout)
+	{
+		pango_layout_get_pixel_size (layout, NULL, &height);
+		g_object_unref (layout);
+	}
+
+	return height - 2;
+}
+
 static void
 gitg_commit_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder)
 {
 	GtkSourceMarkAttributes *attrs;
+	GtkSourceGutter *gutter;
 
 	if (parent_iface.parser_finished)
 		parent_iface.parser_finished(buildable, builder);
@@ -1403,11 +1420,6 @@ gitg_commit_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder)
 	gtk_widget_add_events (GTK_WIDGET (self->priv->changes_view),
 	                       GDK_LEAVE_NOTIFY_MASK | GDK_ENTER_NOTIFY_MASK);
 
-	gitg_diff_view_set_label_func (GITG_DIFF_VIEW (self->priv->changes_view),
-	                               (GitgDiffViewLabelFunc)stage_unstage_label_func,
-	                               self,
-	                               NULL);
-
 	self->priv->comment_view = GTK_TEXT_VIEW(gtk_builder_get_object(builder, "text_view_comment"));
 	self->priv->check_button_signed_off_by = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "check_button_signed_off_by"));
 	self->priv->check_button_amend = GTK_CHECK_BUTTON(gtk_builder_get_object(builder, "check_button_amend"));
@@ -1578,6 +1590,29 @@ gitg_commit_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder)
 	                  "toggled",
 	                  G_CALLBACK (on_check_button_amend_toggled),
 	                  self);
+
+	gutter = gtk_source_view_get_gutter (self->priv->changes_view,
+	                                     GTK_TEXT_WINDOW_LEFT);
+
+	self->priv->pixbuf_renderer = gtk_source_gutter_renderer_pixbuf_new ();
+	g_object_set (self->priv->pixbuf_renderer, "xpad", 4, NULL);
+
+	gtk_source_gutter_insert (gutter, self->priv->pixbuf_renderer, 1);
+	gtk_source_gutter_renderer_set_size (self->priv->pixbuf_renderer,
+	                                     measure_line_height (GTK_SOURCE_VIEW (self->priv->changes_view)));
+
+	g_signal_connect (self->priv->pixbuf_renderer,
+	                  "query-data",
+	                  G_CALLBACK (pixbuf_renderer_query_data_cb),
+	                  self);
+	g_signal_connect (self->priv->pixbuf_renderer,
+	                  "query-activatable",
+	                  G_CALLBACK (pixbuf_renderer_query_activatable_cb),
+	                  self);
+	g_signal_connect (self->priv->pixbuf_renderer,
+	                  "activate",
+	                  G_CALLBACK (pixbuf_renderer_activate_cb),
+	                  self);
 }
 
 static void
@@ -1619,6 +1654,12 @@ gitg_commit_view_dispose(GObject *object)
 		g_object_unref(self->priv->commit);
 		self->priv->commit = NULL;
 	}
+
+	if (self->priv->pixbuf_renderer != NULL)
+	{
+		g_object_unref (self->priv->pixbuf_renderer);
+		self->priv->pixbuf_renderer = NULL;
+	}
 }
 
 static void
@@ -2522,3 +2563,59 @@ on_check_button_amend_toggled (GtkToggleButton *button, GitgCommitView *view)
 		g_free (message);
 	}
 }
+
+static void
+pixbuf_renderer_query_data_cb (GtkSourceGutterRenderer      *renderer,
+                               GtkTextIter                  *start,
+                               GtkTextIter                  *end,
+                               GtkSourceGutterRendererState  state,
+                               GitgCommitView               *view)
+{
+	GitgDiffView *diff_view = GITG_DIFF_VIEW (view->priv->changes_view);
+	const gchar *stock_id;
+
+	switch (gitg_diff_view_get_line_type (diff_view, start))
+	{
+		case GITG_DIFF_LINE_TYPE_NONE:
+			stock_id = GTK_STOCK_DISCARD;
+			break;
+		case GITG_DIFF_LINE_TYPE_ADD:
+			stock_id = GTK_STOCK_ADD;
+			break;
+		case GITG_DIFF_LINE_TYPE_REMOVE:
+			stock_id = GTK_STOCK_REMOVE;
+			break;
+		default:
+			g_return_if_reached ();
+	}
+
+	g_object_set (renderer,
+	              "stock-id", stock_id,
+	              NULL);
+}
+
+static gboolean
+pixbuf_renderer_query_activatable_cb (GtkSourceGutterRenderer *renderer,
+                                      GtkTextIter             *iter,
+                                      GdkRectangle            *area,
+                                      GdkEvent                *event,
+                                      GitgCommitView          *view)
+{
+	GitgDiffView *diff_view = GITG_DIFF_VIEW (view->priv->changes_view);
+	GitgDiffLineType line_type;
+
+	line_type = gitg_diff_view_get_line_type (diff_view, iter);
+
+	return line_type != GITG_DIFF_LINE_TYPE_NONE &&
+	       ((GdkEventButton *) event)->button == 1;
+}
+
+static void
+pixbuf_renderer_activate_cb (GtkSourceGutterRenderer *renderer,
+                             GtkTextIter             *iter,
+                             GdkRectangle            *area,
+                             GdkEvent                *event,
+                             GitgCommitView          *view)
+{
+	handle_stage_unstage_line (view, iter);
+}
diff --git a/gitg/gitg-diff-line-renderer.c b/gitg/gitg-diff-line-renderer.c
index 366119e..e28eb8f 100644
--- a/gitg/gitg-diff-line-renderer.c
+++ b/gitg/gitg-diff-line-renderer.c
@@ -30,15 +30,13 @@ enum
 {
 	PROP_0,
 	PROP_LINE_OLD,
-	PROP_LINE_NEW,
-	PROP_LABEL
+	PROP_LINE_NEW
 };
 
 struct _GitgDiffLineRendererPrivate
 {
 	gint line_old;
 	gint line_new;
-	gchar *label;
 	gint num_digits;
 
 	PangoLayout *cached_layout;
@@ -66,10 +64,6 @@ gitg_diff_line_renderer_set_property (GObject      *object,
 		case PROP_LINE_NEW:
 			self->priv->line_new = g_value_get_int (value);
 		break;
-		case PROP_LABEL:
-			g_free (self->priv->label);
-			self->priv->label = g_value_dup_string (value);
-		break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -92,9 +86,6 @@ gitg_diff_line_renderer_get_property (GObject    *object,
 		case PROP_LINE_NEW:
 			g_value_set_int (value, self->priv->line_new);
 		break;
-		case PROP_LABEL:
-			g_value_set_string (value, self->priv->label);
-		break;
 		default:
 			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -102,16 +93,6 @@ gitg_diff_line_renderer_get_property (GObject    *object,
 }
 
 static void
-gitg_diff_line_renderer_finalize (GObject *object)
-{
-	GitgDiffLineRenderer *self = GITG_DIFF_LINE_RENDERER (object);
-
-	g_free (self->priv->label);
-
-	G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->finalize (object);
-}
-
-static void
 create_layout (GitgDiffLineRenderer *renderer,
                GtkWidget            *widget)
 {
@@ -155,97 +136,13 @@ gitg_diff_line_renderer_begin (GtkSourceGutterRenderer      *renderer,
 }
 
 static void
-darken_or_lighten (cairo_t       *ctx,
-                   GdkRGBA const *color)
-{
-	float r, g, b;
-
-	r = color->red;
-	g = color->green;
-	b = color->blue;
-
-	if ((r + g + b) / 3 > 0.5)
-	{
-		cairo_set_source_rgb (ctx,
-		                      r * 0.5,
-		                      g * 0.5,
-		                      b * 0.5);
-	}
-	else
-	{
-		cairo_set_source_rgb (ctx,
-		                      r * 1.5,
-		                      g * 1.5,
-		                      b * 1.5);
-	}
-}
-
-static void
-render_label (GtkSourceGutterRenderer      *renderer,
-              cairo_t                      *ctx,
-              GdkRectangle                 *background_area,
-              GdkRectangle                 *cell_area,
-              GtkTextIter                  *start,
-              GtkTextIter                  *end,
-              GtkSourceGutterRendererState  renderer_state)
-{
-	GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer);
-	GtkWidget *widget;
-	PangoLayout *layout;
-	GtkStyleContext *style_context;
-	GtkStateType state;
-	gint pixel_height;
-	GdkRGBA fg_color, bg_color;
-
-	widget = GTK_WIDGET (gtk_source_gutter_renderer_get_view (renderer));
-	layout = lr->priv->cached_layout;
-
-	pango_layout_set_markup (layout, lr->priv->label, -1);
-	pango_layout_set_width (layout, cell_area->width);
-
-	pango_layout_get_pixel_size (layout, NULL, &pixel_height);
-
-	pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER);
-
-	style_context = gtk_widget_get_style_context (widget);
-	state = gtk_widget_get_state (widget);
-
-	gtk_style_context_get_color (style_context, state, &fg_color);
-	gtk_style_context_get_background_color (style_context, state, &bg_color);
-
-	gdk_cairo_set_source_rgba (ctx, &fg_color);
-
-	gitg_utils_rounded_rectangle (ctx,
-	                              cell_area->x + 0.5,
-	                              cell_area->y + 0.5,
-	                              cell_area->width - 1,
-	                              cell_area->height - 1,
-	                              5);
-
-	cairo_fill_preserve (ctx);
-
-	darken_or_lighten (ctx, &fg_color);
-
-	cairo_set_line_width (ctx, 1);
-	cairo_stroke (ctx);
-
-	gdk_cairo_set_source_rgba (ctx, &bg_color);
-
-	cairo_move_to (ctx,
-	               cell_area->x + cell_area->width / 2,
-	               cell_area->y + (cell_area->height - pixel_height) / 2);
-
-	pango_cairo_show_layout (ctx, layout);
-}
-
-static void
-render_lines (GtkSourceGutterRenderer      *renderer,
-              cairo_t                      *ctx,
-              GdkRectangle                 *background_area,
-              GdkRectangle                 *cell_area,
-              GtkTextIter                  *start,
-              GtkTextIter                  *end,
-              GtkSourceGutterRendererState  renderer_state)
+gitg_diff_line_renderer_draw (GtkSourceGutterRenderer      *renderer,
+                              cairo_t                      *ctx,
+                              GdkRectangle                 *background_area,
+                              GdkRectangle                 *cell_area,
+                              GtkTextIter                  *start,
+                              GtkTextIter                  *end,
+                              GtkSourceGutterRendererState  renderer_state)
 {
 	GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer);
 	gchar old_str[16];
@@ -255,6 +152,16 @@ render_lines (GtkSourceGutterRenderer      *renderer,
 	GtkStyleContext *style_context;
 	guint xpad = 0;
 
+	/* Chain up to draw background */
+	GTK_SOURCE_GUTTER_RENDERER_CLASS (
+		gitg_diff_line_renderer_parent_class)->draw (renderer,
+		                                             ctx,
+		                                             background_area,
+		                                             cell_area,
+		                                             start,
+		                                             end,
+		                                             renderer_state);
+
 	widget = GTK_WIDGET (gtk_source_gutter_renderer_get_view (renderer));
 	layout = lr->priv->cached_layout;
 
@@ -307,49 +214,6 @@ render_lines (GtkSourceGutterRenderer      *renderer,
 }
 
 static void
-gitg_diff_line_renderer_draw (GtkSourceGutterRenderer      *renderer,
-                              cairo_t                      *ctx,
-                              GdkRectangle                 *background_area,
-                              GdkRectangle                 *cell_area,
-                              GtkTextIter                  *start,
-                              GtkTextIter                  *end,
-                              GtkSourceGutterRendererState  renderer_state)
-{
-	GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer);
-
-	/* Chain up to draw background */
-	GTK_SOURCE_GUTTER_RENDERER_CLASS (
-		gitg_diff_line_renderer_parent_class)->draw (renderer,
-		                                             ctx,
-		                                             background_area,
-		                                             cell_area,
-		                                             start,
-		                                             end,
-		                                             renderer_state);
-
-	if (lr->priv->label)
-	{
-		render_label (renderer,
-		              ctx,
-		              background_area,
-		              cell_area,
-		              start,
-		              end,
-		              renderer_state);
-	}
-	else
-	{
-		render_lines (renderer,
-		              ctx,
-		              background_area,
-		              cell_area,
-		              start,
-		              end,
-		              renderer_state);
-	}
-}
-
-static void
 gitg_diff_line_renderer_end (GtkSourceGutterRenderer *renderer)
 {
 	GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer);
@@ -469,7 +333,6 @@ gitg_diff_line_renderer_class_init (GitgDiffLineRendererClass *klass)
 
 	object_class->set_property = gitg_diff_line_renderer_set_property;
 	object_class->get_property = gitg_diff_line_renderer_get_property;
-	object_class->finalize = gitg_diff_line_renderer_finalize;
 
 	g_object_class_install_property (object_class,
 	                                 PROP_LINE_OLD,
@@ -491,14 +354,6 @@ gitg_diff_line_renderer_class_init (GitgDiffLineRendererClass *klass)
 	                                                   -1,
 	                                                   G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 
-	g_object_class_install_property (object_class,
-	                                 PROP_LABEL,
-	                                 g_param_spec_string ("label",
-	                                                      "Label",
-	                                                      "Label",
-	                                                      NULL,
-	                                                      G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
 	g_type_class_add_private (object_class, sizeof (GitgDiffLineRendererPrivate));
 }
 
diff --git a/gitg/gitg-diff-view.c b/gitg/gitg-diff-view.c
index e7665a5..284a867 100644
--- a/gitg/gitg-diff-view.c
+++ b/gitg/gitg-diff-view.c
@@ -136,10 +136,6 @@ struct _GitgDiffViewPrivate
 	guint lines_counters[2];
 
 	gboolean ignore_changes;
-
-	GitgDiffViewLabelFunc label_func;
-	gpointer label_func_user_data;
-	GDestroyNotify label_func_destroy_notify;
 };
 
 G_DEFINE_TYPE (GitgDiffView, gitg_diff_view, GTK_SOURCE_TYPE_VIEW)
@@ -219,12 +215,6 @@ gitg_diff_view_finalize (GObject *object)
 	regions_free (view);
 	g_sequence_free (view->priv->regions_index);
 
-	if (view->priv->label_func &&
-	    view->priv->label_func_destroy_notify)
-	{
-		view->priv->label_func_destroy_notify (view->priv->label_func_user_data);
-	}
-
 	G_OBJECT_CLASS (gitg_diff_view_parent_class)->finalize (object);
 }
 
@@ -827,16 +817,6 @@ line_renderer_query_data_cb (GtkSourceGutterRenderer      *renderer,
 		view->priv->lines_counters[0] = view->priv->lines_counters[1] = 0;
 		*current = (*current)->next->visible ? (*current)->next : NULL;
 	}
-
-	if (view->priv->label_func)
-	{
-		gchar *label = view->priv->label_func (view,
-		                                       line_number,
-		                                       view->priv->label_func_user_data);
-
-		g_object_set (renderer, "label", label, NULL);
-		g_free (label);
-	}
 }
 
 static gint
@@ -1651,22 +1631,3 @@ gitg_diff_view_clear_line (GitgDiffView *view,
 	view->priv->ignore_changes = FALSE;
 	gtk_text_buffer_end_user_action (buffer);
 }
-
-void
-gitg_diff_view_set_label_func (GitgDiffView *view,
-                               GitgDiffViewLabelFunc func,
-                               gpointer user_data,
-                               GDestroyNotify destroy_notify)
-{
-	g_return_if_fail (GITG_IS_DIFF_VIEW (view));
-
-	if (view->priv->label_func &&
-	    view->priv->label_func_destroy_notify)
-	{
-		view->priv->label_func_destroy_notify (view->priv->label_func_user_data);
-	}
-
-	view->priv->label_func = func;
-	view->priv->label_func_user_data = user_data;
-	view->priv->label_func_destroy_notify = destroy_notify;
-}
diff --git a/gitg/gitg-diff-view.h b/gitg/gitg-diff-view.h
index 4aa294e..f714b53 100644
--- a/gitg/gitg-diff-view.h
+++ b/gitg/gitg-diff-view.h
@@ -76,10 +76,6 @@ struct _GitgDiffViewClass
 	void (*hunk_added)(GitgDiffView *view, GitgDiffIter *iter);
 };
 
-typedef gchar *(*GitgDiffViewLabelFunc) (GitgDiffView *view,
-                                         gint          line,
-                                         gpointer      user_data);
-
 GType gitg_diff_view_get_type(void) G_GNUC_CONST;
 GitgDiffView *gitg_diff_view_new(void);
 
@@ -105,11 +101,6 @@ void gitg_diff_iter_get_bounds (GitgDiffIter const *iter, GtkTextIter *start, Gt
 GitgDiffLineType gitg_diff_view_get_line_type (GitgDiffView *view, GtkTextIter const *iter);
 void gitg_diff_view_clear_line (GitgDiffView *view, GtkTextIter const *iter, GitgDiffLineType old_type, GitgDiffLineType new_type);
 
-void gitg_diff_view_set_label_func (GitgDiffView *view,
-                                    GitgDiffViewLabelFunc func,
-                                    gpointer user_data,
-                                    GDestroyNotify destroy_notify);
-
 G_END_DECLS
 
 #endif /* __GITG_DIFF_VIEW_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]