From 60bd6a963ad40876a9ffe2cbc8234db0e4a10445 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Aug 30 2009 06:43:29 +0000 Subject: Fix 'Locate Pointer' --- diff --git a/gnome-settings-daemon.spec b/gnome-settings-daemon.spec index ee0e729..effc97e 100644 --- a/gnome-settings-daemon.spec +++ b/gnome-settings-daemon.spec @@ -1,6 +1,6 @@ Name: gnome-settings-daemon Version: 2.27.91 -Release: 2%{?dist} +Release: 3%{?dist} Summary: The daemon sharing settings from GNOME to GTK+/KDE applications Group: System Environment/Daemons @@ -38,6 +38,8 @@ Patch12: gnome-settings-daemon-2.26.1-fix-touchpad.patch Patch13: locate-pointer-process.patch # http://bugzilla.gnome.org/show_bug.cgi?id=593112 Patch14: buttonmapping.patch +# http://bugzilla.gnome.org/show_bug.cgi?id=593115 +Patch15: locate-pointer-csw.patch %description A daemon to share settings from GNOME to other applications. It also @@ -60,6 +62,7 @@ developing applications that use %{name}. %patch12 -p1 -b .lefthand-touchpad %patch13 -p1 -b .locate-pointer %patch14 -p1 -b .buttonmap +%patch15 -p1 -b .locate-pointer-csw autoreconf -i -f @@ -173,6 +176,9 @@ fi %{_libdir}/pkgconfig/gnome-settings-daemon.pc %changelog +* Sun Aug 30 2009 Matthias Clasen - 2.27.91-3 +- Make 'Locate Pointer' work with metacity again + * Wed Aug 26 2009 Peter Hutterer 2.27.91-2 - buttonmapping.patch: Don't check for IsXExtensionDevice, only skip button mappings for core devices instead (#502129). diff --git a/locate-pointer-csw.patch b/locate-pointer-csw.patch new file mode 100644 index 0000000..8fc8903 --- /dev/null +++ b/locate-pointer-csw.patch @@ -0,0 +1,62 @@ +--- 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); + }