David Zeuthen 0dca26d
--- gnome-session/main.c.gdm-hints	2007-04-12 14:31:38.000000000 -0400
David Zeuthen 0dca26d
+++ gnome-session/main.c	2007-04-12 14:38:56.000000000 -0400
David Zeuthen 0dca26d
@@ -388,6 +388,12 @@
David Zeuthen 0dca26d
   gconf_client = gsm_get_conf_client ();
David Zeuthen 0dca26d
   gconf_client_add_dir (gconf_client, GSM_GCONF_CONFIG_PREFIX, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); 
David Zeuthen 0dca26d
   a_t_support = gconf_client_get_bool (gconf_client, ACCESSIBILITY_KEY, NULL);
David Zeuthen 0dca26d
+  if (g_getenv ("GDM_ATS") != NULL && !a_t_support)
David Zeuthen 0dca26d
+    {
David Zeuthen 0dca26d
+      a_t_support = TRUE;
David Zeuthen 0dca26d
+      gconf_client_set_bool (gconf_client, ACCESSIBILITY_KEY, TRUE, NULL);
David Zeuthen 0dca26d
+    }
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
 
David Zeuthen 0dca26d
   if (a_t_support)
David Zeuthen 0dca26d
     {
David Zeuthen 0dca26d
@@ -436,6 +442,11 @@
David Zeuthen 0dca26d
   autosave       = gconf_client_get_bool (gconf_client, AUTOSAVE_MODE_KEY, NULL);
David Zeuthen 0dca26d
   logout_prompt  = gconf_client_get_bool (gconf_client, LOGOUT_PROMPT_KEY, NULL);
David Zeuthen 0dca26d
   a_t_support    = gconf_client_get_bool (gconf_client, ACCESSIBILITY_KEY, NULL);
David Zeuthen 0dca26d
+  if (g_getenv ("GDM_ATS") != NULL)
David Zeuthen 0dca26d
+    {
David Zeuthen 0dca26d
+      a_t_support = TRUE;
David Zeuthen 0dca26d
+    }
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
 
David Zeuthen 0dca26d
   gconf_client_notify_add (gconf_client,
David Zeuthen 0dca26d
 			   AUTOSAVE_MODE_KEY,
David Zeuthen 0dca26d
--- gnome-session/gsm-at-startup.c.gdm-hints	2007-04-12 14:31:38.000000000 -0400
David Zeuthen 0dca26d
+++ gnome-session/gsm-at-startup.c	2007-04-12 14:31:38.000000000 -0400
David Zeuthen 0dca26d
@@ -17,16 +17,24 @@
David Zeuthen 0dca26d
 static void
David Zeuthen 0dca26d
 gsm_assistive_tech_exec (gchar *exec_string)
David Zeuthen 0dca26d
 {
David Zeuthen 0dca26d
-  gchar    *s;
David Zeuthen 0dca26d
   gboolean  success;
David Zeuthen 0dca26d
-  
David Zeuthen 0dca26d
+  char     **v;
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
   success = FALSE;
David Zeuthen 0dca26d
-  s = g_find_program_in_path (exec_string);
David Zeuthen 0dca26d
 
David Zeuthen 0dca26d
-  if (s) {
David Zeuthen 0dca26d
-    success = gsm_exec_command_line_async (exec_string, NULL);
David Zeuthen 0dca26d
-    g_free (s);
David Zeuthen 0dca26d
+  v = g_strsplit (exec_string, " ", 0);
David Zeuthen 0dca26d
+  if (v[0] != NULL) {
David Zeuthen 0dca26d
+	  gchar    *s;
David Zeuthen 0dca26d
+	  fprintf (stderr, "v[0]='%s'\n", v[0]);
David Zeuthen 0dca26d
+	  s = g_find_program_in_path (v[0]);
David Zeuthen 0dca26d
+	  fprintf (stderr, "s='%s'\n", s);
David Zeuthen 0dca26d
+	  if (s) {
David Zeuthen 0dca26d
+		  success = gsm_exec_command_line_async (exec_string, NULL);
David Zeuthen 0dca26d
+		  fprintf (stderr, "bar %d '%s'\n", success, exec_string);
David Zeuthen 0dca26d
+		  g_free (s);
David Zeuthen 0dca26d
+	  }
David Zeuthen 0dca26d
   }
David Zeuthen 0dca26d
+  g_strfreev (v);
David Zeuthen 0dca26d
   
David Zeuthen 0dca26d
   if (!success && !strcmp (exec_string, "gnopernicus")) {
David Zeuthen 0dca26d
     /* backwards compatibility for 2.14 */
David Zeuthen 0dca26d
@@ -34,6 +42,33 @@
David Zeuthen 0dca26d
   }
David Zeuthen 0dca26d
 }
David Zeuthen 0dca26d
 
David Zeuthen 0dca26d
+static void
David Zeuthen 0dca26d
+gsm_assistive_tech_exec_type (gchar *at_type)
David Zeuthen 0dca26d
+{
David Zeuthen 0dca26d
+	gchar *at;
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
+	at = NULL;
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
+	fprintf (stderr, "at_type='%s'\n", at_type);
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
+	/* TODO: should 
David Zeuthen 0dca26d
+	 *
David Zeuthen 0dca26d
+	 * 1. read from preferred applications in gconf 
David Zeuthen 0dca26d
+	 * 2. make sure that AT's execed don't overlap with users choice
David Zeuthen 0dca26d
+	 */
David Zeuthen 0dca26d
+	if (strcmp (at_type, "screenreader") == 0) {
David Zeuthen 0dca26d
+		at = "orca";
David Zeuthen 0dca26d
+	} else if (strcmp (at_type, "magnifier") == 0) {
David Zeuthen 0dca26d
+		at = "orca -n -d main-window -d speech -e magnifier";
David Zeuthen 0dca26d
+	} else if (strcmp (at_type, "onscreenkeyboard") == 0) {
David Zeuthen 0dca26d
+		at = "gok";
David Zeuthen 0dca26d
+	}
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
+	if (at != NULL) {
David Zeuthen 0dca26d
+		gsm_assistive_tech_exec (at);
David Zeuthen 0dca26d
+	}
David Zeuthen 0dca26d
+}
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
 static GdkFilterReturn 
David Zeuthen 0dca26d
 gsm_assistive_filter_watch (GdkXEvent *xevent, GdkEvent *event, gpointer data){
David Zeuthen 0dca26d
      XEvent *xev = (XEvent *)xevent;
David Zeuthen 0dca26d
@@ -103,6 +138,7 @@
David Zeuthen 0dca26d
   GError *error = NULL;
David Zeuthen 0dca26d
   GConfClient *client;
David Zeuthen 0dca26d
   GSList *list;
David Zeuthen 0dca26d
+  const char *at_suggested_by_gdm;
David Zeuthen 0dca26d
 
David Zeuthen 0dca26d
   client  = gsm_get_conf_client ();
David Zeuthen 0dca26d
   list = gconf_client_get_list (client, AT_STARTUP_KEY, GCONF_VALUE_STRING, &error);
David Zeuthen 0dca26d
@@ -122,6 +158,18 @@
David Zeuthen 0dca26d
 	}
David Zeuthen 0dca26d
       g_slist_free (list);
David Zeuthen 0dca26d
     }
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
+  /* start AT's if user have started them from gdm */
David Zeuthen 0dca26d
+  if ((at_suggested_by_gdm = g_getenv ("GDM_ATS")) != NULL) {
David Zeuthen 0dca26d
+	  int i;
David Zeuthen 0dca26d
+	  char **at_list;
David Zeuthen 0dca26d
+	  at_list = g_strsplit (at_suggested_by_gdm, " ", 0);
David Zeuthen 0dca26d
+	  for (i = 0; at_list[i] != NULL; i++) {
David Zeuthen 0dca26d
+		  gsm_assistive_tech_exec_type (at_list[i]);
David Zeuthen 0dca26d
+	  }
David Zeuthen 0dca26d
+	  g_strfreev (at_list);
David Zeuthen 0dca26d
+  }  
David Zeuthen 0dca26d
+
David Zeuthen 0dca26d
 }
David Zeuthen 0dca26d
 
David Zeuthen 0dca26d
 void