To fix http://defect.opensolaris.org/bz/show_bug.cgi?id=11230

The primary problem is caused by the fact that autostart desktop files 
are not being compared to see what it provides. Hence, 2 copies of 
nautilus is caused to run. One in 
$HOME/.config/gnome-session/saved-session and the other is the copy in 
/usr/share/gnome/autostart. The fix is to make sure that all desktop 
file ever loaded by gnome-session must be checked against whether it has 
been added before or not. Since it is only make senses not to try to 
session managed the same application more than once.

-Ghee





Index: base-specs/gnome-session.spec
===================================================================
--- base-specs/gnome-session.spec       (revision 19343)
+++ base-specs/gnome-session.spec       (working copy)
@@ -69,6 +69,8 @@
 Patch17:     gnome-session-17-private-libice.diff
 #owner:jedy date:2009-08-05 type:feature bugster:6850800
 Patch18:     gnome-session-18-fastreboot.diff
+#owner:gheet date:2009-09-10 type:bug doo:11230
+Patch19:     gnome-session-19-remove-dup.diff
 
 
 URL:          http://www.gnome.org
@@ -123,6 +125,7 @@
 %patch16 -p1
 %patch17 -p1
 #%patch18 -p1
+%patch19 -p1
 
 %build
 %ifos linux




-bash-3.2$ cat patches/gnome-session-19-remove-dup.diff
diff -urN -x'*nfs*' gnome-session-2.27.91/gnome-session/gsm-manager.c 
../SUNWgnome-session-2.27.91.hacked/gnome-session-2.27.91/gnome-session/gsm-manager.c
--- gnome-session-2.27.91/gnome-session/gsm-manager.c   2009-09-10 
14:34:08.335925907 +0100
+++ 
../SUNWgnome-session-2.27.91.hacked/gnome-session-2.27.91/gnome-session/gsm-manager.c
       
2009-09-10 19:00:42.945881916 +0100
@@ -3362,14 +3362,37 @@
         }
 
         while ((name = g_dir_read_name (dir))) {
-                char *desktop_file;
+                char  *desktop_file;
+               char  **provides;
+               GError *error=NULL;
+               gsize len;
+               EggDesktopFile *egg_df;
 
                 if (!g_str_has_suffix (name, ".desktop")) {
                         continue;
                 }
 
                 desktop_file = g_build_filename (path, name, NULL);
-                gsm_manager_add_autostart_app (manager, desktop_file, 
NULL);
+               egg_df = egg_desktop_file_new ( desktop_file , &error);
+               if (egg_df == NULL)  {
+                       g_warning ("Could not parse desktop file %s: 
%s", desktop_file, error->message);
+                       g_error_free (error);
+               }
+               error = NULL;
+               provides = NULL;
+               provides = egg_desktop_file_get_string_list (egg_df,
+                                                       
GSM_AUTOSTART_APP_PROVIDES_KEY,
+                                                        &len, &error);
+               if (!provides) {
+                       g_debug ("GsmManager: *** desktop file: %s 
doesnot have Provides key\n", desktop_file);
+                       gsm_manager_add_autostart_app (manager, 
desktop_file, NULL);
+               }
+               else {
+                       g_debug ("GsmManager: *** desktop file: %s 
provides %s\n", desktop_file, provides[0]);
+                       gsm_manager_add_autostart_app (manager, 
desktop_file, provides[0]);
+                       g_strfreev (provides);
+                       egg_desktop_file_free (egg_df);
+               }
                 g_free (desktop_file);
         }
 
diff -urN -x'*nfs*' gnome-session-2.27.91/gnome-session/main.c 
../SUNWgnome-session-2.27.91.hacked/gnome-session-2.27.91/gnome-session/main.c
--- gnome-session-2.27.91/gnome-session/main.c  2009-09-10 
14:34:08.210619477 +0100
+++ 
../SUNWgnome-session-2.27.91.hacked/gnome-session-2.27.91/gnome-session/main.c  
    
2009-09-10 15:26:07.812681657 +0100
@@ -210,7 +210,8 @@
 }
 
 static void
-append_required_apps (GsmManager *manager)
+append_required_apps (GsmManager *manager,
+                     char      **autostart_dirs)
 {
         GSList      *required_components;
         GSList      *r;
@@ -247,7 +248,7 @@
                 if (default_provider != NULL) {
                         char *app_path;
 
-                        app_path = 
gsm_util_find_desktop_file_for_app_name (default_provider, NULL);
+                        app_path = 
gsm_util_find_desktop_file_for_app_name (default_provider, autostart_dirs);
                         if (app_path != NULL) {
                                 gsm_manager_add_autostart_app (manager, 
app_path, component);
                         } else {
@@ -308,7 +309,7 @@
         /* We do this at the end in case a saved session contains an
          * application that already provides one of the components. */
         append_default_apps (manager, default_session_key, autostart_dirs);
-        append_required_apps (manager);
+        append_required_apps (manager, autostart_dirs);
 
         g_strfreev (autostart_dirs);
 }

Reply via email to