Revert "Fix Blink"

This reverts commit 70e7f82ff5.
This commit is contained in:
Jack251970 2025-03-16 17:39:53 +08:00
parent 09d66f5850
commit 8b10973dda
2 changed files with 27 additions and 45 deletions

View file

@ -30,8 +30,6 @@ using Windows.Win32;
using Window = System.Windows.Window;
using System.Linq;
using System.Windows.Shapes;
using ModernWpf.Controls.Primitives;
using System.Runtime.InteropServices;
namespace Flow.Launcher
{
@ -827,44 +825,29 @@ namespace Flow.Launcher
public void HideStartup()
{
IntPtr hwnd = new WindowInteropHelper(System.Windows.Application.Current.MainWindow).Handle;
//_viewModel.MainWindowOpacity = 0.2; /*Fix Render Blinking */
if (_settings.HideOnStartup)
{
CloakWindow(System.Windows.Application.Current.MainWindow);
// 📌 최초 실행 시 창이 깜빡이는 문제 방지 (완전히 숨긴 상태로 시작)
//System.Windows.Application.Current.MainWindow.Visibility = Visibility.Hidden;
Dispatcher.BeginInvoke((Action)(() =>
{
_viewModel.Hide();
System.Windows.Application.Current.MainWindow.Visibility = Visibility.Collapsed;
}), DispatcherPriority.Background);
//Dispatcher.BeginInvoke((Action)(() =>
//{
// _viewModel.Hide();
// System.Windows.Application.Current.MainWindow.Visibility = Visibility.Collapsed;
//}), DispatcherPriority.Background);
_viewModel.Hide();
}
else
{
UncloakWindow(System.Windows.Application.Current.MainWindow);
// 📌 최초 실행 시 그림자 효과를 미리 적용하여 Show() 할 때 렌더링이 느려지지 않도록 함
//ThemeManager.Instance.SetBlurForWindow();
//ThemeManager.Instance.AutoDropShadow();
_viewModel.Show();
//_viewModel.MainWindowOpacity = 1;
}
}
private const int DWMWA_CLOAK = 13;
[DllImport("dwmapi.dll")]
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int dwAttribute, ref int pvAttribute, int cbAttribute);
public static void CloakWindow(Window window)
{
IntPtr hwnd = new WindowInteropHelper(window).Handle;
int cloak = 1;
DwmSetWindowAttribute(hwnd, DWMWA_CLOAK, ref cloak, sizeof(int));
}
public static void UncloakWindow(Window window)
{
IntPtr hwnd = new WindowInteropHelper(window).Handle;
int cloak = 0;
DwmSetWindowAttribute(hwnd, DWMWA_CLOAK, ref cloak, sizeof(int));
}
public Screen SelectedScreen()
{
Screen screen;

View file

@ -28,7 +28,6 @@ using System.Windows.Media;
using CommunityToolkit.Mvvm.DependencyInjection;
using System.Windows.Threading;
using System.Windows.Interop;
using System.Runtime.InteropServices;
namespace Flow.Launcher.ViewModel
{
@ -1389,13 +1388,12 @@ namespace Flow.Launcher.ViewModel
{
IntPtr hWnd = new WindowInteropHelper(mainWindow).Handle;
// 📌 DWM Cloak 해제 (창을 정상적으로 표시)
int cloak = 0;
DwmSetWindowAttribute(hWnd, 13, ref cloak, sizeof(int));
// 📌 창을 보이도록 설정 (Cloak 사용 안 함)
//ShowWindow(hWnd, SW_SHOW);
// 📌 UI 요소 복원
mainWindow.ClockPanel.Visibility = Visibility.Visible;
mainWindow.ClockPanel.Opacity = 1;
//mainWindow.SearchIcon.Visibility = Visibility.Visible;
SearchIconVisibility = Visibility.Visible;
}
@ -1421,14 +1419,13 @@ namespace Flow.Launcher.ViewModel
if (Application.Current.MainWindow is MainWindow mainWindow)
{
IntPtr hWnd = new WindowInteropHelper(mainWindow).Handle;
// 📌 UI 요소 숨기기
// 📌 아이콘과 시계 Opacity를 0으로 설정하고 Visibility.Hidden 적용
Application.Current.Dispatcher.Invoke(() =>
{
mainWindow.ClockPanel.Opacity = 0;
mainWindow.SearchIcon.Opacity = 0;
mainWindow.ClockPanel.Visibility = Visibility.Hidden;
//mainWindow.SearchIcon.Visibility = Visibility.Hidden;
SearchIconVisibility = Visibility.Hidden;
// 강제 UI 업데이트
@ -1436,9 +1433,7 @@ namespace Flow.Launcher.ViewModel
mainWindow.SearchIcon.UpdateLayout();
}, DispatcherPriority.Render);
// 📌 DWM Cloak 적용 (창을 완전히 숨김)
int cloak = 1;
DwmSetWindowAttribute(hWnd, 13, ref cloak, sizeof(int));
//await Task.Delay(10); // UI 반영 대기
}
// 📌 텍스트 초기화 즉시 적용 + UI 강제 업데이트
@ -1471,16 +1466,20 @@ namespace Flow.Launcher.ViewModel
break;
}
//if (Application.Current.MainWindow is MainWindow mainWindow2)
//{
// IntPtr hWnd = new WindowInteropHelper(mainWindow2).Handle;
// // 📌 Cloak을 사용하지 않고 일반적인 `ShowWindow(SW_HIDE)` 사용 → Mica/Acrylic 유지됨
// ShowWindow(hWnd, SW_HIDE);
//}
// WPF 속성 업데이트
MainWindowVisibilityStatus = false;
MainWindowVisibility = Visibility.Collapsed;
VisibilityChanged?.Invoke(this, new VisibilityChangedEventArgs { IsVisible = false });
}
// 📌 DWM API 추가 (P/Invoke)
[DllImport("dwmapi.dll")]
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int dwAttribute, ref int pvAttribute, int cbAttribute);
/// <summary>
/// Checks if Flow Launcher should ignore any hotkeys
/// </summary>