Nicer function to present the error.
[enjoyable.git] / ConfigsController.m
index 1c100f2..5aab09a 100644 (file)
                       }
                       
                       if (error) {
-                          [[NSAlert alertWithError:error] beginSheetModalForWindow:window
-                                                                     modalDelegate:nil
-                                                                    didEndSelector:nil
-                                                                       contextInfo:nil];
+                          [window presentError:error
+                                modalForWindow:window
+                                      delegate:nil
+                            didPresentSelector:nil
+                                   contextInfo:nil];
                       }
                   }];
      
     NSWindow *window = NSApplication.sharedApplication.keyWindow;
     [panel beginSheetModalForWindow:window
                   completionHandler:^(NSInteger result) {
-                      if (result == NSFileHandlingPanelOKButton) {
-                          NSError *error;
-                          NSDictionary *serialization = [cfg serialize];
-                          NSData *json = [NSJSONSerialization dataWithJSONObject:serialization
-                                                                         options:NSJSONWritingPrettyPrinted
-                                                                           error:&error];
-                          if (!error)
-                              [json writeToURL:panel.URL options:NSDataWritingAtomic error:&error];
-                          
-                          if (error) {
-                              // FIXME: Ideally, this sheet is attached to the
-                              // panel, and the panel doesn't close, so you
-                              // can maybe fix what is wrong and try saving
-                              // again. But it seems to be impossible to force
-                              // the panel to stay open.
-                              [panel close];
-                              [[NSAlert alertWithError:error] beginSheetModalForWindow:window
-                                                                         modalDelegate:nil
-                                                                        didEndSelector:nil
-                                                                           contextInfo:nil];
-                          }
+                      if (result != NSFileHandlingPanelOKButton)
+                          return;
+                      [panel close];
+                      NSError *error;
+                      NSDictionary *serialization = [cfg serialize];
+                      NSData *json = [NSJSONSerialization dataWithJSONObject:serialization
+                                                                     options:NSJSONWritingPrettyPrinted
+                                                                       error:&error];
+                      if (!error)
+                          [json writeToURL:panel.URL options:NSDataWritingAtomic error:&error];
+                      
+                      if (error) {
+                          [window presentError:error
+                                modalForWindow:window
+                                      delegate:nil
+                            didPresentSelector:nil
+                                   contextInfo:nil];
                       }
                   }];
 }