mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Fix clock visibilty when open context menu
This commit is contained in:
parent
53d647f2d0
commit
9ec6d5c95f
1 changed files with 35 additions and 18 deletions
|
|
@ -669,7 +669,6 @@ namespace Flow.Launcher
|
|||
if (QueryTextBox == null || ContextMenu == null || History == null || ClockPanel == null)
|
||||
return;
|
||||
|
||||
// ✅ `WindowAnimator`와 동일한 애니메이션 속도 설정 참조
|
||||
var animationLength = _settings.AnimationSpeed switch
|
||||
{
|
||||
AnimationSpeeds.Slow => 560,
|
||||
|
|
@ -678,48 +677,64 @@ namespace Flow.Launcher
|
|||
_ => _settings.CustomAnimationLength
|
||||
};
|
||||
|
||||
var animationDuration = TimeSpan.FromMilliseconds(animationLength * 2 / 3); // ✅ 같은 비율 적용
|
||||
var animationDuration = TimeSpan.FromMilliseconds(animationLength * 2 / 3);
|
||||
|
||||
// ✅ 글자 수가 1 이상이면 애니메이션 추가 실행 방지
|
||||
if (QueryTextBox.Text.Length > 0 ||
|
||||
ContextMenu.Visibility != Visibility.Collapsed ||
|
||||
History.Visibility != Visibility.Collapsed)
|
||||
// ✅ ClockPanel이 표시될 조건 (쿼리 입력 없음 & ContextMenu, History가 닫혀 있음)
|
||||
bool shouldShowClock = QueryTextBox.Text.Length == 0 &&
|
||||
ContextMenu.Visibility == Visibility.Collapsed &&
|
||||
History.Visibility == Visibility.Collapsed;
|
||||
|
||||
// ✅ ClockPanel이 숨겨질 조건 (쿼리에 글자가 있거나, ContextMenu 또는 History가 열려 있음)
|
||||
bool shouldHideClock = QueryTextBox.Text.Length > 0 ||
|
||||
ContextMenu.Visibility == Visibility.Visible ||
|
||||
History.Visibility != Visibility.Collapsed;
|
||||
|
||||
// ✅ 1. ContextMenu가 열리면 즉시 Visibility.Hidden으로 설정 (애니메이션 없이 강제 숨김)
|
||||
if (ContextMenu.Visibility == Visibility.Visible)
|
||||
{
|
||||
if (ClockPanel.Visibility == Visibility.Hidden || _isClockPanelAnimating)
|
||||
return; // ✅ 이미 숨겨져 있거나 애니메이션 실행 중이면 다시 실행하지 않음
|
||||
ClockPanel.Visibility = Visibility.Hidden;
|
||||
ClockPanel.Opacity = 0.0; // 혹시라도 Opacity 애니메이션이 영향을 줄 경우 0으로 설정
|
||||
return;
|
||||
}
|
||||
|
||||
// ✅ 2. ContextMenu가 닫혔을 때, 쿼리에 글자가 남아 있다면 Hidden 상태 유지 (이전 상태 기억)
|
||||
if (ContextMenu.Visibility == Visibility.Collapsed && QueryTextBox.Text.Length > 0)
|
||||
{
|
||||
ClockPanel.Visibility = Visibility.Hidden;
|
||||
ClockPanel.Opacity = 0.0;
|
||||
return;
|
||||
}
|
||||
|
||||
// ✅ 3. ClockPanel을 숨기는 경우 (페이드아웃 애니메이션 적용)
|
||||
if (shouldHideClock && ClockPanel.Visibility == Visibility.Visible && !_isClockPanelAnimating)
|
||||
{
|
||||
_isClockPanelAnimating = true;
|
||||
|
||||
// Opacity 애니메이션 적용 후 Visibility.Hidden 처리
|
||||
var fadeOut = new DoubleAnimation
|
||||
{
|
||||
From = 1.0,
|
||||
To = 0.0,
|
||||
Duration = animationDuration,
|
||||
FillBehavior = FillBehavior.Stop
|
||||
FillBehavior = FillBehavior.HoldEnd
|
||||
};
|
||||
|
||||
fadeOut.Completed += (s, e) =>
|
||||
{
|
||||
ClockPanel.Visibility = Visibility.Hidden;
|
||||
ClockPanel.Visibility = Visibility.Hidden; // ✅ 애니메이션 후 완전히 숨김
|
||||
_isClockPanelAnimating = false;
|
||||
};
|
||||
|
||||
ClockPanel.BeginAnimation(UIElement.OpacityProperty, fadeOut);
|
||||
}
|
||||
else
|
||||
// ✅ 4. ClockPanel을 표시하는 경우 (페이드인 애니메이션 적용)
|
||||
else if (shouldShowClock && ClockPanel.Visibility != Visibility.Visible && !_isClockPanelAnimating)
|
||||
{
|
||||
if (ClockPanel.Visibility == Visibility.Visible || _isClockPanelAnimating)
|
||||
return; // ✅ 이미 표시 중이거나 애니메이션 실행 중이면 다시 실행하지 않음
|
||||
|
||||
_isClockPanelAnimating = true;
|
||||
|
||||
// ✅ Dispatcher를 사용하여 UI 업데이트 후 `ClockPanel` 표시
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
ClockPanel.Visibility = Visibility.Visible;
|
||||
ClockPanel.Visibility = Visibility.Visible; // ✅ Visibility를 먼저 Visible로 설정
|
||||
|
||||
// Opacity 애니메이션 적용
|
||||
var fadeIn = new DoubleAnimation
|
||||
{
|
||||
From = 0.0,
|
||||
|
|
@ -739,6 +754,8 @@ namespace Flow.Launcher
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
private void InitSoundEffects()
|
||||
{
|
||||
if (_settings.WMPInstalled)
|
||||
|
|
|
|||
Loading…
Reference in a new issue