fix gconf busy loop bug

This commit is contained in:
drago01 2008-03-27 19:03:27 +00:00
parent 133a12b789
commit 59a8898db7
2 changed files with 70 additions and 2 deletions

View File

@ -7,14 +7,14 @@
# List of plugins passed to ./configure. The order is important
%define plugins glib,gconf,dbus,png,svg,video,screenshot,decoration,clone,place,fade,minimize,move,resize,switcher,scale,plane
%define plugins core,glib,gconf,dbus,png,svg,video,screenshot,decoration,clone,place,fade,minimize,move,resize,switcher,scale,plane
Name: compiz
URL: http://www.go-compiz.org
License: X11/MIT/GPL
Group: User Interface/Desktops
Version: 0.7.2
Release: 2%{?dist}
Release: 3%{?dist}
Summary: OpenGL window and compositing manager
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -56,6 +56,7 @@ Patch103: composite-cube-logo.patch
Patch105: fedora-logo.patch
Patch106: redhat-logo.patch
#Patch110: scale-key.patch
Patch111: gconf-core-plugin-loopfix.patch
%description
Compiz is one of the first OpenGL-accelerated compositing window
@ -122,6 +123,7 @@ and other kde integration related stuff.
%patch106 -p1 -b .redhat-logo
%endif
#%patch110 -p1 -b .scale-key
%patch111 -p1 -b .gconf-core-loop
%build
@ -317,6 +319,11 @@ rm -rf $RPM_BUILD_ROOT
%changelog
* Thu Mar 27 2008 Adel Gadllah <adel.gadllah@gmail.com> - 0.7.2-3
- Fix gconf plugin loop RH #438794, patch based on
older one from Guillaume Seguin
- Add core to default plugin list
* Wed Mar 26 2008 Kevin Kofler <Kevin@tigcc.ticalc.org> - 0.7.2-2
- Reword kde-desktop-effects messages to mention Compiz by name (#438883)

View File

@ -0,0 +1,61 @@
diff -upNr compiz-0.7.2.orign/plugins/gconf.c compiz-0.7.2/plugins/gconf.c
--- compiz-0.7.2.orign/plugins/gconf.c 2008-03-06 18:52:26.000000000 +0100
+++ compiz-0.7.2/plugins/gconf.c 2008-03-27 19:44:11.000000000 +0100
@@ -443,6 +443,46 @@ gconfReadOptionValue (CompObject *o
return TRUE;
}
+
+static void
+gconfFixupPluginList (CompOptionValue *value)
+{
+ unsigned int i, j, length;
+ CompOptionValue *new;
+
+ for (i = 0; i < value->list.nValue; i++)
+ if (!strcmp (value->list.value[i].s, "core"))
+ break;
+
+ if (i != value->list.nValue)
+ return;
+
+ puts("fix up list");
+ length = value->list.nValue + 1;
+
+ new = calloc (length, sizeof (CompOptionValue));
+
+ if (!new)
+ return;
+
+ new[0].s = strdup ("core");
+
+ j = 1;
+
+ for (i = 0; i < value->list.nValue; i++)
+ {
+ if (strcmp (value->list.value[i].s, "core"))
+ new[j++].s = strdup (value->list.value[i].s);
+ free (value->list.value[i].s);
+ }
+
+ free (value->list.value);
+
+ value->list.value = new;
+ value->list.nValue = length;
+}
+
+
static void
gconfGetOption (CompObject *object,
CompOption *o,
@@ -462,6 +502,10 @@ gconfGetOption (CompObject *object,
if (gconfReadOptionValue (object, entry, o, &value))
{
+ if (strcmp (plugin, "core") == 0) {
+ if (!strcmp (o->name, "active_plugins"))
+ gconfFixupPluginList (&value);
+ }
(*core.setOptionForPlugin) (object, plugin, o->name, &value);
compFiniOptionValue (&value, o->type);
}