diff --git a/clutter.spec b/clutter.spec index 22e48cf..733d3cb 100644 --- a/clutter.spec +++ b/clutter.spec @@ -1,6 +1,6 @@ Name: clutter Version: 1.4.0 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Open Source software library for creating rich graphical user interfaces Group: Development/Libraries @@ -13,6 +13,8 @@ Source0: http://www.clutter-project.org/sources/%{name}/1.4/%{name}-%{ver Patch0: Use-a-native-format-for-atlas-textures.patch # http://bugzilla.clutter-project.org/show_bug.cgi?id=2324 Patch1: cogl-x11-Trap-glXDestroyPixmap.patch +# http://bugzilla.clutter-project.org/attachment.cgi?id=2366 +Patch2: xsettings-dont-use-the-xsettings-watch-function-fu.patch BuildRequires: glib2-devel mesa-libGL-devel gtk2-devel pkgconfig pango-devel BuildRequires: gobject-introspection-devel >= 0.9.6 @@ -60,6 +62,7 @@ This package contains documentation for clutter. %patch0 -p0 -b .atlas-textures %patch1 -p1 -b .glXDestroyPixmap +%patch2 -p1 -b .xsettings %build (if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; CONFIGFLAGS=--enable-gtk-doc; fi; @@ -112,6 +115,11 @@ rm -rf %{buildroot} %{_datadir}/gtk-doc/html/cally %changelog +* Mon Nov 22 2010 Dan Williams - 1.4.0-4 +- Add a patch cherry-picked from upstream for + http://bugzilla.clutter-project.org/attachment.cgi?id=2366 + (gnome-shell/mutter hang when gnome-settings-daemon restarts) + * Tue Oct 5 2010 Owen Taylor - 1.4.0-3 - Add a patch cherry-picked from upstream for http://bugzilla.clutter-project.org/show_bug.cgi?id=2324 diff --git a/xsettings-dont-use-the-xsettings-watch-function-fu.patch b/xsettings-dont-use-the-xsettings-watch-function-fu.patch new file mode 100644 index 0000000..3765c8b --- /dev/null +++ b/xsettings-dont-use-the-xsettings-watch-function-fu.patch @@ -0,0 +1,86 @@ +From c7d388e987063612d178b2412559b463b5e56f7a Mon Sep 17 00:00:00 2001 +From: Owen W. Taylor +Date: Fri, 12 Nov 2010 18:53:51 -0500 +Subject: [PATCH] xsettings: don't use the xsettings watch function functionality + +The "watch" function functionality in xsettings-client.c is designed +for setups like GDK where filters are per-window. If we are going +to pass all events to _clutter_xsettings_client_process_event() +anyways, we can just pass in NULL for watch. + +This avoids a nasty infinite loop where an event would get processed +triggering removing a filter and adding a new filter, which would +immediately run and remove a filter and add another and so on +ad-infinitum. + +http://bugzilla.clutter-project.org/show_bug.cgi?id=2415 +--- + clutter/x11/clutter-backend-x11.c | 37 ++++--------------------------------- + 1 files changed, 4 insertions(+), 33 deletions(-) + +diff --git a/clutter/x11/clutter-backend-x11.c b/clutter/x11/clutter-backend-x11.c +index 8a61741..3b7b579 100644 +--- a/clutter/x11/clutter-backend-x11.c ++++ b/clutter/x11/clutter-backend-x11.c +@@ -120,38 +120,6 @@ xsettings_filter (XEvent *xevent, + return CLUTTER_X11_FILTER_CONTINUE; + } + +-static Bool +-clutter_backend_x11_xsettings_watch (Window window, +- Bool is_start, +- long mask, +- void *cb_data) +-{ +- ClutterBackendX11 *backend_x11 = cb_data; +- +- if (is_start) +- { +- backend_x11->xsettings_xwin = window; +- if (!backend_x11->xsettings_xwin) +- return False; +- +- clutter_x11_add_filter (xsettings_filter, backend_x11); +- +- CLUTTER_NOTE (BACKEND, "Added filter on XSettings manager window 0x%x", +- (unsigned int) backend_x11->xsettings_xwin); +- } +- else +- { +- CLUTTER_NOTE (BACKEND, "Removed filter on XSettings manager window 0x%x", +- (unsigned int) backend_x11->xsettings_xwin); +- +- clutter_x11_remove_filter (xsettings_filter, backend_x11); +- +- backend_x11->xsettings_xwin = None; +- } +- +- return True; +-} +- + static void + clutter_backend_x11_xsettings_notify (const char *name, + XSettingsAction action, +@@ -336,9 +304,11 @@ clutter_backend_x11_post_parse (ClutterBackend *backend, + _clutter_xsettings_client_new (backend_x11->xdpy, + backend_x11->xscreen_num, + clutter_backend_x11_xsettings_notify, +- clutter_backend_x11_xsettings_watch, ++ NULL, + backend_x11); + ++ clutter_x11_add_filter (xsettings_filter, backend_x11); ++ + if (clutter_synchronise) + XSynchronize (backend_x11->xdpy, True); + +@@ -426,6 +396,7 @@ clutter_backend_x11_finalize (GObject *gobject) + + g_free (backend_x11->display_name); + ++ clutter_x11_remove_filter (xsettings_filter, backend_x11); + _clutter_xsettings_client_destroy (backend_x11->xsettings); + + XCloseDisplay (backend_x11->xdpy); +-- +1.7.3.2 \ No newline at end of file