2009-05-25 19:46:42 +00:00
|
|
|
diff -upNr compiz-0.8.2.orign/include/compiz-core.h compiz-0.8.2/include/compiz-core.h
|
|
|
|
--- compiz-0.8.2.orign/include/compiz-core.h 2009-02-15 10:10:23.000000000 +0100
|
2009-07-10 11:57:02 +00:00
|
|
|
+++ compiz-0.8.2/include/compiz-core.h 2009-07-10 13:53:53.353467924 +0200
|
2008-12-04 20:59:54 +00:00
|
|
|
@@ -220,6 +220,9 @@ extern Bool noDetection;
|
|
|
|
extern Bool useDesktopHints;
|
|
|
|
extern Bool onlyCurrentScreen;
|
|
|
|
|
|
|
|
+extern char **initialPlugins;
|
|
|
|
+extern int nInitialPlugins;
|
|
|
|
+
|
|
|
|
extern int defaultRefreshRate;
|
|
|
|
extern char *defaultTextureFilter;
|
|
|
|
|
2009-05-25 19:46:42 +00:00
|
|
|
diff -upNr compiz-0.8.2.orign/src/display.c compiz-0.8.2/src/display.c
|
|
|
|
--- compiz-0.8.2.orign/src/display.c 2009-02-15 10:10:23.000000000 +0100
|
2009-07-10 11:57:02 +00:00
|
|
|
+++ compiz-0.8.2/src/display.c 2009-07-10 13:53:53.354468151 +0200
|
|
|
|
@@ -675,24 +675,59 @@ updatePlugins (CompDisplay *d)
|
2008-12-04 20:59:54 +00:00
|
|
|
{
|
|
|
|
CompOption *o;
|
|
|
|
CompPlugin *p, **pop = 0;
|
|
|
|
- int nPop, i, j;
|
2009-07-10 11:57:02 +00:00
|
|
|
+ int nPop, i, j, k, dupPluginCount;
|
|
|
|
+ CompOptionValue *pList;
|
|
|
|
+ int pList_count;
|
2008-12-04 20:59:54 +00:00
|
|
|
|
|
|
|
d->dirtyPluginList = FALSE;
|
|
|
|
|
2009-07-10 11:57:02 +00:00
|
|
|
o = &d->opt[COMP_DISPLAY_OPTION_ACTIVE_PLUGINS];
|
2008-12-04 20:59:54 +00:00
|
|
|
|
2009-07-10 11:57:02 +00:00
|
|
|
- /* The old plugin list always begins with the core plugin. To make sure
|
|
|
|
- we don't unnecessarily unload plugins if the new plugin list does not
|
|
|
|
- contain the core plugin, we have to use an offset */
|
|
|
|
- if (o->value.list.nValue > 0 && strcmp (o->value.list.value[0].s, "core"))
|
|
|
|
- i = 0;
|
|
|
|
- else
|
|
|
|
- i = 1;
|
|
|
|
+ /* Make sure the new plugin list always list core first, then the
|
|
|
|
+ initial plugins... */
|
|
|
|
+ dupPluginCount = 0;
|
|
|
|
+ for (i=0; i < o->value.list.nValue; ++i) {
|
|
|
|
+ if (strcmp(o->value.list.value[i].s, "core") == 0)
|
|
|
|
+ ++dupPluginCount;
|
|
|
|
+ else
|
|
|
|
+ for (j=0; j < nInitialPlugins; ++j)
|
|
|
|
+ if (strcmp(o->value.list.value[i].s, initialPlugins[j]) == 0) {
|
|
|
|
+ ++dupPluginCount;
|
|
|
|
+ break;
|
2008-12-04 20:59:54 +00:00
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
2009-07-10 11:57:02 +00:00
|
|
|
+ pList_count = 1+nInitialPlugins+o->value.list.nValue-dupPluginCount;
|
|
|
|
+
|
|
|
|
+ pList = malloc(sizeof(CompOptionValue) * pList_count);
|
|
|
|
+ if (!pList) {
|
|
|
|
+ (*core.setOptionForPlugin) (&d->base, "core", o->name, &d->plugin);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ pList[0].s = "core";
|
|
|
|
+ for (j=0; j < nInitialPlugins; ++j)
|
|
|
|
+ pList[j+1].s = initialPlugins[j];
|
|
|
|
+ ++j;
|
2008-12-04 20:59:54 +00:00
|
|
|
+
|
2009-07-10 11:57:02 +00:00
|
|
|
+ for (i=0; i < o->value.list.nValue; ++i) {
|
|
|
|
+ if (strcmp(o->value.list.value[i].s, "core") == 0)
|
|
|
|
+ goto L_nextPlugin;
|
|
|
|
+ else
|
|
|
|
+ for (k=0; k < nInitialPlugins; ++k)
|
|
|
|
+ if (strcmp(o->value.list.value[i].s, initialPlugins[k]) == 0)
|
|
|
|
+ goto L_nextPlugin;
|
|
|
|
+ pList[j++].s = o->value.list.value[i].s;
|
|
|
|
+ L_nextPlugin:
|
|
|
|
+ (void)0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ assert(j == pList_count);
|
|
|
|
|
|
|
|
/* j is initialized to 1 to make sure we never pop the core plugin */
|
|
|
|
- for (j = 1; j < d->plugin.list.nValue && i < o->value.list.nValue; i++, j++)
|
|
|
|
+ for (i = j = 1; j < d->plugin.list.nValue && i < pList_count; i++, j++)
|
|
|
|
{
|
|
|
|
- if (strcmp (d->plugin.list.value[j].s, o->value.list.value[i].s))
|
|
|
|
+ if (strcmp (d->plugin.list.value[j].s, pList[i].s))
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -704,6 +739,7 @@ updatePlugins (CompDisplay *d)
|
|
|
|
if (!pop)
|
|
|
|
{
|
|
|
|
(*core.setOptionForPlugin) (&d->base, "core", o->name, &d->plugin);
|
|
|
|
+ free(pList);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@@ -715,13 +751,13 @@ updatePlugins (CompDisplay *d)
|
|
|
|
free (d->plugin.list.value[d->plugin.list.nValue].s);
|
|
|
|
}
|
|
|
|
|
|
|
|
- for (; i < o->value.list.nValue; i++)
|
|
|
|
+ for (; i < pList_count; i++)
|
2008-12-04 20:59:54 +00:00
|
|
|
{
|
|
|
|
p = 0;
|
2009-07-10 11:57:02 +00:00
|
|
|
for (j = 0; j < nPop; j++)
|
|
|
|
{
|
|
|
|
if (pop[j] && strcmp (pop[j]->vTable->name,
|
|
|
|
- o->value.list.value[i].s) == 0)
|
|
|
|
+ pList[i].s) == 0)
|
|
|
|
{
|
|
|
|
if (pushPlugin (pop[j]))
|
|
|
|
{
|
|
|
|
@@ -734,7 +770,7 @@ updatePlugins (CompDisplay *d)
|
|
|
|
|
|
|
|
if (p == 0)
|
|
|
|
{
|
|
|
|
- p = loadPlugin (o->value.list.value[i].s);
|
|
|
|
+ p = loadPlugin (pList[i].s);
|
|
|
|
if (p)
|
|
|
|
{
|
|
|
|
if (!pushPlugin (p))
|
|
|
|
@@ -775,7 +811,9 @@ updatePlugins (CompDisplay *d)
|
|
|
|
if (nPop)
|
|
|
|
free (pop);
|
|
|
|
|
|
|
|
+ free(pList);
|
|
|
|
(*core.setOptionForPlugin) (&d->base, "core", o->name, &d->plugin);
|
|
|
|
+
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2009-05-25 19:46:42 +00:00
|
|
|
diff -upNr compiz-0.8.2.orign/src/main.c compiz-0.8.2/src/main.c
|
|
|
|
--- compiz-0.8.2.orign/src/main.c 2009-02-16 14:57:22.000000000 +0100
|
2009-07-10 11:57:02 +00:00
|
|
|
+++ compiz-0.8.2/src/main.c 2009-07-10 13:53:53.354468151 +0200
|
2008-12-04 20:59:54 +00:00
|
|
|
@@ -40,6 +40,9 @@ char *programName;
|
|
|
|
char **programArgv;
|
|
|
|
int programArgc;
|
|
|
|
|
|
|
|
+char **initialPlugins = NULL;
|
|
|
|
+int nInitialPlugins = 0;
|
|
|
|
+
|
|
|
|
char *backgroundImage = NULL;
|
|
|
|
|
|
|
|
REGION emptyRegion;
|
2009-05-25 19:46:42 +00:00
|
|
|
@@ -413,6 +416,11 @@ main (int argc, char **argv)
|
2008-12-04 20:59:54 +00:00
|
|
|
|
|
|
|
ptr += sprintf (ptr, "</default>");
|
|
|
|
}
|
|
|
|
+
|
|
|
|
+ initialPlugins = malloc (nPlugin * sizeof (char *));
|
|
|
|
+ memcpy (initialPlugins, plugin, nPlugin * sizeof (char *));
|
|
|
|
+ nInitialPlugins = nPlugin;
|
|
|
|
+
|
|
|
|
}
|
|
|
|
|
|
|
|
xmlInitParser ();
|
2009-05-25 19:46:42 +00:00
|
|
|
@@ -462,6 +470,9 @@ main (int argc, char **argv)
|
2008-12-04 20:59:54 +00:00
|
|
|
|
|
|
|
xmlCleanupParser ();
|
|
|
|
|
|
|
|
+ if (initialPlugins != NULL)
|
|
|
|
+ free (initialPlugins);
|
|
|
|
+
|
|
|
|
if (restartSignal)
|
|
|
|
{
|
|
|
|
execvp (programName, programArgv);
|