fix(dock_area): fix hiding title window for the first dock after second is added, countering the logic of QtADS DockContainerWidgetPrivate::addDockAreasToList code

This commit is contained in:
2026-07-23 09:00:52 +02:00
committed by Jan Wyzula
parent 349858680b
commit a6e66a902b
2 changed files with 31 additions and 1 deletions
@@ -601,7 +601,7 @@ class DockAreaWidget(BECWidget, QWidget):
apply_widget_icon=spec.apply_widget_icon,
)
self.dock_manager.setFocus()
self._apply_dock_preferences(dock)
self._apply_all_dock_preferences()
if spec.promote_central:
self.set_central_dock(dock)
return dock
@@ -1251,6 +1251,20 @@ class DockAreaWidget(BECWidget, QWidget):
apply()
def _apply_all_dock_preferences(self) -> None:
"""
Re-apply the stored appearance preferences of every dock.
Qt ADS force-reshows the first dock area's title bar when a container grows
from one dock area to two (``DockContainerWidgetPrivate::addDockAreasToList``),
so preferences already applied to existing docks must be re-asserted whenever
a dock is added.
"""
for dock in self.dock_list():
if dock is None or not isValid(dock):
continue
self._apply_dock_preferences(dock)
def set_central_dock(self, dock: CDockWidget | QWidget | str) -> None:
"""
Promote an existing dock to be the dock manager's central widget.
@@ -1433,6 +1447,7 @@ class DockAreaWidget(BECWidget, QWidget):
self.dock_manager.addDockWidgetTab(
QtAds.DockWidgetArea.RightDockWidgetArea, dock, target
)
self._apply_all_dock_preferences()
@SafeSlot(str)
def delete(self, object_name: str) -> bool:
+15
View File
@@ -490,6 +490,21 @@ class TestBasicDockArea:
assert vertical == [2, 3]
assert overrides == {(): [9], (1, 0): [5, 5]}
def test_first_dock_title_bar_preference_survives_second_dock(self, basic_dock_area):
first = QWidget(parent=basic_dock_area)
first.setObjectName("first_panel")
second = QWidget(parent=basic_dock_area)
second.setObjectName("second_panel")
first_dock = basic_dock_area.new(first, return_dock=True, show_title_bar=False)
assert first_dock.dockAreaWidget().titleBar().isHidden()
# Adding a second dock makes ADS force-reshow the first area's title bar;
# the stored preference must win.
basic_dock_area.new(second, where="bottom", relative_to=first_dock, show_title_bar=False)
assert first_dock.dockAreaWidget().titleBar().isHidden()
def test_show_settings_action_defaults_disabled(self, basic_dock_area):
widget = QWidget(parent=basic_dock_area)
widget.setObjectName("settings_default")