Code cleanup

This commit is contained in:
Jack251970 2025-03-16 17:48:22 +08:00
parent 8b10973dda
commit 1ca17aa2db
3 changed files with 21 additions and 22 deletions

View file

@ -16,7 +16,21 @@ namespace Flow.Launcher.Infrastructure
{ {
// Windows 11 (22000) 이상에서만 Mica 및 Acrylic 효과 지원 // Windows 11 (22000) 이상에서만 Mica 및 Acrylic 효과 지원
return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && return RuntimeInformation.IsOSPlatform(OSPlatform.Windows) &&
Environment.OSVersion.Version.Build >= 22000; Environment.OSVersion.Version.Build >= 22000;
}
public static unsafe bool DWMSetCloakForWindow(Window window, bool cloak)
{
var windowHelper = new WindowInteropHelper(window);
windowHelper.EnsureHandle();
var cloaked = cloak ? 1 : 0;
return PInvoke.DwmSetWindowAttribute(
new(windowHelper.Handle),
DWMWINDOWATTRIBUTE.DWMWA_CLOAK,
&cloaked,
(uint)Marshal.SizeOf<int>()).Succeeded;
} }
public static unsafe bool DWMSetBackdropForWindow(Window window, BackdropTypes backdrop) public static unsafe bool DWMSetBackdropForWindow(Window window, BackdropTypes backdrop)

View file

@ -186,12 +186,11 @@ namespace Flow.Launcher
InitializeColorScheme(); InitializeColorScheme();
WindowsInteropHelper.DisableControlBox(this); WindowsInteropHelper.DisableControlBox(this);
InitProgressbarAnimation(); InitProgressbarAnimation();
// Move the window out of screen because setting backdrop will cause flicker with a rectangle
Left = Top = -10000;
await ThemeManager.Instance.RefreshFrameAsync();
// Initialize call twice to work around multi-display alignment issue- https://github.com/Flow-Launcher/Flow.Launcher/issues/2910 // Initialize call twice to work around multi-display alignment issue- https://github.com/Flow-Launcher/Flow.Launcher/issues/2910
InitializePosition(); InitializePosition();
InitializePosition(); InitializePosition();
// Refresh frame
await ThemeManager.Instance.RefreshFrameAsync();
PreviewReset(); PreviewReset();
// Since the default main window visibility is visible, so we need set focus during startup // Since the default main window visibility is visible, so we need set focus during startup
QueryTextBox.Focus(); QueryTextBox.Focus();
@ -825,26 +824,13 @@ namespace Flow.Launcher
public void HideStartup() public void HideStartup()
{ {
//_viewModel.MainWindowOpacity = 0.2; /*Fix Render Blinking */
if (_settings.HideOnStartup) if (_settings.HideOnStartup)
{ {
// 📌 최초 실행 시 창이 깜빡이는 문제 방지 (완전히 숨긴 상태로 시작)
//System.Windows.Application.Current.MainWindow.Visibility = Visibility.Hidden;
//Dispatcher.BeginInvoke((Action)(() =>
//{
// _viewModel.Hide();
// System.Windows.Application.Current.MainWindow.Visibility = Visibility.Collapsed;
//}), DispatcherPriority.Background);
_viewModel.Hide(); _viewModel.Hide();
} }
else else
{ {
// 📌 최초 실행 시 그림자 효과를 미리 적용하여 Show() 할 때 렌더링이 느려지지 않도록 함
//ThemeManager.Instance.SetBlurForWindow();
//ThemeManager.Instance.AutoDropShadow();
_viewModel.Show(); _viewModel.Show();
//_viewModel.MainWindowOpacity = 1;
} }
} }

View file

@ -1386,10 +1386,8 @@ namespace Flow.Launcher.ViewModel
{ {
if (Application.Current.MainWindow is MainWindow mainWindow) if (Application.Current.MainWindow is MainWindow mainWindow)
{ {
IntPtr hWnd = new WindowInteropHelper(mainWindow).Handle; // 📌 DWM Cloak 해제 (창을 정상적으로 표시)
Win32Helper.DWMSetCloakForWindow(mainWindow, false);
// 📌 창을 보이도록 설정 (Cloak 사용 안 함)
//ShowWindow(hWnd, SW_SHOW);
// 📌 UI 요소 복원 // 📌 UI 요소 복원
mainWindow.ClockPanel.Visibility = Visibility.Visible; mainWindow.ClockPanel.Visibility = Visibility.Visible;
@ -1433,7 +1431,8 @@ namespace Flow.Launcher.ViewModel
mainWindow.SearchIcon.UpdateLayout(); mainWindow.SearchIcon.UpdateLayout();
}, DispatcherPriority.Render); }, DispatcherPriority.Render);
//await Task.Delay(10); // UI 반영 대기 // 📌 DWM Cloak 적용 (창을 완전히 숨김)
Win32Helper.DWMSetCloakForWindow(mainWindow, true);
} }
// 📌 텍스트 초기화 즉시 적용 + UI 강제 업데이트 // 📌 텍스트 초기화 즉시 적용 + UI 강제 업데이트