Merge pull request #1182 from ispyisail/fix/element-editor-space-rotates-selection

Fix #1177: Space rotated the selection, not the part being added
This commit is contained in:
ispyisail
2026-10-01 08:43:15 +13:00
committed by GitHub
4 changed files with 16 additions and 2 deletions
+6
View File
@@ -148,6 +148,9 @@ ElementScene::~ElementScene()
disconnect(&m_undo_stack, &QUndoStack::indexChanged, this, &ElementScene::managePrimitivesGroups);
delete m_decorator_lock;
//Deleting the event interface resets the behavior; the editor
//is already being destroyed, so it must not hear about it.
blockSignals(true);
if (m_event_interface)
delete m_event_interface;
@@ -417,7 +420,10 @@ void ElementScene::clearEventInterface()
*/
void ElementScene::setBehavior(ElementScene::Behavior b)
{
if (b == m_behavior)
return;
m_behavior = b;
emit behaviorChanged();
}
ElementScene::Behavior ElementScene::behavior() const
+2
View File
@@ -198,6 +198,8 @@ class ElementScene : public QGraphicsScene
void elementTypeChanged();
/// Signal emitted with the current cursor position (scene coordinates) on every mouse move
void mouseMoved(const QPointF &pos);
/// Signal emitted when the behavior changes, e.g. a part starts or stops being added
void behaviorChanged();
};
Q_DECLARE_OPERATORS_FOR_FLAGS(ElementScene::ItemOptions)
@@ -42,6 +42,9 @@ void ESEventInterface::init()
{
m_scene->setBehavior(ElementScene::Behavior::AddPart);
m_editor->elementView()->setDragMode(QGraphicsView::NoDrag);
//Keys such as Space must reach the part being added, even when
//the focus was left in the parts list (#1177)
m_editor->elementView()->setFocus();
}
/**
+5 -2
View File
@@ -1253,7 +1253,8 @@ void QETElementEditor::updateAction()
ui->m_select_all_act->setEnabled(true);
ui->m_revert_selection_action->setEnabled(true);
//Action enabled if a primitive is selected
//Action enabled if a primitive is selected, and no part is being
//added: Space rotates the part being added, not the selection (#1177)
auto select_list = m_depth_action_group->actions();
select_list << ui->m_cut_action
<< ui->m_delete_action
@@ -1262,7 +1263,8 @@ void QETElementEditor::updateAction()
<< ui->m_flip_action
<< ui->m_mirror_action;
const bool has_selection = m_elmt_scene->selectedItems().count() > 0;
auto items_selected = !m_read_only && has_selection;
const bool adding_part = m_elmt_scene->behavior() == ElementScene::AddPart;
auto items_selected = !m_read_only && has_selection && !adding_part;
for (auto action : std::as_const(select_list)) {
action->setEnabled(items_selected);
}
@@ -1297,6 +1299,7 @@ void QETElementEditor::setupConnection()
connect(m_elmt_scene, &ElementScene::partsZValueChanged, this, &QETElementEditor::fillPartsList);
connect(m_parts_list, &QListWidget::itemSelectionChanged, this, &QETElementEditor::updateSelectionFromPartsList);
connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &QETElementEditor::updateAction);
connect(m_elmt_scene, &ElementScene::behaviorChanged, this, &QETElementEditor::updateAction);
connect(m_elmt_scene, &ElementScene::selectionChanged, [this]() {
this->updateInformations();