--- control-center-2.15.92/libkbdraw/keyboard-drawing.c.redraw 2006-08-27 22:42:37.000000000 -0400 +++ control-center-2.15.92/libkbdraw/keyboard-drawing.c 2006-08-27 22:54:18.000000000 -0400 @@ -1176,6 +1176,26 @@ } static void +redraw_overlapping_doodads ( + KeyboardDrawing * drawing, + KeyboardDrawingKey * key) +{ + GList *list; + gboolean do_draw = FALSE; + + for (list = drawing->keyboard_items; list; list = list->next) + { + KeyboardDrawingItem * item = list->data; + + if (do_draw && item->type == KEYBOARD_DRAWING_ITEM_TYPE_DOODAD) + draw_doodad (drawing, (KeyboardDrawingDoodad *) item); + + if (list->data == key) + do_draw = TRUE; + } +} + +static void draw_keyboard_item ( KeyboardDrawingItem * item, KeyboardDrawing * drawing) @@ -1340,7 +1360,7 @@ key->pressed = (event->type == GDK_KEY_PRESS); draw_key (drawing, key); - + redraw_overlapping_doodads (drawing, key); invalidate_key_region (drawing, key); return TRUE; @@ -1370,7 +1390,9 @@ 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); }