Revision: 29407
          http://sourceforge.net/p/bibdesk/svn/29407
Author:   hofman
Date:     2025-07-31 09:33:45 +0000 (Thu, 31 Jul 2025)
Log Message:
-----------
Handle some edge cases when changing custom field types, should not happen in 
practice

Modified Paths:
--------------
    trunk/bibdesk/BDSKEditor.m

Modified: trunk/bibdesk/BDSKEditor.m
===================================================================
--- trunk/bibdesk/BDSKEditor.m  2025-07-30 22:35:41 UTC (rev 29406)
+++ trunk/bibdesk/BDSKEditor.m  2025-07-31 09:33:45 UTC (rev 29407)
@@ -2510,7 +2510,7 @@
         currentFields = [self currentFields];
     if (currentFields && [self commitEditingTableTextField])
         [self reloadTableWithFields:currentFields];
-    else if ((change & (BDSKFieldTypeMaskURL | BDSKFieldTypeMaskCitation)) && 
[self commitEditingTableTextField])
+    else if ((change & (BDSKFieldTypeMaskURL | BDSKFieldTypeMaskCitation)))
         [self updateTableViewDisplay];
     if ((change & BDSKFieldTypeMaskInteger))
         [self setupCollectionView];
@@ -3322,10 +3322,28 @@
         NSString *value = [publication valueOfField:field] ?: @"";
         [textField setRepresentedObject:[self representedObjectForValue:value 
forField:field]];
         NSFormatter *formatter = [field isEqualToString:BDSKCrossrefString] ? 
crossrefFormatter : [field isCitationField] ? citationFormatter : 
tableCellFormatter;
-        if (formatter != [textField formatter]) {
+        NSFormatter *oldFormatter = [textField formatter];
+        if (formatter != oldFormatter) {
+            id editor = [textField currentEditor];
+            BOOL wasComplexEditing = editor && oldFormatter == 
tableCellFormatter && [tableCellFormatter editAsComplexString];
             [textField setFormatter:formatter];
-            if ([textField currentEditor])
-                [[textField currentEditor] setString:[formatter 
editingStringForObjectValue:value]];
+            if (editor) {
+                if (wasComplexEditing) {
+                    [tableCellFormatter setEditAsComplexString:NO];
+                    [textField setObjectValue:value];
+                } else {
+                    if (formatter == tableCellFormatter) {
+                        if ([value isComplex])
+                            [textField setObjectValue:value];
+                        else
+                            [tableCellFormatter 
editingStringForObjectValue:value];
+                    }
+                    if (formatter == citationFormatter || oldFormatter == 
citationFormatter)
+                        [editor setString:[editor string]];
+                }
+            } else if ([[textField objectValue] isEqualAsComplexString:value] 
== NO) {
+                [textField setObjectValue:value];
+            }
         }
     }];
 }

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
Bibdesk-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to