--- xscreensaver-5.12/driver/demo-Gtk.c.debug 2010-06-26 20:38:38.000000000 +0900 +++ xscreensaver-5.12/driver/demo-Gtk.c 2010-11-01 16:08:53.000000000 +0900 @@ -535,7 +535,7 @@ typedef enum { D_NONE, D_LAUNCH, D_GNOME, D_KDE } dialog_button; -static void +static Bool warning_dialog (GtkWidget *parent, const char *message, dialog_button button_type, int center) { @@ -555,7 +555,7 @@ !GET_WINDOW (parent)) /* too early to pop up transient dialogs */ { fprintf (stderr, "%s: too early for dialog?\n", progname); - return; + return False; } head = msg; @@ -680,6 +680,7 @@ #endif /* !HAVE_GTK2 */ free (msg); + return True; } @@ -1485,6 +1486,7 @@ GList *kids = gtk_container_children (GTK_CONTAINER (list_widget)); int i; #endif /* !HAVE_GTK2 */ + static Bool already_warned_about_missing_image_directory = False; /* very long name... */ Bool changed = False; GtkWidget *w; @@ -1587,16 +1589,26 @@ # undef PATHNAME # undef TEXT - /* Warn if the image directory doesn't exist. + /* Warn if the image directory doesn't exist, when: + - not being warned before + - image directory is changed and the directory doesn't exist */ if (p2->image_directory && *p2->image_directory && - !directory_p (p2->image_directory)) + !directory_p (p2->image_directory) && + ( !already_warned_about_missing_image_directory || + ( p->image_directory && + *p->image_directory && + strcmp(p->image_directory, p2->image_directory) + ) + ) + ) { char b[255]; - sprintf (b, "Error:\n\n" "Directory does not exist: \"%s\"\n", + sprintf (b, "Warning:\n\n" "Directory does not exist: \"%s\"\n", p2->image_directory); - warning_dialog (s->toplevel_widget, b, D_NONE, 100); + if (warning_dialog (s->toplevel_widget, b, D_NONE, 100)) + already_warned_about_missing_image_directory = True; }