static gboolean glow_timer (gpointer data) { //GdkPixbuf *glowing_screenshot; GTimeVal tv; gdouble glow_factor, now; Applet *applet = (Applet *) data; cairo_t *cr; cr = gdk_cairo_create (applet->gdk_window); g_get_current_time (&tv); now = (tv.tv_sec * (1.0 * G_USEC_PER_SEC) + tv.tv_usec) / G_USEC_PER_SEC; if (glow_start_time <= G_MINDOUBLE) glow_start_time = now; printf ("now: %f\n", now); glow_factor = fade_opacity * (0.5 - 0.5 * cos ((now - glow_start_time) * M_PI * 2.0 / loop_time)); printf ("glow_factor: %f\n", glow_factor); //gdk_window_clear (applet->gdk_window); or... GdkRegion *region; region = gdk_drawable_get_clip_region (applet->gdk_window); gdk_window_invalidate_region (applet->gdk_window, region, TRUE); gdk_window_process_updates (applet->gdk_window, TRUE); gdk_region_destroy (region); cairo_set_source_rgba (cr, 0.3, 0.3, 1, glow_factor); cairo_rectangle (cr, 0, 0, 40, 40); cairo_fill (cr); return TRUE; }