Index: gnome-session-2.28.0/capplet/gsm-properties-dialog.c
===================================================================
--- gnome-session-2.28.0.orig/capplet/gsm-properties-dialog.c	2009-10-29 01:31:37.000000000 +0100
+++ gnome-session-2.28.0/capplet/gsm-properties-dialog.c	2009-10-29 01:43:27.000000000 +0100
@@ -127,11 +127,13 @@
                      GspApp       *app)
 {
         gboolean    hidden;
+        gboolean    display;
         gboolean    enabled;
         GIcon      *icon;
         const char *description;
 
         hidden      = gsp_app_get_hidden (app);
+        display     = gsp_app_get_display (app);
         enabled     = gsp_app_get_enabled (app);
         icon        = gsp_app_get_icon (app);
         description = gsp_app_get_description (app);
@@ -162,7 +164,7 @@
         }
 
         gtk_list_store_set (list_store, iter,
-                            STORE_COL_VISIBLE, !hidden,
+                            STORE_COL_VISIBLE, (display && !hidden),
                             STORE_COL_ENABLED, enabled,
                             STORE_COL_GICON, icon,
                             STORE_COL_DESCRIPTION, description,
Index: gnome-session-2.28.0/capplet/gsp-app.c
===================================================================
--- gnome-session-2.28.0.orig/capplet/gsp-app.c	2009-10-29 01:14:03.000000000 +0100
+++ gnome-session-2.28.0/capplet/gsp-app.c	2009-10-29 01:31:38.000000000 +0100
@@ -37,18 +37,20 @@
 
 #define GSP_APP_SAVE_DELAY 2
 
-#define GSP_ASP_SAVE_MASK_HIDDEN   0x0001
-#define GSP_ASP_SAVE_MASK_ENABLED  0x0002
-#define GSP_ASP_SAVE_MASK_NAME     0x0004
-#define GSP_ASP_SAVE_MASK_EXEC     0x0008
-#define GSP_ASP_SAVE_MASK_COMMENT  0x0010
-#define GSP_ASP_SAVE_MASK_ALL      0xffff
+#define GSP_ASP_SAVE_MASK_HIDDEN     0x0001
+#define GSP_ASP_SAVE_MASK_ENABLED    0x0002
+#define GSP_ASP_SAVE_MASK_NAME       0x0004
+#define GSP_ASP_SAVE_MASK_EXEC       0x0008
+#define GSP_ASP_SAVE_MASK_COMMENT    0x0010
+#define GSP_ASP_SAVE_MASK_NO_DISPLAY 0x0020
+#define GSP_ASP_SAVE_MASK_ALL        0xffff
 
 struct _GspAppPrivate {
         char         *basename;
         char         *path;
 
         gboolean      hidden;
+        gboolean      no_display;
         gboolean      enabled;
 
         char         *name;
@@ -334,6 +336,14 @@
                 return FALSE;
         }
 
+        if (gsp_key_file_get_boolean (keyfile,
+                                      G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY,
+                                      FALSE) != app->priv->no_display) {
+                g_free (path);
+                g_key_file_free (keyfile);
+                return FALSE;
+        }
+
         str = gsp_key_file_get_locale_string (keyfile,
                                               G_KEY_FILE_DESKTOP_KEY_NAME);
         if (!_gsp_str_equal (str, app->priv->name)) {
@@ -442,6 +452,12 @@
                                           app->priv->hidden);
         }
 
+        if (app->priv->save_mask & GSP_ASP_SAVE_MASK_NO_DISPLAY) {
+                gsp_key_file_set_boolean (keyfile,
+                                          G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY,
+                                          app->priv->no_display);
+        }
+
         if (app->priv->save_mask & GSP_ASP_SAVE_MASK_ENABLED) {
                 gsp_key_file_set_boolean (keyfile,
                                           GSP_KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED,
@@ -541,6 +557,14 @@
 }
 
 gboolean
+gsp_app_get_display (GspApp *app)
+{
+        g_return_val_if_fail (GSP_IS_APP (app), FALSE);
+
+        return !app->priv->no_display;
+}
+
+gboolean
 gsp_app_get_enabled (GspApp *app)
 {
         g_return_val_if_fail (GSP_IS_APP (app), FALSE);
@@ -790,6 +814,9 @@
         app->priv->hidden = gsp_key_file_get_boolean (keyfile,
                                                       G_KEY_FILE_DESKTOP_KEY_HIDDEN,
                                                       FALSE);
+        app->priv->no_display = gsp_key_file_get_boolean (keyfile,
+                                                          G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY,
+                                                          FALSE);
         app->priv->enabled = gsp_key_file_get_boolean (keyfile,
                                                        GSP_KEY_FILE_DESKTOP_KEY_AUTOSTART_ENABLED,
                                                        TRUE);
@@ -935,6 +962,7 @@
                                             app->priv->basename, NULL);
 
         app->priv->hidden = FALSE;
+        app->priv->no_display = FALSE;
         app->priv->enabled = TRUE;
 
         if (!gsm_util_text_is_blank (name)) {
@@ -1031,6 +1059,12 @@
                 app->priv->save_mask |= GSP_ASP_SAVE_MASK_HIDDEN;
         }
 
+        if (app->priv->no_display) {
+                changed = TRUE;
+                app->priv->no_display = FALSE;
+                app->priv->save_mask |= GSP_ASP_SAVE_MASK_NO_DISPLAY;
+        }
+
         if (!app->priv->enabled) {
                 changed = TRUE;
                 app->priv->enabled = TRUE;
Index: gnome-session-2.28.0/capplet/gsp-app.h
===================================================================
--- gnome-session-2.28.0.orig/capplet/gsp-app.h	2009-10-29 01:14:03.000000000 +0100
+++ gnome-session-2.28.0/capplet/gsp-app.h	2009-10-29 01:31:38.000000000 +0100
@@ -74,6 +74,7 @@
 const char      *gsp_app_get_path          (GspApp       *app);
 
 gboolean         gsp_app_get_hidden        (GspApp       *app);
+gboolean         gsp_app_get_display       (GspApp       *app);
 
 gboolean         gsp_app_get_enabled       (GspApp       *app);
 void             gsp_app_set_enabled       (GspApp       *app,
