@@ -203,10 +203,6 @@ def _load_ui(self) -> None:
203203 self ._main_splitter = _require (
204204 self .ui .findChild (QSplitter , "mainSplitter" ), "mainSplitter"
205205 )
206- self ._left_splitter = _require (
207- self .ui .findChild (QSplitter , "leftPanelSplitter" ), "leftPanelSplitter"
208- )
209-
210206 # Merge tab widgets
211207 self ._merge_file_list = _require (
212208 self .ui .findChild (QListWidget , "mergeFileList" ), "mergeFileList"
@@ -255,6 +251,11 @@ def _setup_merge_tab(self) -> None:
255251
256252 def _connect_signals (self ) -> None :
257253 """Wire UI events to ViewModel slots and ViewModel signals to UI handlers."""
254+ # Tab widget: resize to current tab's content height so shorter tabs
255+ # (Clean) don't show dead space reserved for taller tabs (Merge/Find).
256+ self ._tab_widget .currentChanged .connect (self ._on_tab_changed )
257+ self ._on_tab_changed (self ._tab_widget .currentIndex ())
258+
258259 # File tree → load file (directories are filtered inside the slot)
259260 self ._file_tree_view .clicked .connect (self ._on_tree_item_clicked )
260261
@@ -344,6 +345,21 @@ def _connect_signals(self) -> None:
344345
345346 # ---------------------------------------------------------- user actions
346347
348+ def _on_tab_changed (self , index : int ) -> None :
349+ """Cap tab widget height to the current page's content.
350+
351+ QTabWidget internally uses QStackedWidget whose sizeHint() always
352+ returns the max of ALL children — ignoring per-page size policies.
353+ setMaximumHeight is the only reliable way to shrink the widget for
354+ shorter pages (Clean tab) while letting taller pages expand.
355+ """
356+ page = self ._tab_widget .widget (index )
357+ if page is None :
358+ return
359+ tab_bar_h = self ._tab_widget .tabBar ().sizeHint ().height ()
360+ page_h = page .sizeHint ().height ()
361+ self ._tab_widget .setMaximumHeight (tab_bar_h + page_h )
362+
347363 def _focus_find_edit (self ) -> None :
348364 """Switch to Find/Replace tab and focus the find field (Ctrl+F target)."""
349365 if self ._find_replace_tab_index >= 0 :
@@ -555,8 +571,6 @@ def _load_settings(self) -> None:
555571 self .ui .restoreGeometry (geometry )
556572 if main_state := settings .value ("splitter/main" ):
557573 self ._main_splitter .restoreState (main_state )
558- if left_state := settings .value ("splitter/left" ):
559- self ._left_splitter .restoreState (left_state )
560574
561575 def _save_settings (self ) -> None :
562576 """Save window geometry and splitter positions to QSettings.
@@ -566,7 +580,6 @@ def _save_settings(self) -> None:
566580 settings = QSettings ()
567581 settings .setValue ("window/geometry" , self .ui .saveGeometry ())
568582 settings .setValue ("splitter/main" , self ._main_splitter .saveState ())
569- settings .setValue ("splitter/left" , self ._left_splitter .saveState ())
570583
571584 def _apply_preferences (self ) -> None :
572585 """Apply user preferences from QSettings to the editor.
0 commit comments