Skip to content

Commit befa771

Browse files
authored
Revert "Pressing TAB in last field in entry editor moves focus to the next ta…" (#13912)
This reverts commit b11d102.
1 parent 1e1eb1a commit befa771

File tree

7 files changed

+4
-136
lines changed

7 files changed

+4
-136
lines changed

CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv
9898

9999
### Fixed
100100

101-
- We fixed an issue where pressing <kbd>Tab</kbd> in the last text field of a tab did not move the focus to the next tab in the entry editor. [#11937](https://github.com/JabRef/jabref/issues/11937)
102101
- We fixed an issue where "Specify Bib(La)TeX" tab was not focused when Bib(La)TeX was in the clipboard [#13597](https://github.com/JabRef/jabref/issues/13597)
103102
- We fixed an issue whereby the 'About' dialog was not honouring the user's configured font preferences. [#13558](https://github.com/JabRef/jabref/issues/13558)
104103
- We fixed an issue where the Pagetotal column was sorting the values alphabetically instead of numerically. [#12533](https://github.com/JabRef/jabref/issues/12533)

jabgui/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java

Lines changed: 0 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import java.io.File;
44
import java.nio.file.Path;
55
import java.util.ArrayList;
6-
import java.util.Collection;
76
import java.util.HashMap;
87
import java.util.LinkedList;
98
import java.util.List;
@@ -19,16 +18,12 @@
1918
import javafx.beans.InvalidationListener;
2019
import javafx.fxml.FXML;
2120
import javafx.geometry.Side;
22-
import javafx.scene.Node;
23-
import javafx.scene.Parent;
2421
import javafx.scene.control.Button;
2522
import javafx.scene.control.ContextMenu;
2623
import javafx.scene.control.Label;
2724
import javafx.scene.control.MenuItem;
2825
import javafx.scene.control.Tab;
2926
import javafx.scene.control.TabPane;
30-
import javafx.scene.control.TextField;
31-
import javafx.scene.control.TextInputControl;
3227
import javafx.scene.input.DataFormat;
3328
import javafx.scene.input.KeyEvent;
3429
import javafx.scene.input.TransferMode;
@@ -43,7 +38,6 @@
4338
import org.jabref.gui.entryeditor.fileannotationtab.FileAnnotationTab;
4439
import org.jabref.gui.entryeditor.fileannotationtab.FulltextSearchResultsTab;
4540
import org.jabref.gui.externalfiles.ExternalFilesEntryLinker;
46-
import org.jabref.gui.fieldeditors.EditorTextField;
4741
import org.jabref.gui.help.HelpAction;
4842
import org.jabref.gui.importer.GrobidUseDialogHelper;
4943
import org.jabref.gui.keyboard.KeyBinding;
@@ -169,11 +163,6 @@ public EntryEditor(Supplier<LibraryTab> tabSupplier, UndoAction undoAction, Redo
169163

170164
setupDragAndDrop();
171165

172-
EditorTextField.setupTabNavigation(
173-
this::isLastFieldInCurrentTab,
174-
this::moveToNextTabAndFocus
175-
);
176-
177166
EasyBind.subscribe(tabbed.getSelectionModel().selectedItemProperty(), tab -> {
178167
EntryEditorTab activeTab = (EntryEditorTab) tab;
179168
if (activeTab != null) {
@@ -539,98 +528,4 @@ public void nextPreviewStyle() {
539528
public void previousPreviewStyle() {
540529
this.previewPanel.previousPreviewStyle();
541530
}
542-
543-
/**
544-
* Checks if the given TextField is the last field in the currently selected tab.
545-
*
546-
* @param textField the TextField to check
547-
* @return true if this is the last field in the current tab, false otherwise
548-
*/
549-
private boolean isLastFieldInCurrentTab(TextField textField) {
550-
if (textField == null || tabbed.getSelectionModel().getSelectedItem() == null) {
551-
return false;
552-
}
553-
554-
Tab selectedTab = tabbed.getSelectionModel().getSelectedItem();
555-
if (!(selectedTab instanceof FieldsEditorTab currentTab)) {
556-
return false;
557-
}
558-
559-
Collection<Field> shownFields = currentTab.getShownFields();
560-
if (shownFields.isEmpty() || textField.getId() == null) {
561-
return false;
562-
}
563-
564-
Optional<Field> lastField = shownFields.stream()
565-
.reduce((first, second) -> second);
566-
567-
return lastField.map(Field::getDisplayName)
568-
.map(displayName -> displayName.equalsIgnoreCase(textField.getId()))
569-
.orElse(false);
570-
}
571-
572-
/**
573-
* Moves to the next tab and focuses on its first field.
574-
*/
575-
private void moveToNextTabAndFocus() {
576-
tabbed.getSelectionModel().selectNext();
577-
578-
UiTaskExecutor.runInJavaFXThread(() -> {
579-
Tab selectedTab = tabbed.getSelectionModel().getSelectedItem();
580-
if (selectedTab instanceof FieldsEditorTab currentTab) {
581-
focusFirstFieldInTab(currentTab);
582-
}
583-
});
584-
}
585-
586-
private void focusFirstFieldInTab(FieldsEditorTab tab) {
587-
Node tabContent = tab.getContent();
588-
if (tabContent instanceof Parent parent) {
589-
// First try to find field by ID (preferred method)
590-
Collection<Field> shownFields = tab.getShownFields();
591-
if (!shownFields.isEmpty()) {
592-
Field firstField = shownFields.iterator().next();
593-
String firstFieldId = firstField.getDisplayName();
594-
Optional<TextInputControl> firstTextInput = findTextInputById(parent, firstFieldId);
595-
if (firstTextInput.isPresent()) {
596-
firstTextInput.get().requestFocus();
597-
return;
598-
}
599-
}
600-
601-
Optional<TextInputControl> anyTextInput = findAnyTextInput(parent);
602-
if (anyTextInput.isPresent()) {
603-
anyTextInput.get().requestFocus();
604-
}
605-
}
606-
}
607-
608-
/// Recursively searches for a TextInputControl (TextField or TextArea) with the given ID.
609-
private Optional<TextInputControl> findTextInputById(Parent parent, String id) {
610-
for (Node child : parent.getChildrenUnmodifiable()) {
611-
if (child instanceof TextInputControl textInput && id.equalsIgnoreCase(textInput.getId())) {
612-
return Optional.of(textInput);
613-
} else if (child instanceof Parent childParent) {
614-
Optional<TextInputControl> found = findTextInputById(childParent, id);
615-
if (found.isPresent()) {
616-
return found;
617-
}
618-
}
619-
}
620-
return Optional.empty();
621-
}
622-
623-
private Optional<TextInputControl> findAnyTextInput(Parent parent) {
624-
for (Node child : parent.getChildrenUnmodifiable()) {
625-
if (child instanceof TextInputControl textInput) {
626-
return Optional.of(textInput);
627-
} else if (child instanceof Parent childParent) {
628-
Optional<TextInputControl> found = findAnyTextInput(childParent);
629-
if (found.isPresent()) {
630-
return found;
631-
}
632-
}
633-
}
634-
return Optional.empty();
635-
}
636531
}

jabgui/src/main/java/org/jabref/gui/fieldeditors/CitationKeyEditor.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ public CitationKeyEditor(Field field,
5656
undoManager,
5757
dialogService);
5858

59-
textField.setId(field.getDisplayName());
60-
6159
establishBinding(textField, viewModel.textProperty(), keyBindingRepository, undoAction, redoAction);
6260
textField.initContextMenu(Collections::emptyList, keyBindingRepository);
6361
new EditorValidator(preferences).configureValidation(viewModel.getFieldValidator().getValidationStatus(), textField);

jabgui/src/main/java/org/jabref/gui/fieldeditors/EditorTextField.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,12 @@
44
import java.util.List;
55
import java.util.Objects;
66
import java.util.ResourceBundle;
7-
import java.util.function.Predicate;
87
import java.util.function.Supplier;
98

109
import javafx.fxml.Initializable;
1110
import javafx.scene.control.ContextMenu;
1211
import javafx.scene.control.MenuItem;
1312
import javafx.scene.control.TextField;
14-
import javafx.scene.input.KeyCode;
15-
import javafx.scene.input.KeyEvent;
1613
import javafx.scene.layout.HBox;
1714
import javafx.scene.layout.Priority;
1815

@@ -22,26 +19,13 @@
2219

2320
public class EditorTextField extends TextField implements Initializable, ContextMenuAddable {
2421

25-
private static Runnable nextTabSelector;
26-
private static Predicate<TextField> isLastFieldChecker;
2722
private final ContextMenu contextMenu = new ContextMenu();
28-
2923
private Runnable additionalPasteActionHandler = () -> {
3024
// No additional paste behavior
3125
};
3226

3327
public EditorTextField() {
3428
this("");
35-
this.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
36-
if (event.getCode() == KeyCode.TAB &&
37-
isLastFieldChecker != null &&
38-
isLastFieldChecker.test(this)) {
39-
if (nextTabSelector != null) {
40-
nextTabSelector.run();
41-
}
42-
event.consume();
43-
}
44-
});
4529
}
4630

4731
public EditorTextField(final String text) {
@@ -54,11 +38,6 @@ public EditorTextField(final String text) {
5438
ClipBoardManager.addX11Support(this);
5539
}
5640

57-
public static void setupTabNavigation(Predicate<TextField> isLastFieldChecker, Runnable nextTabSelector) {
58-
EditorTextField.isLastFieldChecker = isLastFieldChecker;
59-
EditorTextField.nextTabSelector = nextTabSelector;
60-
}
61-
6241
@Override
6342
public void initContextMenu(final Supplier<List<MenuItem>> items, KeyBindingRepository keyBindingRepository) {
6443
setOnContextMenuRequested(event -> {

jabgui/src/main/java/org/jabref/gui/fieldeditors/MarkdownEditor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public MarkdownEditor(Field field, SuggestionProvider<?> suggestionProvider, Fie
2222
}
2323

2424
@Override
25-
protected TextInputControl createTextInputControl(Field field) {
25+
protected TextInputControl createTextInputControl() {
2626
return new EditorTextArea() {
2727
@Override
2828
public void paste() {

jabgui/src/main/java/org/jabref/gui/fieldeditors/PersonsEditor.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ public PersonsEditor(final Field field,
3838

3939
this.viewModel = new PersonsEditorViewModel(field, suggestionProvider, preferences.getAutoCompletePreferences(), fieldCheckers, undoManager);
4040
textInput = isMultiLine ? new EditorTextArea() : new EditorTextField();
41-
textInput.setId(field.getName());
4241
decoratedStringProperty = new UiThreadStringProperty(viewModel.textProperty());
4342
establishBinding(textInput, decoratedStringProperty, keyBindingRepository, undoAction, redoAction);
4443
((ContextMenuAddable) textInput).initContextMenu(EditorMenus.getNameMenu(textInput), keyBindingRepository);

jabgui/src/main/java/org/jabref/gui/fieldeditors/SimpleEditor.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public SimpleEditor(final Field field,
3535
this.viewModel = new SimpleEditorViewModel(field, suggestionProvider, fieldCheckers, undoManager);
3636
this.isMultiLine = isMultiLine;
3737

38-
textInput = createTextInputControl(field);
38+
textInput = createTextInputControl();
3939
HBox.setHgrow(textInput, Priority.ALWAYS);
4040

4141
establishBinding(textInput, viewModel.textProperty(), preferences.getKeyBindingRepository(), undoAction, redoAction);
@@ -54,10 +54,8 @@ public SimpleEditor(final Field field,
5454
new EditorValidator(preferences).configureValidation(viewModel.getFieldValidator().getValidationStatus(), textInput);
5555
}
5656

57-
protected TextInputControl createTextInputControl(Field field) {
58-
TextInputControl inputControl = isMultiLine ? new EditorTextArea() : new EditorTextField();
59-
inputControl.setId(field.getName());
60-
return inputControl;
57+
protected TextInputControl createTextInputControl() {
58+
return isMultiLine ? new EditorTextArea() : new EditorTextField();
6159
}
6260

6361
@Override

0 commit comments

Comments
 (0)