Avoid needless dock churn in QETElementEditor::updateInformations()

updateInformations() runs on every selection change and on every undo
stack index change. It unconditionally called clearToolsDock(), which
removes and hides the current editor widget, and then re-inserted the
same widget into the stack. When the editor for the new selection is
the one already shown, that means removing, hiding, reparenting and
re-adding a widget only to end up in the same state.

Look up the editor first and only clear and re-insert the tools dock
when a different editor is needed. setPart()/setParts() still updates
the contents in every case, so the visible result is unchanged.
This commit is contained in:
Levi Jetzer
2026-08-06 17:20:48 +02:00
parent 4ff2be3f43
commit 72c8008218
+18 -6
View File
@@ -573,9 +573,11 @@ void QETElementEditor::updateInformations()
|| selection_xml_name == "ellipse"
|| selection_xml_name == "arc")
{
clearToolsDock();
//We add the editor widget
ElementItemEditor *editor = static_cast<ElementItemEditor*>(m_editors[selection_xml_name]);
if (m_tools_dock_stack -> widget(1) != editor) {
clearToolsDock();
}
#if TODO_LIST
#pragma message("@TODO Check if it takes longer than setting the parts again to the editor.")
@@ -608,7 +610,9 @@ void QETElementEditor::updateInformations()
success = editor -> setParts(cep_list);
}
if (success) {
m_tools_dock_stack -> insertWidget(1, editor);
if (m_tools_dock_stack -> widget(1) != editor) {
m_tools_dock_stack -> insertWidget(1, editor);
}
m_tools_dock_stack -> setCurrentIndex(1);
}
else {
@@ -626,8 +630,10 @@ void QETElementEditor::updateInformations()
// multi edit for polygons makes no sense
// TODO: maybe allowing multipart edit when number of points is the same?
//We add the editor widget
clearToolsDock();
ElementItemEditor *editor = static_cast<ElementItemEditor*>(m_editors[selection_xml_name]);
if (m_tools_dock_stack -> widget(1) != editor) {
clearToolsDock();
}
CustomElementPart* part = editor -> currentPart();
bool equal = part == cep_list.first();
@@ -637,7 +643,9 @@ void QETElementEditor::updateInformations()
success = editor -> setPart(cep_list.first());
}
if (success) {
m_tools_dock_stack -> insertWidget(1, editor);
if (m_tools_dock_stack -> widget(1) != editor) {
m_tools_dock_stack -> insertWidget(1, editor);
}
m_tools_dock_stack -> setCurrentIndex(1);
}
else {
@@ -655,11 +663,15 @@ void QETElementEditor::updateInformations()
//There's several parts selecteds and all can be edited by style editor.
if (style_editable) {
clearToolsDock();
ElementItemEditor *selection_editor = m_editors["style"];
if (m_tools_dock_stack -> widget(1) != selection_editor) {
clearToolsDock();
}
if (selection_editor) {
if (selection_editor -> setParts(cep_list)) {
m_tools_dock_stack -> insertWidget(1, selection_editor);
if (m_tools_dock_stack -> widget(1) != selection_editor) {
m_tools_dock_stack -> insertWidget(1, selection_editor);
}
m_tools_dock_stack -> setCurrentIndex(1);
}
else {