aboutsummaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorMax Lohrmann <dmoagx@users.noreply.github.com>2017-04-22 18:30:55 +0200
committerMax Lohrmann <dmoagx@users.noreply.github.com>2017-04-22 18:30:55 +0200
commitbed1cff292d5997b1b5a822be48ed92d31db9590 (patch)
tree8845b005382fbd30eb801ff1a00f0f5eea9bda37 /Source
parentdfab0cd76c54ba3f78284a57c89a7585a6042a38 (diff)
downloadsequelpro-bed1cff292d5997b1b5a822be48ed92d31db9590.tar.gz
sequelpro-bed1cff292d5997b1b5a822be48ed92d31db9590.tar.bz2
sequelpro-bed1cff292d5997b1b5a822be48ed92d31db9590.zip
* Fix a case of "background thread updating UI" (may affect some crashes when importing CSVs)
Diffstat (limited to 'Source')
-rw-r--r--Source/SPAppController.m2
-rw-r--r--Source/SPDataImport.m43
-rw-r--r--Source/SPTableContent.m16
-rw-r--r--Source/SPTablesList.m4
4 files changed, 35 insertions, 30 deletions
diff --git a/Source/SPAppController.m b/Source/SPAppController.m
index 3028c0f6..afdfd16f 100644
--- a/Source/SPAppController.m
+++ b/Source/SPAppController.m
@@ -770,7 +770,7 @@
}
else {
NSBeep();
- NSLog(@"Error in sequelpro URL scheme");
+ NSLog(@"Error in sequelpro URL scheme for URL <%@>",url);
}
}
diff --git a/Source/SPDataImport.m b/Source/SPDataImport.m
index 058ff916..6522885c 100644
--- a/Source/SPDataImport.m
+++ b/Source/SPDataImport.m
@@ -1213,29 +1213,30 @@
document:tableDocumentInstance
notificationName:@"Import Finished"];
+ SPMainQSync(^{
+ if(importIntoNewTable) {
- if(importIntoNewTable) {
-
- // Select the new table
-
- // Update current database tables
- [[tablesListInstance onMainThread] updateTables:self];
-
- // Re-query the structure of all databases in the background
- [[tableDocumentInstance databaseStructureRetrieval] queryDbStructureInBackgroundWithUserInfo:@{@"forceUpdate" : @YES}];
-
- // Select the new table
- [tablesListInstance selectItemWithName:selectedTableTarget];
-
- } else {
-
- // If import was done into a new table or the table selected for import is also selected in the content view,
- // update the content view - on the main thread to avoid crashes.
- if ([tablesListInstance tableName] && [selectedTableTarget isEqualToString:[tablesListInstance tableName]]) {
- [tableDocumentInstance setContentRequiresReload:YES];
+ // Select the new table
+
+ // Update current database tables
+ [tablesListInstance updateTables:self];
+
+ // Re-query the structure of all databases in the background
+ [[tableDocumentInstance databaseStructureRetrieval] queryDbStructureInBackgroundWithUserInfo:@{@"forceUpdate" : @YES}];
+
+ // Select the new table
+ [tablesListInstance selectItemWithName:selectedTableTarget];
+
+ } else {
+
+ // If import was done into a new table or the table selected for import is also selected in the content view,
+ // update the content view - on the main thread to avoid crashes.
+ if ([tablesListInstance tableName] && [selectedTableTarget isEqualToString:[tablesListInstance tableName]]) {
+ [tableDocumentInstance setContentRequiresReload:YES];
+ }
+
}
-
- }
+ });
}
diff --git a/Source/SPTableContent.m b/Source/SPTableContent.m
index 0738fe96..62f3b758 100644
--- a/Source/SPTableContent.m
+++ b/Source/SPTableContent.m
@@ -2541,13 +2541,15 @@ static NSString *SPTableFilterSetDefaultOperator = @"SPTableFilterSetDefaultOper
@"filterValue": targetFilterValue,
@"filterComparison": SPBoxNil(filterComparison)
};
- [self setFiltersToRestore:filterSettings];
-
- // Attempt to switch to the target table
- if (![tablesListInstance selectItemWithName:[refDictionary objectForKey:@"table"]]) {
- NSBeep();
- [self setFiltersToRestore:nil];
- }
+ SPMainQSync(^{
+ [self setFiltersToRestore:filterSettings];
+
+ // Attempt to switch to the target table
+ if (![tablesListInstance selectItemWithName:[refDictionary objectForKey:@"table"]]) {
+ NSBeep();
+ [self setFiltersToRestore:nil];
+ }
+ });
}
#ifndef SP_CODA
diff --git a/Source/SPTablesList.m b/Source/SPTablesList.m
index 2fa26229..27810898 100644
--- a/Source/SPTablesList.m
+++ b/Source/SPTablesList.m
@@ -1370,6 +1370,8 @@ static NSString *SPDuplicateTable = @"SPDuplicateTable";
/**
* Select an item using the provided name; returns YES if the
* supplied name could be selected, or NO if not.
+ *
+ * MUST BE CALLED ON THE UI THREAD!
*/
- (BOOL)selectItemWithName:(NSString *)theName
{
@@ -1418,7 +1420,7 @@ static NSString *SPDuplicateTable = @"SPDuplicateTable";
}
}
- [[tablesListView onMainThread] scrollRowToVisible:[tablesListView selectedRow]];
+ [tablesListView scrollRowToVisible:[tablesListView selectedRow]];
#endif
return YES;