gnome-session/gnome-session-wm-switch.patch

100 lines
3.1 KiB
Diff
Raw Normal View History

diff -aurp gnome-session-2.22.1.1/gnome-session/main.c gnome-session-2.22.1.1-patched/gnome-session/main.c
--- gnome-session-2.22.1.1/gnome-session/main.c 2008-04-10 16:32:20.000000000 +0200
+++ gnome-session-2.22.1.1-patched/gnome-session/main.c 2008-05-16 15:28:42.777710000 +0200
@@ -47,6 +47,8 @@
#include "command.h"
#include "splash-widget.h"
#include "util.h"
+#include "prop.h"
+#include "session.h"
#include "gsm-dbus.h"
#include "gsm-sound.h"
#include "gsm-gsd.h"
@@ -600,6 +602,77 @@ gsm_shutdown_gconfd (void)
g_free (command);
}
+static void
+fix_wm (Session *session)
+{
+ GSList *cl, *p;
+ Client *client = NULL;
+ SmProp *prop = NULL;
+ char *compiz_enable_path;
+ gboolean compiz_enabled = FALSE;
+
+ compiz_enable_path = g_build_filename (g_get_user_config_dir (), "compiz", "enable-compiz", NULL);
+ compiz_enabled = compiz_enable_path && g_file_test (compiz_enable_path, G_FILE_TEST_IS_REGULAR);
+ g_free (compiz_enable_path);
+
+ for (cl = session->client_list; cl; cl = cl->next)
+ {
+ client = cl->data;
+ if (client->match_rule != MATCH_ID)
+ continue;
+
+ prop = find_property_by_name (client, SmRestartCommand);
+ if (!prop)
+ continue;
+
+ if (!strcmp (prop->vals[0].value, "gnome-wm"))
+ return;
+ else if (((!strcmp (prop->vals[0].value, "metacity") || !strcmp (prop->vals[0].value, "/usr/bin/metacity")) && compiz_enabled) ||
+ (!strcmp (prop->vals[0].value, "compiz") || !strcmp (prop->vals[0].value, "/usr/bin/compiz")))
+ break;
+ }
+
+ if (!cl)
+ return;
+
+ /* At this point, either client is compiz or client is metacity and we're
+ * supposed to run compiz-manager. Either way, replace it with gnome-wm. */
+
+ for (p = client->properties; p; p = p->next)
+ SmFreeProperty (p->data);
+ g_slist_free (client->properties);
+
+ client->properties = NULL;
+
+ prop = malloc (sizeof (SmProp));
+ prop->name = strdup (SmRestartCommand);
+ prop->type = strdup (SmLISTofARRAY8);
+ if (client->id)
+ prop->num_vals = 3;
+ else
+ prop->num_vals = 1;
+ prop->vals = malloc (prop->num_vals * sizeof (SmPropValue));
+ prop->vals[0].value = strdup ("gnome-wm");
+ prop->vals[0].length = strlen (prop->vals[0].value);
+ if (client->id)
+ {
+ prop->vals[1].value = strdup ("--sm-client-id");
+ prop->vals[1].length = strlen (prop->vals[1].value);
+ prop->vals[2].value = strdup (client->id);
+ prop->vals[2].length = strlen (prop->vals[2].value);
+ }
+ client->properties = g_slist_prepend (client->properties, prop);
+
+ prop = malloc (sizeof (SmProp));
+ prop->name = strdup (GsmPriority);
+ prop->type = strdup (SmCARD8);
+ prop->num_vals = 1;
+ prop->vals = malloc (sizeof (SmPropValue));
+ prop->vals[0].value = calloc (2, 1);
+ prop->vals[0].length = 1;
+ client->properties = g_slist_prepend (client->properties, prop);
+}
+
int
main (int argc, char *argv[])
{
@@ -777,6 +850,8 @@ main (int argc, char *argv[])
g_setenv ("GNOME_DESKTOP_SESSION_ID", session_name, TRUE);
the_session = read_session (session_name);
+ fix_wm (the_session);
+
gsm_remote_desktop_start ();
if (splashing)