Patches from Lee Dowling to make Light Up and Net use the
[sgt/puzzles] / gtk.c
diff --git a/gtk.c b/gtk.c
index 94e6975..29b215e 100644 (file)
--- a/gtk.c
+++ b/gtk.c
@@ -1328,10 +1328,16 @@ static char *file_selector(frontend *fe, char *title, int save)
     return fe->filesel_name;
 }
 
+struct savefile_write_ctx {
+    FILE *fp;
+    int error;
+};
+
 static void savefile_write(void *wctx, void *buf, int len)
 {
-    FILE *fp = (FILE *)wctx;
-    fwrite(buf, 1, len, fp);
+    struct savefile_write_ctx *ctx = (struct savefile_write_ctx *)wctx;
+    if (fwrite(buf, 1, len, ctx->fp) < len)
+       ctx->error = 1;
 }
 
 static int savefile_read(void *wctx, void *buf, int len)
@@ -1373,9 +1379,18 @@ static void menu_save_event(GtkMenuItem *menuitem, gpointer data)
             return;
         }
 
-        midend_serialise(fe->me, savefile_write, fp);
+       {
+           struct savefile_write_ctx ctx;
+           ctx.fp = fp;
+           ctx.error = 0;
+           midend_serialise(fe->me, savefile_write, &ctx);
+           fclose(fp);
+           if (ctx.error) {
+               error_box(fe->window, "Error writing save file");
+               return;
+           }
+       }
 
-        fclose(fp);
     }
 }
 
@@ -1689,7 +1704,6 @@ static frontend *new_window(char *arg, int argtype, char **error)
        } else
            fe->preset_custom_bullet = NULL;
 
-       changed_preset(fe);
     } else {
        fe->npresets = 0;
        fe->preset_bullets = NULL;
@@ -1745,6 +1759,8 @@ static frontend *new_window(char *arg, int argtype, char **error)
                       GTK_SIGNAL_FUNC(menu_about_event), fe);
     gtk_widget_show(menuitem);
 
+    changed_preset(fe);
+
     {
         int i, ncolours;
         float *colours;
@@ -1763,11 +1779,12 @@ static frontend *new_window(char *arg, int argtype, char **error)
         gdk_colormap_alloc_colors(fe->colmap, fe->colours, ncolours,
                                   FALSE, FALSE, success);
         for (i = 0; i < ncolours; i++) {
-            if (!success[i])
+            if (!success[i]) {
                 g_error("couldn't allocate colour %d (#%02x%02x%02x)\n",
                         i, fe->colours[i].red >> 8,
                         fe->colours[i].green >> 8,
                         fe->colours[i].blue >> 8);
+            }
         }
     }