aboutsummaryrefslogtreecommitdiffstats
path: root/Source/SPUserManager.m
diff options
context:
space:
mode:
Diffstat (limited to 'Source/SPUserManager.m')
-rw-r--r--Source/SPUserManager.m28
1 files changed, 26 insertions, 2 deletions
diff --git a/Source/SPUserManager.m b/Source/SPUserManager.m
index fecb05e0..3ac9e5de 100644
--- a/Source/SPUserManager.m
+++ b/Source/SPUserManager.m
@@ -61,6 +61,7 @@ static NSString * const SPTableViewNameColumnID = @"NameColumn";
- (void)_setSchemaPrivValues:(NSArray *)objects enabled:(BOOL)enabled;
- (void)_initializeAvailablePrivs;
- (void)_renameUserFrom:(NSString *)originalUser host:(NSString *)originalHost to:(NSString *)newUser host:(NSString *)newHost;
+- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void*)context;
@end
@@ -471,6 +472,31 @@ static NSString * const SPTableViewNameColumnID = @"NameColumn";
return managedObjectContext;
}
+- (void)beginSheetModalForWindow:(NSWindow *)docWindow completionHandler:(void (^)())callback
+{
+ //copy block from stack to heap, otherwise it wouldn't live long enough to be invoked later.
+ void *heapCallback = callback? Block_copy(callback) : NULL;
+
+ [NSApp beginSheet:[self window]
+ modalForWindow:docWindow
+ modalDelegate:self
+ didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
+ contextInfo:heapCallback];
+}
+
+- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void*)context
+{
+ //[NSApp endSheet...] does not close the window
+ [[self window] orderOut:self];
+ //notify delegate
+ if(context) {
+ void (^callback)() = context;
+ //directly invoking callback would risk that we are dealloc'd while still in this run loop iteration.
+ dispatch_async(dispatch_get_main_queue(), callback);
+ Block_release(callback);
+ }
+}
+
#pragma mark -
#pragma mark General IBAction methods
@@ -489,7 +515,6 @@ static NSString * const SPTableViewNameColumnID = @"NameColumn";
// Close sheet
[NSApp endSheet:[self window] returnCode:0];
- [[self window] orderOut:self];
}
/**
@@ -539,7 +564,6 @@ static NSString * const SPTableViewNameColumnID = @"NameColumn";
// Otherwise, close the sheet
[NSApp endSheet:[self window] returnCode:0];
- [[self window] orderOut:self];
}
/**