? bug143874.patch ? depcomp ? gtk-doc.make ? gtksourceview.diff ? install-sh ? missing ? gtksourceview/.gtksourceview.c.swp ? gtksourceview/language-specs/.c.lang.swp ? gtksourceview/language-specs/LDIF.lang ? gtksourceview/language-specs/ini.lang ? gtksourceview/language-specs/vbnet.lang_new Index: gtksourceview/gtksourceview.c =================================================================== RCS file: /cvs/gnome/gtksourceview/gtksourceview/gtksourceview.c,v retrieving revision 1.30 diff -u -p -r1.30 gtksourceview.c --- gtksourceview/gtksourceview.c 10 Dec 2004 13:21:47 -0000 1.30 +++ gtksourceview/gtksourceview.c 8 Jan 2005 18:30:52 -0000 @@ -972,6 +972,8 @@ gtk_source_view_paint_margin (GtkSourceV gint margin_width; gint text_width, x_pixmap; gint i; + GtkTextIter cur; + gint cur_line; text_view = GTK_TEXT_VIEW (view); @@ -1093,6 +1095,13 @@ gtk_source_view_paint_margin (GtkSourceV marker_line = gtk_source_marker_get_line ( GTK_SOURCE_MARKER (current_marker->data)); + + gtk_text_buffer_get_iter_at_mark (text_view->buffer, + &cur, + gtk_text_buffer_get_insert (text_view->buffer)); + + cur_line = gtk_text_iter_get_line (&cur) + 1; + while (i < count) { gint pos; @@ -1106,10 +1115,24 @@ gtk_source_view_paint_margin (GtkSourceV if (view->priv->show_line_numbers) { - g_snprintf (str, sizeof (str), - "%d", g_array_index (numbers, gint, i) + 1); + gint line_to_paint = g_array_index (numbers, gint, i) + 1; + + if (line_to_paint == cur_line) + { + gchar *markup; + markup = g_strdup_printf ("%d", line_to_paint); + + pango_layout_set_markup (layout, markup, -1); - pango_layout_set_text (layout, str, -1); + g_free (markup); + } + else + { + g_snprintf (str, sizeof (str), + "%d", line_to_paint); + + pango_layout_set_markup (layout, str, -1); + } gtk_paint_layout (GTK_WIDGET (view)->style, win, @@ -1215,6 +1238,53 @@ gtk_source_view_expose (GtkWidget * gdk_window_invalidate_rect (w, NULL, FALSE); } + if (event->window == gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT)) + { + GdkRectangle visible_rect; + GdkRectangle redraw_rect; + GtkTextIter cur; + gint y; + gint height; + gint win_y; + + gtk_text_buffer_get_iter_at_mark (text_view->buffer, + &cur, + gtk_text_buffer_get_insert (text_view->buffer)); + + gtk_text_view_get_line_yrange (text_view, &cur, &y, &height); + + gtk_text_view_get_visible_rect (text_view, &visible_rect); + + gtk_text_view_buffer_to_window_coords (text_view, + GTK_TEXT_WINDOW_TEXT, + visible_rect.x, + visible_rect.y, + &redraw_rect.x, + &redraw_rect.y); + + gtk_text_view_buffer_to_window_coords (text_view, + GTK_TEXT_WINDOW_TEXT, + 0, + y, + NULL, + &win_y); + + redraw_rect.width = visible_rect.width; + redraw_rect.height = visible_rect.height; + + gtk_paint_flat_box (widget->style, + event->window, + GTK_WIDGET_STATE (widget), GTK_SHADOW_NONE, + &redraw_rect, + widget, + "current_line", + gtk_text_view_get_left_margin (text_view), + win_y, + redraw_rect.width - gtk_text_view_get_left_margin (text_view), + height); + } + + if (view->priv->show_margin && (event->window == gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT))) { @@ -1250,6 +1320,7 @@ gtk_source_view_expose (GtkWidget * gtk_text_view_get_left_margin (text_view)); } + if (GTK_WIDGET_CLASS (parent_class)->expose_event) event_handled = (* GTK_WIDGET_CLASS (parent_class)->expose_event)