--- 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); }