diff --git a/picard/ui/edittagdialog.py b/picard/ui/edittagdialog.py
index 90758afe2..e72c2259f 100644
--- a/picard/ui/edittagdialog.py
+++ b/picard/ui/edittagdialog.py
@@ -121,17 +121,37 @@ class EditTagDialog(PicardDialog):
self.value_selection_changed()
self.restore_geometry()
+ def keyPressEvent(self, event):
+ if event.modifiers() == QtCore.Qt.NoModifier and event.key() in (QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return):
+ self.add_or_edit_value()
+ event.accept()
+ else:
+ super().keyPressEvent(event)
+
+ def tag_selected(self, index):
+ self.add_or_edit_value()
+
def edit_value(self):
item = self.value_list.currentItem()
- if item:
+ if item and not self.value_list.isPersistentEditorOpen(item):
self.value_list.editItem(item)
def add_value(self):
item = QtWidgets.QListWidgetItem()
item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsEditable)
self.value_list.addItem(item)
+ self.value_list.setCurrentItem(item)
self.value_list.editItem(item)
+ def add_or_edit_value(self):
+ last_item = self.value_list.item(self.value_list.count() - 1)
+ # Edit the last item, if it is empty, or add a new empty item
+ if last_item and not last_item.text():
+ self.value_list.setCurrentItem(last_item)
+ self.edit_value()
+ else:
+ self.add_value()
+
def remove_value(self):
value_list = self.value_list
row = value_list.currentRow()
diff --git a/picard/ui/ui_edittagdialog.py b/picard/ui/ui_edittagdialog.py
index 3d0505406..d24199883 100644
--- a/picard/ui/ui_edittagdialog.py
+++ b/picard/ui/ui_edittagdialog.py
@@ -102,6 +102,7 @@ class Ui_EditTagDialog(object):
self.remove_value.clicked.connect(EditTagDialog.remove_value)
self.value_list.itemSelectionChanged.connect(EditTagDialog.value_selection_changed)
self.tag_names.editTextChanged['QString'].connect(EditTagDialog.tag_changed)
+ self.tag_names.activated['QString'].connect(EditTagDialog.tag_selected)
QtCore.QMetaObject.connectSlotsByName(EditTagDialog)
EditTagDialog.setTabOrder(self.tag_names, self.value_list)
EditTagDialog.setTabOrder(self.value_list, self.edit_value)
diff --git a/ui/edittagdialog.ui b/ui/edittagdialog.ui
index 8145897ef..8a2a69863 100644
--- a/ui/edittagdialog.ui
+++ b/ui/edittagdialog.ui
@@ -144,7 +144,8 @@
-
+
+ ..
@@ -160,7 +161,8 @@
-
+
+ ..
@@ -375,6 +377,22 @@
+
+ tag_names
+ activated(QString)
+ EditTagDialog
+ tag_selected()
+
+
+ 199
+ 21
+
+
+ 199
+ 124
+
+
+
move_row_up()
@@ -385,5 +403,6 @@
value_edited()
value_selection_changed()
tag_changed()
+ tag_selected()