Fix 'Locate Pointer'

This commit is contained in:
Matthias Clasen 2009-08-30 06:43:29 +00:00
parent 8e4b3c60a0
commit 60bd6a963a
2 changed files with 69 additions and 1 deletions

View File

@ -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 <mclasen@redhat.com> - 2.27.91-3
- Make 'Locate Pointer' work with metacity again
* Wed Aug 26 2009 Peter Hutterer <peter.hutterer@redhat.com> 2.27.91-2
- buttonmapping.patch: Don't check for IsXExtensionDevice, only skip button
mappings for core devices instead (#502129).

62
locate-pointer-csw.patch Normal file
View File

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