@@ -414,46 +414,113 @@ private void UpdateLeftSidebarLayout()
414414 return ;
415415
416416 var leftHeight = leftSidebarGroups . Bounds . Height - 28.0 * 5 ;
417+ var localBranchRows = vm . IsLocalBranchGroupExpanded ? GetTreeRowsCount ( vm . LocalBranchTrees ) : 0 ;
418+ var remoteBranchRows = vm . IsRemoteGroupExpanded ? GetTreeRowsCount ( vm . RemoteBranchTrees ) : 0 ;
419+ var desiredBranches = ( localBranchRows + remoteBranchRows ) * 24.0 ;
420+ var desiredTag = vm . IsTagGroupExpanded ? tagsList . RowHeight * vm . VisibleTags . Count : 0 ;
421+ var desiredSubmodule = vm . IsSubmoduleGroupExpanded ? submoduleList . RowHeight * vm . Submodules . Count : 0 ;
422+ var desiredWorktree = vm . IsWorktreeGroupExpanded ? worktreeList . RowHeight * vm . Worktrees . Count : 0 ;
423+ var desiredOthers = desiredTag + desiredSubmodule + desiredWorktree ;
424+ var hasOverflow = ( desiredBranches + desiredOthers > leftHeight ) ;
425+
417426 if ( vm . IsTagGroupExpanded )
418427 {
419- var desiredHeight = Math . Min ( 200.0 , tagsList . RowHeight * vm . VisibleTags . Count ) ;
420- leftHeight -= desiredHeight ;
421- if ( ! tagsList . Height . IsClose ( desiredHeight ) )
422- tagsList . Height = desiredHeight ;
428+ var height = desiredTag ;
429+ if ( hasOverflow )
430+ {
431+ var test = leftHeight - desiredBranches - desiredSubmodule - desiredWorktree ;
432+ if ( test < 0 )
433+ height = Math . Min ( 200 , height ) ;
434+ else
435+ height = Math . Max ( 200 , test ) ;
436+ }
437+
438+ leftHeight -= height ;
439+ tagsList . Height = height ;
440+ hasOverflow = ( desiredBranches + desiredSubmodule + desiredWorktree ) > leftHeight ;
423441 }
424442
425443 if ( vm . IsSubmoduleGroupExpanded )
426444 {
427- var desiredHeight = Math . Min ( 200.0 , submoduleList . RowHeight * vm . Submodules . Count ) ;
428- leftHeight -= desiredHeight ;
429- if ( ! submoduleList . Height . IsClose ( desiredHeight ) )
430- submoduleList . Height = desiredHeight ;
445+ var height = desiredSubmodule ;
446+ if ( hasOverflow )
447+ {
448+ var test = leftHeight - desiredBranches - desiredWorktree ;
449+ if ( test < 0 )
450+ height = Math . Min ( 200 , height ) ;
451+ else
452+ height = Math . Max ( 200 , test ) ;
453+ }
454+
455+ leftHeight -= height ;
456+ submoduleList . Height = height ;
457+ hasOverflow = ( desiredBranches + desiredWorktree ) > leftHeight ;
431458 }
432459
433460 if ( vm . IsWorktreeGroupExpanded )
434461 {
435- var desiredHeight = Math . Min ( 200.0 , worktreeList . RowHeight * vm . Worktrees . Count ) ;
436- leftHeight -= desiredHeight ;
437- if ( ! worktreeList . Height . IsClose ( desiredHeight ) )
438- worktreeList . Height = desiredHeight ;
462+ var height = desiredWorktree ;
463+ if ( hasOverflow )
464+ {
465+ var test = leftHeight - desiredBranches ;
466+ if ( test < 0 )
467+ height = Math . Min ( 200 , height ) ;
468+ else
469+ height = Math . Max ( 200 , test ) ;
470+ }
471+
472+ leftHeight -= height ;
473+ worktreeList . Height = height ;
439474 }
440475
441- if ( vm . IsLocalBranchGroupExpanded )
476+ if ( desiredBranches > leftHeight )
442477 {
443- var localBranchMax = vm . IsRemoteGroupExpanded ? leftHeight * 0.5 : leftHeight ;
444- var desiredHeight = GetTreeRowsCount ( vm . LocalBranchTrees ) * 24 ;
445- var localBranchHeight = Math . Min ( localBranchMax , desiredHeight ) ;
446- if ( ! localBranchTree . Height . IsClose ( localBranchHeight ) )
447- localBranchTree . Height = localBranchHeight ;
448- leftHeight -= localBranchHeight ;
478+ var local = localBranchRows * 24.0 ;
479+ var remote = remoteBranchRows * 24.0 ;
480+ var half = leftHeight / 2 ;
481+ if ( vm . IsLocalBranchGroupExpanded )
482+ {
483+ if ( vm . IsRemoteGroupExpanded )
484+ {
485+ if ( local < half )
486+ {
487+ localBranchTree . Height = local ;
488+ remoteBranchTree . Height = leftHeight - local ;
489+ }
490+ else if ( remote < half )
491+ {
492+ remoteBranchTree . Height = remote ;
493+ localBranchTree . Height = leftHeight - remote ;
494+ }
495+ else
496+ {
497+ localBranchTree . Height = half ;
498+ remoteBranchTree . Height = half ;
499+ }
500+ }
501+ else
502+ {
503+ localBranchTree . Height = leftHeight ;
504+ }
505+ }
506+ else if ( vm . IsRemoteGroupExpanded )
507+ {
508+ remoteBranchTree . Height = leftHeight ;
509+ }
449510 }
450-
451- if ( vm . IsRemoteGroupExpanded )
511+ else
452512 {
453- var desiredHeight = GetTreeRowsCount ( vm . RemoteBranchTrees ) * 24 ;
454- var remoteHeight = Math . Min ( leftHeight , desiredHeight ) ;
455- if ( ! remoteBranchTree . Height . IsClose ( remoteHeight ) )
456- remoteBranchTree . Height = remoteHeight ;
513+ if ( vm . IsLocalBranchGroupExpanded )
514+ {
515+ var height = localBranchRows * 24 ;
516+ localBranchTree . Height = height ;
517+ }
518+
519+ if ( vm . IsRemoteGroupExpanded )
520+ {
521+ var height = remoteBranchRows * 24 ;
522+ remoteBranchTree . Height = height ;
523+ }
457524 }
458525 }
459526
0 commit comments