/jds/bin/diff -uprN gnome-settings-daemon-2.25.90.old/plugins/xrdb/gsd-xrdb-manager.c gnome-settings-daemon-2.25.90/plugins/xrdb/gsd-xrdb-manager.c --- gnome-settings-daemon-2.25.90.old/plugins/xrdb/gsd-xrdb-manager.c 2009-02-10 19:24:58.047186000 +0000 +++ gnome-settings-daemon-2.25.90/plugins/xrdb/gsd-xrdb-manager.c 2009-02-10 19:26:38.849890000 +0000 @@ -420,11 +420,22 @@ spawn_with_input (const char *command, g_child_watch_add (child_pid, (GChildWatchFunc) child_watch_cb, (gpointer)command); } +#define XRDB_COMMAND_NAME "xrdb" +#define XRDB_COMMAND_FORMAT_STR "%s -merge" + +static char* xrdb_known_dirs[] = { + "/usr/openwin/bin", + "/usr/X11R6/bin", + "/usr/X11/bin", + NULL +}; + static void apply_settings (GsdXrdbManager *manager, GtkStyle *style) { - const char *command; + char *command; + char *command_path; GString *string; GSList *list; GSList *p; @@ -432,7 +443,29 @@ apply_settings (GsdXrdbManager *manager, gnome_settings_profile_start (NULL); - command = "xrdb -merge -quiet"; + if ( (command_path = g_find_program_in_path( XRDB_COMMAND_NAME )) == NULL ) { + int i; + + g_warning("Couldn't find xrdb in path"); + /* Search in well-known dirs */ + for ( i = 0; xrdb_known_dirs[i] != NULL; i++ ) { + gchar* path = g_build_filename( xrdb_known_dirs[i], XRDB_COMMAND_NAME, NULL ); + if ( path && (command_path = g_find_program_in_path( path )) != NULL ) { + /* Got a match, so break and use command_path */ + g_warning("Found xrdb as : %s", command_path ); + g_free(path); + break; + } + g_free(path); + } + } + + if ( command_path != NULL ) { + command = g_strdup_printf( XRDB_COMMAND_FORMAT_STR, command_path ); + } + else { + command = g_strdup( XRDB_COMMAND_NAME ); + } string = g_string_sized_new (256); append_theme_colors (style, string); @@ -475,6 +506,9 @@ apply_settings (GsdXrdbManager *manager, gnome_settings_profile_end (NULL); + + g_free (command); + return; }