Revision: 30034
          http://sourceforge.net/p/bibdesk/svn/30034
Author:   hofman
Date:     2026-02-21 18:10:11 +0000 (Sat, 21 Feb 2026)
Log Message:
-----------
fix row to edit after commit when the fields have changed due to the commit

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

Modified: trunk/bibdesk/BDSKEditor.h
===================================================================
--- trunk/bibdesk/BDSKEditor.h  2026-02-21 17:57:14 UTC (rev 30033)
+++ trunk/bibdesk/BDSKEditor.h  2026-02-21 18:10:11 UTC (rev 30034)
@@ -115,7 +115,6 @@
         unsigned int isEditable:1;
         unsigned int isEditing:1;
         unsigned int isAnimating:1;
-        unsigned int didSetupFields:1;
         unsigned int controllingQLPreviewPanel:1;
         unsigned int controllingFVPreviewPanel:1;
         unsigned int allowFragileCharacters:1;

Modified: trunk/bibdesk/BDSKEditor.m
===================================================================
--- trunk/bibdesk/BDSKEditor.m  2026-02-21 17:57:14 UTC (rev 30033)
+++ trunk/bibdesk/BDSKEditor.m  2026-02-21 18:10:11 UTC (rev 30034)
@@ -162,12 +162,9 @@
 - (instancetype)initWithPublication:(BibItem *)aBib{
     self = [super initWithWindow:nil];
     if (self) {
-        
         publication = aBib;
         fields = [[NSMutableArray alloc] init];
         editorFlags.isEditable = [[publication owner] isDocument];
-                
-        editorFlags.didSetupFields = NO;
     }
     return self;
 }
@@ -393,14 +390,15 @@
         
         NSTextView *textView = (NSTextView *)firstResponder;
         NSInteger editedRow = -1;
+        NSString *editedField = nil;
         NSArray *selection = [textView selectedRanges];
         if ([textView isFieldEditor]) {
             firstResponder = (NSResponder *)[textView delegate];
             editedRow = [tableView rowForView:textView];
+            if (editedRow != -1)
+                editedField = [fields objectAtIndex:editedRow];
         }
         
-        editorFlags.didSetupFields = NO; // if we we rebuild the fields, the 
selection will become meaningless
-        
         // commit edits (formatters may refuse to allow this)
         if ([[self window] makeFirstResponder:[self window]] == NO)
             return NO;
@@ -408,7 +406,10 @@
         // for inherited fields, we should do something here to make sure the 
user doesn't have to go through the warning sheet
         
         if (editedRow != -1) {
-            if (editorFlags.didSetupFields == NO && editedRow < [tableView 
numberOfRows]) {
+            // fields may be changed due to the commit
+            if (editedRow >= [tableView numberOfRows] || [[fields 
objectAtIndex:editedRow] isEqualToString:editedField] == NO)
+                editedRow = [fields indexOfObject:editedField];
+            if (editedRow < [tableView numberOfRows]) {
                 [tableView editColumn:1 row:editedRow withEvent:nil select:NO];
                 [(NSTextView *)[[self textFieldAtRow:editedRow] currentEditor] 
setSafeSelectedRanges:selection];
             }
@@ -439,11 +440,14 @@
         NSTextView *textView = (NSTextView *)firstResponder;
         NSTextField *textField = nil;
                NSInteger editedRow = -1;
+        NSString *editedField = nil;
         if ([textView isFieldEditor]) {
             firstResponder = (NSResponder *)[textView delegate];
             if ([firstResponder isKindOfClass:[NSTextField class]])
                 textField = (NSTextField *)firstResponder;
             editedRow = [tableView rowForView:textView];
+            if (editedRow != -1)
+                editedField = [fields objectAtIndex:editedRow];
         }
         
         // first validate the text field or text view so we can return an 
error without presenting it
@@ -471,8 +475,6 @@
         
         NSArray *selection = [textView selectedRanges];
         
-               editorFlags.didSetupFields = NO; // if we we rebuild the 
fields, the selection will become meaningless
-        
         // commit edits (formatters and validation methods should allow this 
at this point)
         if ([[self window] makeFirstResponder:[self window]] == NO) {
             // should not be reached, we should have found errors above
@@ -484,7 +486,10 @@
         // for inherited fields, we should do something here to make sure the 
user doesn't have to go through the warning sheet
                
         if (editedRow != -1) {
-            if (editorFlags.didSetupFields == NO && editedRow < [tableView 
numberOfRows]) {
+            // fields may be changed due to the commit
+            if (editedRow >= [tableView numberOfRows] || [[fields 
objectAtIndex:editedRow] isEqualToString:editedField] == NO)
+                editedRow = [fields indexOfObject:editedField];
+            if (editedRow < [tableView numberOfRows]) {
                 [tableView editColumn:1 row:editedRow withEvent:nil select:NO];
                 [(NSTextView *)[[self textFieldAtRow:editedRow] currentEditor] 
setSafeSelectedRanges:selection];
             }
@@ -3254,8 +3259,6 @@
         
         [fields setArray:newFields];
         
-        editorFlags.didSetupFields = YES;
-        
         // align the cite key field with the form cells
         if ([fields count] > 0) {
             NSTableColumn *tableColumn = [tableView 
tableColumnWithIdentifier:FIELD_COLUMNID];

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



_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to