Blob Blame History Raw
--- libgnomekbd-2.17.2/libgnomekbd/gkbd-keyboard-drawing.c.redraw	2007-01-24 15:29:25.000000000 -0500
+++ libgnomekbd-2.17.2/libgnomekbd/gkbd-keyboard-drawing.c	2007-01-24 15:30:03.000000000 -0500
@@ -1121,6 +1121,25 @@
 }
 
 static void
+redraw_overlapping_doodads (GkbdKeyboardDrawing * drawing,
+                            GkbdKeyboardDrawingKey * key)
+{
+  GList *list;
+  gboolean do_draw = FALSE;
+
+  for (list = drawing->keyboard_items; list; list = list->next)
+    {
+      GkbdKeyboardDrawingItem * item = list->data;
+
+      if (do_draw && item->type == GKBD_KEYBOARD_DRAWING_ITEM_TYPE_DOODAD)
+	draw_doodad (drawing, (GkbdKeyboardDrawingDoodad *) item);
+
+      if (list->data == key)
+        do_draw = TRUE;
+    }
+}
+
+static void
 draw_keyboard_item (GkbdKeyboardDrawingItem * item,
 		    GkbdKeyboardDrawing * drawing)
 {
@@ -1279,7 +1298,7 @@
 	key->pressed = (event->type == GDK_KEY_PRESS);
 
 	draw_key (drawing, key);
-
+        redraw_overlapping_doodads (drawing, key);
 	invalidate_key_region (drawing, key);
 
 	return TRUE;
@@ -1309,6 +1328,7 @@
 		if (drawing->keys[i].pressed) {
 			drawing->keys[i].pressed = FALSE;
 			draw_key (drawing, drawing->keys + i);
+                        redraw_overlapping_doodads (drawing, drawing->keys + i);
 			invalidate_key_region (drawing, drawing->keys + i);
 		}