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); }
