diff --git a/src/item-cursor.c b/src/item-cursor.c
index 6be64a7..986935a 100644
--- a/src/item-cursor.c
+++ b/src/item-cursor.c
@@ -144,9 +144,12 @@ static int
 cb_item_cursor_animation (GnmItemCursor *ic)
 {
 	GocItem *item = GOC_ITEM (ic);
+	GdkWindow *w = gtk_widget_get_window (GTK_WIDGET (item->canvas));
+	cairo_t *cr = gdk_cairo_create (w);
 
 	ic->state = !ic->state;
-	goc_item_invalidate (item);
+	goc_item_draw (item, cr);
+	cairo_destroy (cr);
 	return TRUE;
 }
 
@@ -331,6 +334,9 @@ item_cursor_draw (GocItem const *item, cairo_t *cr)
 		draw_thick    = 2;
 		fore = &ic->ant_color;
 		back = &ic->ant_background_color;
+		/* ensure we don't use transparency to avoid compositing issues
+		when redrawing the ants in the timer callback */
+		fore->alpha = back->alpha = 1.;
 		if (ic->state) {
 			GdkRGBA *swap = fore;
 			fore = back;
