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