60bd6a9
--- gnome-settings-daemon-2.27.91/plugins/mouse/gsd-locate-pointer.c	2009-08-30 02:33:02.791519895 -0400
60bd6a9
+++ hacked/plugins/mouse/gsd-locate-pointer.c	2009-08-30 02:32:13.785515177 -0400
60bd6a9
@@ -126,27 +126,29 @@
60bd6a9
   cairo_t *cr;
60bd6a9
   GdkBitmap *mask;
60bd6a9
 
60bd6a9
-  if (event->window != data->window)
60bd6a9
+  if (event && event->window != data->window)
60bd6a9
     return FALSE;
60bd6a9
 
60bd6a9
-  cr = gdk_cairo_create (data->window);
60bd6a9
-
60bd6a9
   if (gtk_widget_is_composited (data->widget))
60bd6a9
-    locate_pointer_paint (data, cr, TRUE);
60bd6a9
-  else
60bd6a9
     {
60bd6a9
-      locate_pointer_paint (data, cr, FALSE);
60bd6a9
+      cr = gdk_cairo_create (data->window);
60bd6a9
+      locate_pointer_paint (data, cr, TRUE);
60bd6a9
       cairo_destroy (cr);
60bd6a9
-
60bd6a9
+    }
60bd6a9
+  else
60bd6a9
+    {
60bd6a9
       /* create a bitmap for the shape, reuse the cairo_t to paint on it */
60bd6a9
       mask = gdk_pixmap_new (data->window, WINDOW_SIZE, WINDOW_SIZE, 1);
60bd6a9
       cr = gdk_cairo_create (mask);
60bd6a9
       locate_pointer_paint (data, cr, FALSE);
60bd6a9
       gdk_window_shape_combine_mask (data->window, mask, 0, 0);
60bd6a9
       g_object_unref (mask);
60bd6a9
-    }
60bd6a9
+      cairo_destroy (cr);
60bd6a9
 
60bd6a9
-  cairo_destroy (cr);
60bd6a9
+      cr = gdk_cairo_create (data->window);
60bd6a9
+      locate_pointer_paint (data, cr, FALSE);
60bd6a9
+      cairo_destroy (cr);
60bd6a9
+    }
60bd6a9
 
60bd6a9
   return TRUE;
60bd6a9
 }
60bd6a9
@@ -168,7 +170,7 @@
60bd6a9
   else if (progress >= data->progress + CIRCLES_PROGRESS_INTERVAL)
60bd6a9
     {
60bd6a9
       /* only invalidate window each circle interval */
60bd6a9
-      gdk_window_invalidate_rect (data->window, NULL, FALSE);
60bd6a9
+      locate_pointer_expose (data->widget, NULL, data);
60bd6a9
       data->progress += CIRCLES_PROGRESS_INTERVAL;
60bd6a9
     }
60bd6a9
 
60bd6a9
@@ -340,10 +342,9 @@
60bd6a9
   g_signal_connect (data->widget, "composited-changed",
60bd6a9
                     G_CALLBACK (composited_changed), data);
60bd6a9
 
60bd6a9
+  move_locate_pointer_window (data, screen);
60bd6a9
   composited_changed (data->widget, data);
60bd6a9
-
60bd6a9
   gdk_window_show (data->window);
60bd6a9
-  move_locate_pointer_window (data, screen);
60bd6a9
 
60bd6a9
   gsd_timeline_start (data->timeline);
60bd6a9
 }