mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Merge branch 'dev' into velopack
This commit is contained in:
commit
d12e756ded
20 changed files with 275 additions and 151 deletions
|
|
@ -32,12 +32,12 @@ automations:
|
||||||
args:
|
args:
|
||||||
comment: |
|
comment: |
|
||||||
This PR is {{ changes.ratio }}% new code.
|
This PR is {{ changes.ratio }}% new code.
|
||||||
# Post a comment that request changes for a PR that contains a TODO statement.
|
# Post a comment notifying that the PR contains a TODO statement.
|
||||||
review_todo_comments:
|
review_todo_comments:
|
||||||
if:
|
if:
|
||||||
- {{ source.diff.files | matchDiffLines(regex=r/^[+].*(TODO)|(todo)/) | some }}
|
- {{ source.diff.files | matchDiffLines(regex=r/^[+].*\b(TODO|todo)\b/) | some }}
|
||||||
run:
|
run:
|
||||||
- action: request-changes@v1
|
- action: add-comment@v1
|
||||||
args:
|
args:
|
||||||
comment: |
|
comment: |
|
||||||
This PR contains a TODO statement. Please check to see if they should be removed.
|
This PR contains a TODO statement. Please check to see if they should be removed.
|
||||||
|
|
@ -76,4 +76,4 @@ changes:
|
||||||
|
|
||||||
has:
|
has:
|
||||||
screenshot_link: {{ pr.description | includes(regex=r/!\[.*\]\(.*(jpg|svg|png|gif|psd).*\)/) }}
|
screenshot_link: {{ pr.description | includes(regex=r/!\[.*\]\(.*(jpg|svg|png|gif|psd).*\)/) }}
|
||||||
image_uploaded: {{ pr.description | includes(regex=r/<img.*src.*(jpg|svg|png|gif|psd).*>/) }}
|
image_uploaded: {{ pr.description | includes(regex=r/<img.*src.*(jpg|svg|png|gif|psd).*>/) }}
|
||||||
|
|
|
||||||
|
|
@ -54,11 +54,10 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Droplex" Version="1.7.0" />
|
<PackageReference Include="Droplex" Version="1.7.0" />
|
||||||
<PackageReference Include="FSharp.Core" Version="7.0.401" />
|
<PackageReference Include="FSharp.Core" Version="8.0.300" />
|
||||||
<PackageReference Include="Meziantou.Framework.Win32.Jobs" Version="3.2.1" />
|
<PackageReference Include="Meziantou.Framework.Win32.Jobs" Version="3.4.0" />
|
||||||
<PackageReference Include="StreamJsonRpc" Version="2.17.11" />
|
|
||||||
<PackageReference Include="Velopack" Version="0.0.359" />
|
|
||||||
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
|
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
|
||||||
|
<PackageReference Include="StreamJsonRpc" Version="2.17.11" />
|
||||||
<PackageReference Include="Velopack" Version="0.0.359" />
|
<PackageReference Include="Velopack" Version="0.0.359" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,13 +49,13 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Ben.Demystifier" Version="0.4.1" />
|
<PackageReference Include="Ben.Demystifier" Version="0.4.1" />
|
||||||
<PackageReference Include="BitFaster.Caching" Version="2.5.0" />
|
<PackageReference Include="BitFaster.Caching" Version="2.5.1" />
|
||||||
<PackageReference Include="Fody" Version="6.5.5">
|
<PackageReference Include="Fody" Version="6.5.5">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="MemoryPack" Version="1.21.1" />
|
<PackageReference Include="MemoryPack" Version="1.21.1" />
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Threading" Version="17.7.30" />
|
<PackageReference Include="Microsoft.VisualStudio.Threading" Version="17.10.48" />
|
||||||
<PackageReference Include="NLog" Version="4.7.10" />
|
<PackageReference Include="NLog" Version="4.7.10" />
|
||||||
<PackageReference Include="PropertyChanged.Fody" Version="3.4.0" />
|
<PackageReference Include="PropertyChanged.Fody" Version="3.4.0" />
|
||||||
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
|
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
|
||||||
|
|
|
||||||
46
Flow.Launcher.Infrastructure/UserSettings/Point2D.cs
Normal file
46
Flow.Launcher.Infrastructure/UserSettings/Point2D.cs
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Flow.Launcher.Infrastructure.UserSettings;
|
||||||
|
|
||||||
|
public record struct Point2D(double X, double Y)
|
||||||
|
{
|
||||||
|
public static implicit operator Point2D((double X, double Y) point)
|
||||||
|
{
|
||||||
|
return new Point2D(point.X, point.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Point2D operator +(Point2D point1, Point2D point2)
|
||||||
|
{
|
||||||
|
return new Point2D(point1.X + point2.X, point1.Y + point2.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Point2D operator -(Point2D point1, Point2D point2)
|
||||||
|
{
|
||||||
|
return new Point2D(point1.X - point2.X, point1.Y - point2.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Point2D operator *(Point2D point, double scalar)
|
||||||
|
{
|
||||||
|
return new Point2D(point.X * scalar, point.Y * scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Point2D operator /(Point2D point, double scalar)
|
||||||
|
{
|
||||||
|
return new Point2D(point.X / scalar, point.Y / scalar);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Point2D operator /(Point2D point1, Point2D point2)
|
||||||
|
{
|
||||||
|
return new Point2D(point1.X / point2.X, point1.Y / point2.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Point2D operator *(Point2D point1, Point2D point2)
|
||||||
|
{
|
||||||
|
return new Point2D(point1.X * point2.X, point1.Y * point2.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Point2D Clamp(Point2D min, Point2D max)
|
||||||
|
{
|
||||||
|
return new Point2D(Math.Clamp(X, min.X, max.X), Math.Clamp(Y, min.Y, max.Y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -205,8 +205,10 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
||||||
|
|
||||||
public bool AutoUpdates { get; set; } = false;
|
public bool AutoUpdates { get; set; } = false;
|
||||||
|
|
||||||
public double WindowLeft { get; set; }
|
|
||||||
public double WindowTop { get; set; }
|
public Point2D WindowPosition { get; set; }
|
||||||
|
public Point2D PreviousScreen { get; set; }
|
||||||
|
public Point2D PreviousDpi { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Custom left position on selected monitor
|
/// Custom left position on selected monitor
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -178,8 +178,8 @@
|
||||||
<system:String x:Key="AnimationSpeedCustom">Personnalisé</system:String>
|
<system:String x:Key="AnimationSpeedCustom">Personnalisé</system:String>
|
||||||
<system:String x:Key="Clock">Heure</system:String>
|
<system:String x:Key="Clock">Heure</system:String>
|
||||||
<system:String x:Key="Date">Date</system:String>
|
<system:String x:Key="Date">Date</system:String>
|
||||||
<system:String x:Key="TypeIsDarkToolTip">This theme supports two(light/dark) modes.</system:String>
|
<system:String x:Key="TypeIsDarkToolTip">Ce thème prend en charge deux modes (clair/sombre).</system:String>
|
||||||
<system:String x:Key="TypeHasBlurToolTip">This theme supports Blur Transparent Background.</system:String>
|
<system:String x:Key="TypeHasBlurToolTip">Ce thème prend en charge l'arrière-plan flou et transparent.</system:String>
|
||||||
|
|
||||||
|
|
||||||
<!-- Setting Hotkey -->
|
<!-- Setting Hotkey -->
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
<system:String x:Key="LastQueryPreserved">Ponechať</system:String>
|
<system:String x:Key="LastQueryPreserved">Ponechať</system:String>
|
||||||
<system:String x:Key="LastQuerySelected">Označiť</system:String>
|
<system:String x:Key="LastQuerySelected">Označiť</system:String>
|
||||||
<system:String x:Key="LastQueryEmpty">Vymazať</system:String>
|
<system:String x:Key="LastQueryEmpty">Vymazať</system:String>
|
||||||
<system:String x:Key="KeepMaxResults">Fixed Window Height</system:String>
|
<system:String x:Key="KeepMaxResults">Pevná výška okna</system:String>
|
||||||
<system:String x:Key="KeepMaxResultsToolTip">Výška okna sa nedá nastaviť ťahaním.</system:String>
|
<system:String x:Key="KeepMaxResultsToolTip">Výška okna sa nedá nastaviť ťahaním.</system:String>
|
||||||
<system:String x:Key="maxShowResults">Maximum výsledkov</system:String>
|
<system:String x:Key="maxShowResults">Maximum výsledkov</system:String>
|
||||||
<system:String x:Key="maxShowResultsToolTip">Túto hodnotu môžete rýchlo upraviť aj pomocou klávesových skratiek CTRL + znamienko plus (+) a CTRL + znamienko mínus (-).</system:String>
|
<system:String x:Key="maxShowResultsToolTip">Túto hodnotu môžete rýchlo upraviť aj pomocou klávesových skratiek CTRL + znamienko plus (+) a CTRL + znamienko mínus (-).</system:String>
|
||||||
|
|
@ -146,13 +146,13 @@
|
||||||
<system:String x:Key="SampleSubTitleProgram">Spúšťanie programov ako správca alebo iný používateľ</system:String>
|
<system:String x:Key="SampleSubTitleProgram">Spúšťanie programov ako správca alebo iný používateľ</system:String>
|
||||||
<system:String x:Key="SampleTitleProcessKiller">ProcessKiller</system:String>
|
<system:String x:Key="SampleTitleProcessKiller">ProcessKiller</system:String>
|
||||||
<system:String x:Key="SampleSubTitleProcessKiller">Ukončenie nežiaducich procesov</system:String>
|
<system:String x:Key="SampleSubTitleProcessKiller">Ukončenie nežiaducich procesov</system:String>
|
||||||
<system:String x:Key="SearchBarHeight">Search Bar Height</system:String>
|
<system:String x:Key="SearchBarHeight">Výška vyhľadávacieho panela</system:String>
|
||||||
<system:String x:Key="ItemHeight">Item Height</system:String>
|
<system:String x:Key="ItemHeight">Výška položky</system:String>
|
||||||
<system:String x:Key="queryBoxFont">Písmo vyhľadávacieho poľa</system:String>
|
<system:String x:Key="queryBoxFont">Písmo vyhľadávacieho poľa</system:String>
|
||||||
<system:String x:Key="resultItemFont">Result Title Font</system:String>
|
<system:String x:Key="resultItemFont">Písmo nadpisu výsledku</system:String>
|
||||||
<system:String x:Key="resultSubItemFont">Result Subtitle Font</system:String>
|
<system:String x:Key="resultSubItemFont">Písmo podnadpisu výsledku</system:String>
|
||||||
<system:String x:Key="resetCustomize">Resetovať</system:String>
|
<system:String x:Key="resetCustomize">Resetovať</system:String>
|
||||||
<system:String x:Key="CustomizeToolTip">Customize</system:String>
|
<system:String x:Key="CustomizeToolTip">Prispôsobiť</system:String>
|
||||||
<system:String x:Key="windowMode">Režim okno</system:String>
|
<system:String x:Key="windowMode">Režim okno</system:String>
|
||||||
<system:String x:Key="opacity">Nepriehľadnosť</system:String>
|
<system:String x:Key="opacity">Nepriehľadnosť</system:String>
|
||||||
<system:String x:Key="theme_load_failure_path_not_exists">Motív {0} neexistuje, použije sa predvolený motív</system:String>
|
<system:String x:Key="theme_load_failure_path_not_exists">Motív {0} neexistuje, použije sa predvolený motív</system:String>
|
||||||
|
|
|
||||||
|
|
@ -213,10 +213,10 @@
|
||||||
<system:String x:Key="RunAsAdminHotkey">Chạy với quyền admin</system:String>
|
<system:String x:Key="RunAsAdminHotkey">Chạy với quyền admin</system:String>
|
||||||
<system:String x:Key="RequeryHotkey">Refresh Search Results</system:String>
|
<system:String x:Key="RequeryHotkey">Refresh Search Results</system:String>
|
||||||
<system:String x:Key="ReloadPluginHotkey">Dữ liệu plugin không tải</system:String>
|
<system:String x:Key="ReloadPluginHotkey">Dữ liệu plugin không tải</system:String>
|
||||||
<system:String x:Key="QuickWidthHotkey">Quick Adjust Window Width</system:String>
|
<system:String x:Key="QuickWidthHotkey">Điều chỉnh nhanh độ rộng cửa sổ</system:String>
|
||||||
<system:String x:Key="QuickHeightHotkey">Quick Adjust Window Height</system:String>
|
<system:String x:Key="QuickHeightHotkey">Điều chỉnh nhanh chiều cao cửa sổ</system:String>
|
||||||
<system:String x:Key="ReloadPluginHotkeyToolTip">Use when require plugins to reload and update their existing data.</system:String>
|
<system:String x:Key="ReloadPluginHotkeyToolTip">Sử dụng khi yêu cầu plugin tải lại và cập nhật dữ liệu hiện có của chúng.</system:String>
|
||||||
<system:String x:Key="AdditionalHotkeyToolTip">You can add one more hotkey for this function.</system:String>
|
<system:String x:Key="AdditionalHotkeyToolTip">Bạn có thể thêm một phím nóng nữa cho chức năng này.</system:String>
|
||||||
<system:String x:Key="customQueryHotkey">Phím tắt truy vấn tùy chỉnh</system:String>
|
<system:String x:Key="customQueryHotkey">Phím tắt truy vấn tùy chỉnh</system:String>
|
||||||
<system:String x:Key="customQueryShortcut">Lối tắt truy vấn tùy chỉnh</system:String>
|
<system:String x:Key="customQueryShortcut">Lối tắt truy vấn tùy chỉnh</system:String>
|
||||||
<system:String x:Key="builtinShortcuts">Phím tắt tích hợp</system:String>
|
<system:String x:Key="builtinShortcuts">Phím tắt tích hợp</system:String>
|
||||||
|
|
@ -283,9 +283,9 @@
|
||||||
<system:String x:Key="clearlogfolder">Xóa tệp nhật ký</system:String>
|
<system:String x:Key="clearlogfolder">Xóa tệp nhật ký</system:String>
|
||||||
<system:String x:Key="clearlogfolderMessage">Bạn có chắc chắn muốn xóa tất cả nhật ký không?</system:String>
|
<system:String x:Key="clearlogfolderMessage">Bạn có chắc chắn muốn xóa tất cả nhật ký không?</system:String>
|
||||||
<system:String x:Key="welcomewindow">Wizard</system:String>
|
<system:String x:Key="welcomewindow">Wizard</system:String>
|
||||||
<system:String x:Key="userdatapath">User Data Location</system:String>
|
<system:String x:Key="userdatapath">Vị trí dữ liệu người dùng</system:String>
|
||||||
<system:String x:Key="userdatapathToolTip">User settings and installed plugins are saved in the user data folder. This location may vary depending on whether it's in portable mode or not.</system:String>
|
<system:String x:Key="userdatapathToolTip">Thiết đặt người dùng và plugin đã cài đặt sẽ được lưu trong thư mục dữ liệu người dùng. Vị trí này có thể thay đổi tùy thuộc vào việc nó có ở chế độ di động hay không.</system:String>
|
||||||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
<system:String x:Key="userdatapathButton">Mở thư mục</system:String>
|
||||||
|
|
||||||
<!-- FileManager Setting Dialog -->
|
<!-- FileManager Setting Dialog -->
|
||||||
<system:String x:Key="fileManagerWindow">Chọn trình quản lý tệp</system:String>
|
<system:String x:Key="fileManagerWindow">Chọn trình quản lý tệp</system:String>
|
||||||
|
|
@ -332,7 +332,7 @@
|
||||||
<system:String x:Key="invalidPluginHotkey">Tổ hợp phím plugin không hợp lệ</system:String>
|
<system:String x:Key="invalidPluginHotkey">Tổ hợp phím plugin không hợp lệ</system:String>
|
||||||
<system:String x:Key="update">Cập nhật</system:String>
|
<system:String x:Key="update">Cập nhật</system:String>
|
||||||
<system:String x:Key="hotkeyRegTitle">Binding Hotkey</system:String>
|
<system:String x:Key="hotkeyRegTitle">Binding Hotkey</system:String>
|
||||||
<system:String x:Key="hotkeyUnavailable">Current hotkey is unavailable.</system:String>
|
<system:String x:Key="hotkeyUnavailable">Phím nóng hiện tại không có sẵn.</system:String>
|
||||||
<system:String x:Key="hotkeyUnavailableUneditable">This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.</system:String>
|
<system:String x:Key="hotkeyUnavailableUneditable">This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.</system:String>
|
||||||
<system:String x:Key="hotkeyUnavailableEditable">This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".</system:String>
|
<system:String x:Key="hotkeyUnavailableEditable">This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".</system:String>
|
||||||
<system:String x:Key="hotkeyRegGuide">Press the keys you want to use for this function.</system:String>
|
<system:String x:Key="hotkeyRegGuide">Press the keys you want to use for this function.</system:String>
|
||||||
|
|
@ -429,10 +429,10 @@
|
||||||
<system:String x:Key="HotkeyCtrlIDesc">Mở cửa sổ cài đặt</system:String>
|
<system:String x:Key="HotkeyCtrlIDesc">Mở cửa sổ cài đặt</system:String>
|
||||||
<system:String x:Key="HotkeyF5Desc">Dữ liệu plugin không tải</system:String>
|
<system:String x:Key="HotkeyF5Desc">Dữ liệu plugin không tải</system:String>
|
||||||
|
|
||||||
<system:String x:Key="HotkeySelectFirstResult">Select first result</system:String>
|
<system:String x:Key="HotkeySelectFirstResult">Chọn kết quả đầu tiên</system:String>
|
||||||
<system:String x:Key="HotkeySelectLastResult">Select last result</system:String>
|
<system:String x:Key="HotkeySelectLastResult">Chọn kết quả cuối cùng</system:String>
|
||||||
<system:String x:Key="HotkeyRequery">Run current query again</system:String>
|
<system:String x:Key="HotkeyRequery">Chạy lại truy vấn hiện tại</system:String>
|
||||||
<system:String x:Key="HotkeyOpenResult">Open result</system:String>
|
<system:String x:Key="HotkeyOpenResult">Mở kết quả</system:String>
|
||||||
<system:String x:Key="HotkeyOpenResultN">Open result #{0}</system:String>
|
<system:String x:Key="HotkeyOpenResultN">Open result #{0}</system:String>
|
||||||
|
|
||||||
<system:String x:Key="RecommendWeather">Thời Tiết</system:String>
|
<system:String x:Key="RecommendWeather">Thời Tiết</system:String>
|
||||||
|
|
@ -445,7 +445,7 @@
|
||||||
<system:String x:Key="RecommendAcronymsDesc">Ghi chú </system:String>
|
<system:String x:Key="RecommendAcronymsDesc">Ghi chú </system:String>
|
||||||
|
|
||||||
<!-- Preview Area -->
|
<!-- Preview Area -->
|
||||||
<system:String x:Key="FileSize">File Size</system:String>
|
<system:String x:Key="FileSize">Kích thước tệp</system:String>
|
||||||
<system:String x:Key="Created">Created</system:String>
|
<system:String x:Key="Created">Đã tạo</system:String>
|
||||||
<system:String x:Key="LastModified">Last Modified</system:String>
|
<system:String x:Key="LastModified">Sửa đổi lần cuối</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -72,11 +72,7 @@ namespace Flow.Launcher
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
DispatcherTimer timer = new DispatcherTimer
|
DispatcherTimer timer = new DispatcherTimer { Interval = new TimeSpan(0, 0, 0, 0, 500), IsEnabled = false };
|
||||||
{
|
|
||||||
Interval = new TimeSpan(0, 0, 0, 0, 500),
|
|
||||||
IsEnabled = false
|
|
||||||
};
|
|
||||||
|
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
|
|
@ -87,6 +83,7 @@ namespace Flow.Launcher
|
||||||
private const int WM_EXITSIZEMOVE = 0x0232;
|
private const int WM_EXITSIZEMOVE = 0x0232;
|
||||||
private int _initialWidth;
|
private int _initialWidth;
|
||||||
private int _initialHeight;
|
private int _initialHeight;
|
||||||
|
|
||||||
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
|
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
|
||||||
{
|
{
|
||||||
if (msg == WM_ENTERSIZEMOVE)
|
if (msg == WM_ENTERSIZEMOVE)
|
||||||
|
|
@ -95,18 +92,22 @@ namespace Flow.Launcher
|
||||||
_initialHeight = (int)Height;
|
_initialHeight = (int)Height;
|
||||||
handled = true;
|
handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (msg == WM_EXITSIZEMOVE)
|
if (msg == WM_EXITSIZEMOVE)
|
||||||
{
|
{
|
||||||
if ( _initialHeight != (int)Height)
|
if (_initialHeight != (int)Height)
|
||||||
{
|
{
|
||||||
OnResizeEnd();
|
OnResizeEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_initialWidth != (int)Width)
|
if (_initialWidth != (int)Width)
|
||||||
{
|
{
|
||||||
FlowMainWindow.SizeToContent = SizeToContent.Height;
|
FlowMainWindow.SizeToContent = SizeToContent.Height;
|
||||||
}
|
}
|
||||||
|
|
||||||
handled = true;
|
handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return IntPtr.Zero;
|
return IntPtr.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -131,6 +132,7 @@ namespace Flow.Launcher
|
||||||
_settings.MaxResultsToShow = Convert.ToInt32(Math.Truncate(itemCount));
|
_settings.MaxResultsToShow = Convert.ToInt32(Math.Truncate(itemCount));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FlowMainWindow.SizeToContent = SizeToContent.Height;
|
FlowMainWindow.SizeToContent = SizeToContent.Height;
|
||||||
_viewModel.MainWindowWidth = Width;
|
_viewModel.MainWindowWidth = Width;
|
||||||
}
|
}
|
||||||
|
|
@ -175,6 +177,7 @@ namespace Flow.Launcher
|
||||||
private void OnInitialized(object sender, EventArgs e)
|
private void OnInitialized(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnLoaded(object sender, RoutedEventArgs _)
|
private void OnLoaded(object sender, RoutedEventArgs _)
|
||||||
{
|
{
|
||||||
// MouseEventHandler
|
// MouseEventHandler
|
||||||
|
|
@ -206,6 +209,7 @@ namespace Flow.Launcher
|
||||||
{
|
{
|
||||||
SoundPlay();
|
SoundPlay();
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdatePosition();
|
UpdatePosition();
|
||||||
PreviewReset();
|
PreviewReset();
|
||||||
Activate();
|
Activate();
|
||||||
|
|
@ -217,7 +221,8 @@ namespace Flow.Launcher
|
||||||
_viewModel.LastQuerySelected = true;
|
_viewModel.LastQuerySelected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_viewModel.ProgressBarVisibility == Visibility.Visible && isProgressBarStoryboardPaused)
|
if (_viewModel.ProgressBarVisibility == Visibility.Visible &&
|
||||||
|
isProgressBarStoryboardPaused)
|
||||||
{
|
{
|
||||||
_progressBarStoryboard.Begin(ProgressBar, true);
|
_progressBarStoryboard.Begin(ProgressBar, true);
|
||||||
isProgressBarStoryboardPaused = false;
|
isProgressBarStoryboardPaused = false;
|
||||||
|
|
@ -258,9 +263,12 @@ namespace Flow.Launcher
|
||||||
MoveQueryTextToEnd();
|
MoveQueryTextToEnd();
|
||||||
_viewModel.QueryTextCursorMovedToEnd = false;
|
_viewModel.QueryTextCursorMovedToEnd = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case nameof(MainViewModel.GameModeStatus):
|
case nameof(MainViewModel.GameModeStatus):
|
||||||
_notifyIcon.Icon = _viewModel.GameModeStatus ? Properties.Resources.gamemode : Properties.Resources.app;
|
_notifyIcon.Icon = _viewModel.GameModeStatus
|
||||||
|
? Properties.Resources.gamemode
|
||||||
|
: Properties.Resources.app;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -278,11 +286,8 @@ namespace Flow.Launcher
|
||||||
case nameof(Settings.Hotkey):
|
case nameof(Settings.Hotkey):
|
||||||
UpdateNotifyIconText();
|
UpdateNotifyIconText();
|
||||||
break;
|
break;
|
||||||
case nameof(Settings.WindowLeft):
|
case nameof(Settings.WindowPosition):
|
||||||
Left = _settings.WindowLeft;
|
(Left, Top) = _settings.WindowPosition;
|
||||||
break;
|
|
||||||
case nameof(Settings.WindowTop):
|
|
||||||
Top = _settings.WindowTop;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -292,8 +297,24 @@ namespace Flow.Launcher
|
||||||
{
|
{
|
||||||
if (_settings.SearchWindowScreen == SearchWindowScreens.RememberLastLaunchLocation)
|
if (_settings.SearchWindowScreen == SearchWindowScreens.RememberLastLaunchLocation)
|
||||||
{
|
{
|
||||||
Top = _settings.WindowTop;
|
var previousScreen = _settings.PreviousScreen;
|
||||||
Left = _settings.WindowLeft;
|
|
||||||
|
var previousDpi = _settings.PreviousDpi;
|
||||||
|
|
||||||
|
_settings.PreviousScreen = (SystemParameters.VirtualScreenWidth, SystemParameters.VirtualScreenHeight);
|
||||||
|
|
||||||
|
var currentDpi = GetDpi();
|
||||||
|
|
||||||
|
if (previousScreen == default ||
|
||||||
|
previousDpi == default ||
|
||||||
|
(previousScreen != (SystemParameters.VirtualScreenWidth, SystemParameters.VirtualScreenHeight) ||
|
||||||
|
previousDpi != currentDpi))
|
||||||
|
{
|
||||||
|
AdjustPositionForResolutionChange();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
(Left, Top) = _settings.WindowPosition;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -306,34 +327,72 @@ namespace Flow.Launcher
|
||||||
break;
|
break;
|
||||||
case SearchWindowAligns.CenterTop:
|
case SearchWindowAligns.CenterTop:
|
||||||
Left = HorizonCenter(screen);
|
Left = HorizonCenter(screen);
|
||||||
Top = 10;
|
Top = VerticalTop(screen);
|
||||||
break;
|
break;
|
||||||
case SearchWindowAligns.LeftTop:
|
case SearchWindowAligns.LeftTop:
|
||||||
Left = HorizonLeft(screen);
|
Left = HorizonLeft(screen);
|
||||||
Top = 10;
|
Top = VerticalTop(screen);
|
||||||
break;
|
break;
|
||||||
case SearchWindowAligns.RightTop:
|
case SearchWindowAligns.RightTop:
|
||||||
Left = HorizonRight(screen);
|
Left = HorizonRight(screen);
|
||||||
Top = 10;
|
Top = VerticalTop(screen);
|
||||||
break;
|
break;
|
||||||
case SearchWindowAligns.Custom:
|
case SearchWindowAligns.Custom:
|
||||||
Left = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X + _settings.CustomWindowLeft, 0).X;
|
var customLeft = WindowsInteropHelper.TransformPixelsToDIP(this,
|
||||||
Top = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y + _settings.CustomWindowTop).Y;
|
screen.WorkingArea.X + _settings.CustomWindowLeft, 0);
|
||||||
|
var customTop = WindowsInteropHelper.TransformPixelsToDIP(this, 0,
|
||||||
|
screen.WorkingArea.Y + _settings.CustomWindowTop);
|
||||||
|
Left = customLeft.X;
|
||||||
|
Top = customTop.Y;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AdjustPositionForResolutionChange()
|
||||||
|
{
|
||||||
|
Point2D screenBound = (SystemParameters.VirtualScreenWidth, SystemParameters.VirtualScreenHeight);
|
||||||
|
|
||||||
|
var currentDpi = GetDpi();
|
||||||
|
|
||||||
|
var previousPosition = _settings.WindowPosition;
|
||||||
|
|
||||||
|
var ratio = screenBound / _settings.PreviousScreen;
|
||||||
|
|
||||||
|
var dpiRatio = currentDpi / _settings.PreviousDpi;
|
||||||
|
|
||||||
|
var newPosition = previousPosition * ratio * dpiRatio;
|
||||||
|
|
||||||
|
Point2D minPosition = (SystemParameters.VirtualScreenLeft, SystemParameters.VirtualScreenTop);
|
||||||
|
|
||||||
|
var maxPosition = minPosition + screenBound - (ActualWidth, ActualHeight);
|
||||||
|
|
||||||
|
(Left, Top) = newPosition.Clamp(minPosition, maxPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Point2D GetDpi()
|
||||||
|
{
|
||||||
|
PresentationSource source = PresentationSource.FromVisual(this);
|
||||||
|
Point2D point = (96, 96);
|
||||||
|
if (source is { CompositionTarget: not null })
|
||||||
|
{
|
||||||
|
Matrix m = source.CompositionTarget.TransformToDevice;
|
||||||
|
point.X = 96 * m.M11;
|
||||||
|
point.Y = 96 * m.M22;
|
||||||
|
}
|
||||||
|
|
||||||
|
return point;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateNotifyIconText()
|
private void UpdateNotifyIconText()
|
||||||
{
|
{
|
||||||
var menu = contextMenu;
|
var menu = contextMenu;
|
||||||
((MenuItem)menu.Items[0]).Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen") + " (" + _settings.Hotkey + ")";
|
((MenuItem)menu.Items[0]).Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen") +
|
||||||
|
" (" + _settings.Hotkey + ")";
|
||||||
((MenuItem)menu.Items[1]).Header = InternationalizationManager.Instance.GetTranslation("GameMode");
|
((MenuItem)menu.Items[1]).Header = InternationalizationManager.Instance.GetTranslation("GameMode");
|
||||||
((MenuItem)menu.Items[2]).Header = InternationalizationManager.Instance.GetTranslation("PositionReset");
|
((MenuItem)menu.Items[2]).Header = InternationalizationManager.Instance.GetTranslation("PositionReset");
|
||||||
((MenuItem)menu.Items[3]).Header = InternationalizationManager.Instance.GetTranslation("iconTraySettings");
|
((MenuItem)menu.Items[3]).Header = InternationalizationManager.Instance.GetTranslation("iconTraySettings");
|
||||||
((MenuItem)menu.Items[4]).Header = InternationalizationManager.Instance.GetTranslation("iconTrayExit");
|
((MenuItem)menu.Items[4]).Header = InternationalizationManager.Instance.GetTranslation("iconTrayExit");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitializeNotifyIcon()
|
private void InitializeNotifyIcon()
|
||||||
|
|
@ -345,50 +404,34 @@ namespace Flow.Launcher
|
||||||
Visible = !_settings.HideNotifyIcon
|
Visible = !_settings.HideNotifyIcon
|
||||||
};
|
};
|
||||||
|
|
||||||
var openIcon = new FontIcon
|
var openIcon = new FontIcon { Glyph = "\ue71e" };
|
||||||
{
|
|
||||||
Glyph = "\ue71e"
|
|
||||||
};
|
|
||||||
var open = new MenuItem
|
var open = new MenuItem
|
||||||
{
|
{
|
||||||
Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen") + " (" + _settings.Hotkey + ")",
|
Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen") + " (" +
|
||||||
|
_settings.Hotkey + ")",
|
||||||
Icon = openIcon
|
Icon = openIcon
|
||||||
};
|
};
|
||||||
var gamemodeIcon = new FontIcon
|
var gamemodeIcon = new FontIcon { Glyph = "\ue7fc" };
|
||||||
{
|
|
||||||
Glyph = "\ue7fc"
|
|
||||||
};
|
|
||||||
var gamemode = new MenuItem
|
var gamemode = new MenuItem
|
||||||
{
|
{
|
||||||
Header = InternationalizationManager.Instance.GetTranslation("GameMode"),
|
Header = InternationalizationManager.Instance.GetTranslation("GameMode"), Icon = gamemodeIcon
|
||||||
Icon = gamemodeIcon
|
|
||||||
};
|
|
||||||
var positionresetIcon = new FontIcon
|
|
||||||
{
|
|
||||||
Glyph = "\ue73f"
|
|
||||||
};
|
};
|
||||||
|
var positionresetIcon = new FontIcon { Glyph = "\ue73f" };
|
||||||
var positionreset = new MenuItem
|
var positionreset = new MenuItem
|
||||||
{
|
{
|
||||||
Header = InternationalizationManager.Instance.GetTranslation("PositionReset"),
|
Header = InternationalizationManager.Instance.GetTranslation("PositionReset"),
|
||||||
Icon = positionresetIcon
|
Icon = positionresetIcon
|
||||||
};
|
};
|
||||||
var settingsIcon = new FontIcon
|
var settingsIcon = new FontIcon { Glyph = "\ue713" };
|
||||||
{
|
|
||||||
Glyph = "\ue713"
|
|
||||||
};
|
|
||||||
var settings = new MenuItem
|
var settings = new MenuItem
|
||||||
{
|
{
|
||||||
Header = InternationalizationManager.Instance.GetTranslation("iconTraySettings"),
|
Header = InternationalizationManager.Instance.GetTranslation("iconTraySettings"),
|
||||||
Icon = settingsIcon
|
Icon = settingsIcon
|
||||||
};
|
};
|
||||||
var exitIcon = new FontIcon
|
var exitIcon = new FontIcon { Glyph = "\ue7e8" };
|
||||||
{
|
|
||||||
Glyph = "\ue7e8"
|
|
||||||
};
|
|
||||||
var exit = new MenuItem
|
var exit = new MenuItem
|
||||||
{
|
{
|
||||||
Header = InternationalizationManager.Instance.GetTranslation("iconTrayExit"),
|
Header = InternationalizationManager.Instance.GetTranslation("iconTrayExit"), Icon = exitIcon
|
||||||
Icon = exitIcon
|
|
||||||
};
|
};
|
||||||
|
|
||||||
open.Click += (o, e) => _viewModel.ToggleFlowLauncher();
|
open.Click += (o, e) => _viewModel.ToggleFlowLauncher();
|
||||||
|
|
@ -421,6 +464,7 @@ namespace Flow.Launcher
|
||||||
{
|
{
|
||||||
_ = SetForegroundWindow(hwndSource.Handle);
|
_ = SetForegroundWindow(hwndSource.Handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
contextMenu.Focus();
|
contextMenu.Focus();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -454,8 +498,10 @@ namespace Flow.Launcher
|
||||||
|
|
||||||
private void InitProgressbarAnimation()
|
private void InitProgressbarAnimation()
|
||||||
{
|
{
|
||||||
var da = new DoubleAnimation(ProgressBar.X2, ActualWidth + 100, new Duration(new TimeSpan(0, 0, 0, 0, 1600)));
|
var da = new DoubleAnimation(ProgressBar.X2, ActualWidth + 100,
|
||||||
var da1 = new DoubleAnimation(ProgressBar.X1, ActualWidth + 0, new Duration(new TimeSpan(0, 0, 0, 0, 1600)));
|
new Duration(new TimeSpan(0, 0, 0, 0, 1600)));
|
||||||
|
var da1 = new DoubleAnimation(ProgressBar.X1, ActualWidth + 0,
|
||||||
|
new Duration(new TimeSpan(0, 0, 0, 0, 1600)));
|
||||||
Storyboard.SetTargetProperty(da, new PropertyPath("(Line.X2)"));
|
Storyboard.SetTargetProperty(da, new PropertyPath("(Line.X2)"));
|
||||||
Storyboard.SetTargetProperty(da1, new PropertyPath("(Line.X1)"));
|
Storyboard.SetTargetProperty(da1, new PropertyPath("(Line.X1)"));
|
||||||
_progressBarStoryboard.Children.Add(da);
|
_progressBarStoryboard.Children.Add(da);
|
||||||
|
|
@ -557,14 +603,14 @@ namespace Flow.Launcher
|
||||||
iconsb.Children.Add(IconOpacity);
|
iconsb.Children.Add(IconOpacity);
|
||||||
|
|
||||||
windowsb.Completed += (_, _) => _animating = false;
|
windowsb.Completed += (_, _) => _animating = false;
|
||||||
_settings.WindowLeft = Left;
|
_settings.WindowPosition = (Left, Top);
|
||||||
_settings.WindowTop = Top;
|
|
||||||
isArrowKeyPressed = false;
|
isArrowKeyPressed = false;
|
||||||
|
|
||||||
if (QueryTextBox.Text.Length == 0)
|
if (QueryTextBox.Text.Length == 0)
|
||||||
{
|
{
|
||||||
clocksb.Begin(ClockPanel);
|
clocksb.Begin(ClockPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
iconsb.Begin(SearchIcon);
|
iconsb.Begin(SearchIcon);
|
||||||
windowsb.Begin(FlowMainWindow);
|
windowsb.Begin(FlowMainWindow);
|
||||||
}
|
}
|
||||||
|
|
@ -618,8 +664,7 @@ namespace Flow.Launcher
|
||||||
|
|
||||||
private async void OnDeactivated(object sender, EventArgs e)
|
private async void OnDeactivated(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
_settings.WindowLeft = Left;
|
_settings.WindowPosition = (Left, Top);
|
||||||
_settings.WindowTop = Top;
|
|
||||||
//This condition stops extra hide call when animator is on,
|
//This condition stops extra hide call when animator is on,
|
||||||
// which causes the toggling to occasional hide instead of show.
|
// which causes the toggling to occasional hide instead of show.
|
||||||
if (_viewModel.MainWindowVisibilityStatus)
|
if (_viewModel.MainWindowVisibilityStatus)
|
||||||
|
|
@ -650,8 +695,7 @@ namespace Flow.Launcher
|
||||||
return;
|
return;
|
||||||
if (_settings.SearchWindowScreen == SearchWindowScreens.RememberLastLaunchLocation)
|
if (_settings.SearchWindowScreen == SearchWindowScreens.RememberLastLaunchLocation)
|
||||||
{
|
{
|
||||||
_settings.WindowLeft = Left;
|
_settings.WindowPosition = (Left, Top);
|
||||||
_settings.WindowTop = Top;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -671,7 +715,7 @@ namespace Flow.Launcher
|
||||||
public Screen SelectedScreen()
|
public Screen SelectedScreen()
|
||||||
{
|
{
|
||||||
Screen screen = null;
|
Screen screen = null;
|
||||||
switch(_settings.SearchWindowScreen)
|
switch (_settings.SearchWindowScreen)
|
||||||
{
|
{
|
||||||
case SearchWindowScreens.Cursor:
|
case SearchWindowScreens.Cursor:
|
||||||
screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
||||||
|
|
@ -693,6 +737,7 @@ namespace Flow.Launcher
|
||||||
screen = Screen.AllScreens[0];
|
screen = Screen.AllScreens[0];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return screen ?? Screen.AllScreens[0];
|
return screen ?? Screen.AllScreens[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -727,6 +772,13 @@ namespace Flow.Launcher
|
||||||
return left;
|
return left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double VerticalTop(Screen screen)
|
||||||
|
{
|
||||||
|
var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y);
|
||||||
|
var top = dip1.Y + 10;
|
||||||
|
return top;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Register up and down key
|
/// Register up and down key
|
||||||
/// todo: any way to put this in xaml ?
|
/// todo: any way to put this in xaml ?
|
||||||
|
|
@ -762,6 +814,7 @@ namespace Flow.Launcher
|
||||||
_viewModel.LoadContextMenuCommand.Execute(null);
|
_viewModel.LoadContextMenuCommand.Execute(null);
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case Key.Left:
|
case Key.Left:
|
||||||
if (!_viewModel.SelectedIsFromQueryResults() && QueryTextBox.CaretIndex == 0)
|
if (!_viewModel.SelectedIsFromQueryResults() && QueryTextBox.CaretIndex == 0)
|
||||||
|
|
@ -769,6 +822,7 @@ namespace Flow.Launcher
|
||||||
_viewModel.EscCommand.Execute(null);
|
_viewModel.EscCommand.Execute(null);
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case Key.Back:
|
case Key.Back:
|
||||||
if (specialKeyState.CtrlPressed)
|
if (specialKeyState.CtrlPressed)
|
||||||
|
|
@ -787,12 +841,13 @@ namespace Flow.Launcher
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnKeyUp(object sender, KeyEventArgs e)
|
private void OnKeyUp(object sender, KeyEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.Key == Key.Up || e.Key == Key.Down)
|
if (e.Key == Key.Up || e.Key == Key.Down)
|
||||||
|
|
@ -808,6 +863,7 @@ namespace Flow.Launcher
|
||||||
e.Handled = true; // Ignore Mouse Hover when press Arrowkeys
|
e.Handled = true; // Ignore Mouse Hover when press Arrowkeys
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PreviewReset()
|
public void PreviewReset()
|
||||||
{
|
{
|
||||||
_viewModel.ResetPreview();
|
_viewModel.ResetPreview();
|
||||||
|
|
|
||||||
|
|
@ -112,23 +112,45 @@ public partial class SettingWindow
|
||||||
{
|
{
|
||||||
if (_settings.SettingWindowTop == null || _settings.SettingWindowLeft == null)
|
if (_settings.SettingWindowTop == null || _settings.SettingWindowLeft == null)
|
||||||
{
|
{
|
||||||
Top = WindowTop();
|
SetWindowPosition(WindowTop(), WindowLeft());
|
||||||
Left = WindowLeft();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Top = _settings.SettingWindowTop.Value;
|
double left = _settings.SettingWindowLeft.Value;
|
||||||
Left = _settings.SettingWindowLeft.Value;
|
double top = _settings.SettingWindowTop.Value;
|
||||||
|
AdjustWindowPosition(ref top, ref left);
|
||||||
|
SetWindowPosition(top, left);
|
||||||
}
|
}
|
||||||
WindowState = _settings.SettingWindowState;
|
WindowState = _settings.SettingWindowState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetWindowPosition(double top, double left)
|
||||||
|
{
|
||||||
|
// Ensure window does not exceed screen boundaries
|
||||||
|
top = Math.Max(top, SystemParameters.VirtualScreenTop);
|
||||||
|
left = Math.Max(left, SystemParameters.VirtualScreenLeft);
|
||||||
|
top = Math.Min(top, SystemParameters.VirtualScreenHeight - ActualHeight);
|
||||||
|
left = Math.Min(left, SystemParameters.VirtualScreenWidth - ActualWidth);
|
||||||
|
|
||||||
|
Top = top;
|
||||||
|
Left = left;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AdjustWindowPosition(ref double top, ref double left)
|
||||||
|
{
|
||||||
|
// Adjust window position if it exceeds screen boundaries
|
||||||
|
top = Math.Max(top, SystemParameters.VirtualScreenTop);
|
||||||
|
left = Math.Max(left, SystemParameters.VirtualScreenLeft);
|
||||||
|
top = Math.Min(top, SystemParameters.VirtualScreenHeight - ActualHeight);
|
||||||
|
left = Math.Min(left, SystemParameters.VirtualScreenWidth - ActualWidth);
|
||||||
|
}
|
||||||
|
|
||||||
private double WindowLeft()
|
private double WindowLeft()
|
||||||
{
|
{
|
||||||
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
||||||
var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X, 0);
|
var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X, 0);
|
||||||
var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0);
|
var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0);
|
||||||
var left = (dip2.X - this.ActualWidth) / 2 + dip1.X;
|
var left = (dip2.X - ActualWidth) / 2 + dip1.X;
|
||||||
return left;
|
return left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -137,7 +159,7 @@ public partial class SettingWindow
|
||||||
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
|
||||||
var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y);
|
var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y);
|
||||||
var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height);
|
var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height);
|
||||||
var top = (dip2.Y - this.ActualHeight) / 2 + dip1.Y - 20;
|
var top = (dip2.Y - ActualHeight) / 2 + dip1.Y;
|
||||||
return top;
|
return top;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -547,20 +547,20 @@ namespace Flow.Launcher.ViewModel
|
||||||
private void IncreaseWidth()
|
private void IncreaseWidth()
|
||||||
{
|
{
|
||||||
Settings.WindowSize += 100;
|
Settings.WindowSize += 100;
|
||||||
Settings.WindowLeft -= 50;
|
Settings.WindowPosition -= (50, 0);
|
||||||
OnPropertyChanged(nameof(MainWindowWidth));
|
OnPropertyChanged(nameof(MainWindowWidth));
|
||||||
}
|
}
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
private void DecreaseWidth()
|
private void DecreaseWidth()
|
||||||
{
|
{
|
||||||
if (MainWindowWidth - 100 < 400 || Settings.WindowSize == 400)
|
if (MainWindowWidth - 100 < 400 || Math.Abs(Settings.WindowSize - 400) < 0.01)
|
||||||
{
|
{
|
||||||
Settings.WindowSize = 400;
|
Settings.WindowSize = 400;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Settings.WindowLeft += 50;
|
Settings.WindowPosition += (50, 0);
|
||||||
Settings.WindowSize -= 100;
|
Settings.WindowSize -= 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.3" />
|
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.6" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -151,8 +151,8 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search_tips">Il peut être très lent sans index (qui n'est supporté que dans Everything v1.5+).</system:String>
|
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search_tips">Il peut être très lent sans index (qui n'est supporté que dans Everything v1.5+).</system:String>
|
||||||
|
|
||||||
<!-- Native Context Menu -->
|
<!-- Native Context Menu -->
|
||||||
<system:String x:Key="plugin_explorer_native_context_menu_header">Native Context Menu</system:String>
|
<system:String x:Key="plugin_explorer_native_context_menu_header">Menu contextuel natif</system:String>
|
||||||
<system:String x:Key="plugin_explorer_native_context_menu_display_context_menu">Display native context menu (experimental)</system:String>
|
<system:String x:Key="plugin_explorer_native_context_menu_display_context_menu">Afficher le menu contextuel natif (expérimental)</system:String>
|
||||||
<system:String x:Key="plugin_explorer_native_context_menu_include_patterns_guide">Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with').</system:String>
|
<system:String x:Key="plugin_explorer_native_context_menu_include_patterns_guide">Ci-dessous, vous pouvez spécifier les éléments que vous souhaitez inclure dans le menu contextuel. Ils peuvent être partiels ('pen wit') ou complets ('Ouvrir avec').</system:String>
|
||||||
<system:String x:Key="plugin_explorer_native_context_menu_exclude_patterns_guide">Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with')</system:String>
|
<system:String x:Key="plugin_explorer_native_context_menu_exclude_patterns_guide">Vous pouvez spécifier ci-dessous les éléments que vous souhaitez exclure du menu contextuel. Ces éléments peuvent être partiels ('pen wit') ou complets ('Open with').</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -151,8 +151,8 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search_tips">Pode ser muito lento sem índice (que apenas existe em Everything v1.5+)</system:String>
|
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search_tips">Pode ser muito lento sem índice (que apenas existe em Everything v1.5+)</system:String>
|
||||||
|
|
||||||
<!-- Native Context Menu -->
|
<!-- Native Context Menu -->
|
||||||
<system:String x:Key="plugin_explorer_native_context_menu_header">Native Context Menu</system:String>
|
<system:String x:Key="plugin_explorer_native_context_menu_header">Menu de contexto nativo</system:String>
|
||||||
<system:String x:Key="plugin_explorer_native_context_menu_display_context_menu">Display native context menu (experimental)</system:String>
|
<system:String x:Key="plugin_explorer_native_context_menu_display_context_menu">Mostrar menu de contexto nativo (experimental)</system:String>
|
||||||
<system:String x:Key="plugin_explorer_native_context_menu_include_patterns_guide">Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with').</system:String>
|
<system:String x:Key="plugin_explorer_native_context_menu_include_patterns_guide">Aqui pode especificar os itens a incluir no menu de contexto. Podem ser parciais (ex.: 'brir co') ou completos ('Abrir com').</system:String>
|
||||||
<system:String x:Key="plugin_explorer_native_context_menu_exclude_patterns_guide">Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with')</system:String>
|
<system:String x:Key="plugin_explorer_native_context_menu_exclude_patterns_guide">Aqui pode especificar os itens a excluir do menu de contexto. Podem ser parciais (ex.: 'brir co') ou completos ('Abrir com').</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -27,12 +27,12 @@
|
||||||
<system:String x:Key="plugin_explorer_manageactionkeywords_header">Tùy chỉnh từ khóa hành động</system:String>
|
<system:String x:Key="plugin_explorer_manageactionkeywords_header">Tùy chỉnh từ khóa hành động</system:String>
|
||||||
<system:String x:Key="plugin_explorer_quickaccesslinks_header">Liên kết truy cập nhanh</system:String>
|
<system:String x:Key="plugin_explorer_quickaccesslinks_header">Liên kết truy cập nhanh</system:String>
|
||||||
<system:String x:Key="plugin_explorer_everything_setting_header">Cài đặt mọi thứ</system:String>
|
<system:String x:Key="plugin_explorer_everything_setting_header">Cài đặt mọi thứ</system:String>
|
||||||
<system:String x:Key="plugin_explorer_previewpanel_setting_header">Preview Panel</system:String>
|
<system:String x:Key="plugin_explorer_previewpanel_setting_header">Bảng xem trước</system:String>
|
||||||
<system:String x:Key="plugin_explorer_previewpanel_display_file_size_checkbox">Kích thước</system:String>
|
<system:String x:Key="plugin_explorer_previewpanel_display_file_size_checkbox">Kích thước</system:String>
|
||||||
<system:String x:Key="plugin_explorer_previewpanel_display_file_creation_checkbox">Date Created</system:String>
|
<system:String x:Key="plugin_explorer_previewpanel_display_file_creation_checkbox">Date Created</system:String>
|
||||||
<system:String x:Key="plugin_explorer_previewpanel_display_file_modification_checkbox">Date Modified</system:String>
|
<system:String x:Key="plugin_explorer_previewpanel_display_file_modification_checkbox">Date Modified</system:String>
|
||||||
<system:String x:Key="plugin_explorer_previewpanel_file_info_label">Display File Info</system:String>
|
<system:String x:Key="plugin_explorer_previewpanel_file_info_label">Hiển thị thông tin tệp</system:String>
|
||||||
<system:String x:Key="plugin_explorer_previewpanel_date_and_time_format_label">Date and time format</system:String>
|
<system:String x:Key="plugin_explorer_previewpanel_date_and_time_format_label">Định dạng ngày và giờ</system:String>
|
||||||
<system:String x:Key="plugin_explorer_everything_sort_option">Tùy Chọn Sắp Xếp</system:String>
|
<system:String x:Key="plugin_explorer_everything_sort_option">Tùy Chọn Sắp Xếp</system:String>
|
||||||
<system:String x:Key="plugin_explorer_everything_installed_path">Đường dẫn mọi thứ:</system:String>
|
<system:String x:Key="plugin_explorer_everything_installed_path">Đường dẫn mọi thứ:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_launch_hidden">Khởi chạy ẩn</system:String>
|
<system:String x:Key="plugin_explorer_launch_hidden">Khởi chạy ẩn</system:String>
|
||||||
|
|
@ -53,29 +53,29 @@
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Đã bật</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Đã bật</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">Khi bị tắt, Flow sẽ không thực thi tùy chọn tìm kiếm này và sẽ hoàn nguyên về '*' để giải phóng từ khóa hành động</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">Khi bị tắt, Flow sẽ không thực thi tùy chọn tìm kiếm này và sẽ hoàn nguyên về '*' để giải phóng từ khóa hành động</system:String>
|
||||||
<system:String x:Key="plugin_explorer_engine_everything">Tất cả mọi thứ</system:String>
|
<system:String x:Key="plugin_explorer_engine_everything">Tất cả mọi thứ</system:String>
|
||||||
<system:String x:Key="plugin_explorer_engine_windows_index">Windows Index</system:String>
|
<system:String x:Key="plugin_explorer_engine_windows_index">Chỉ mục Windows</system:String>
|
||||||
<system:String x:Key="plugin_explorer_path_enumeration_engine_none">Direct Enumeration</system:String>
|
<system:String x:Key="plugin_explorer_path_enumeration_engine_none">Đếm trực tiếp</system:String>
|
||||||
<system:String x:Key="plugin_explorer_file_editor_path">File Editor Path</system:String>
|
<system:String x:Key="plugin_explorer_file_editor_path">Đường dẫn trình soạn thảo tệp</system:String>
|
||||||
<system:String x:Key="plugin_explorer_folder_editor_path">Folder Editor Path</system:String>
|
<system:String x:Key="plugin_explorer_folder_editor_path">Folder Editor Path</system:String>
|
||||||
|
|
||||||
<system:String x:Key="plugin_explorer_Content_Search_Engine">Content Search Engine</system:String>
|
<system:String x:Key="plugin_explorer_Content_Search_Engine">Công cụ tìm kiếm nội dung</system:String>
|
||||||
<system:String x:Key="plugin_explorer_Directory_Recursive_Search_Engine">Directory Recursive Search Engine</system:String>
|
<system:String x:Key="plugin_explorer_Directory_Recursive_Search_Engine">Directory Recursive Search Engine</system:String>
|
||||||
<system:String x:Key="plugin_explorer_Index_Search_Engine">Index Search Engine</system:String>
|
<system:String x:Key="plugin_explorer_Index_Search_Engine">Công cụ tìm kiếm chỉ mục</system:String>
|
||||||
<system:String x:Key="plugin_explorer_Open_Window_Index_Option">Mở tùy chọn lập chỉ mục Windows</system:String>
|
<system:String x:Key="plugin_explorer_Open_Window_Index_Option">Mở tùy chọn lập chỉ mục Windows</system:String>
|
||||||
|
|
||||||
<!-- Plugin Infos -->
|
<!-- Plugin Infos -->
|
||||||
<system:String x:Key="plugin_explorer_plugin_name">Thư mục </system:String>
|
<system:String x:Key="plugin_explorer_plugin_name">Thư mục </system:String>
|
||||||
<system:String x:Key="plugin_explorer_plugin_description">Find and manage files and folders via Windows Search or Everything</system:String>
|
<system:String x:Key="plugin_explorer_plugin_description">Tìm và quản lý tệp và thư mục thông qua Windows Search hoặc Everything</system:String>
|
||||||
|
|
||||||
<!-- Plugin Tooltip -->
|
<!-- Plugin Tooltip -->
|
||||||
<system:String x:Key="plugin_explorer_plugin_ToolTipOpenDirectory">Ctrl + Enter to open the directory</system:String>
|
<system:String x:Key="plugin_explorer_plugin_ToolTipOpenDirectory">Ctrl + Enter để mở thư mục</system:String>
|
||||||
<system:String x:Key="plugin_explorer_plugin_ToolTipOpenContainingFolder">Ctrl + Enter to open the containing folder</system:String>
|
<system:String x:Key="plugin_explorer_plugin_ToolTipOpenContainingFolder">Ctrl + Enter để mở thư mục chứa</system:String>
|
||||||
|
|
||||||
<!-- Context menu items -->
|
<!-- Context menu items -->
|
||||||
<system:String x:Key="plugin_explorer_copypath">Copy đường dẫn</system:String>
|
<system:String x:Key="plugin_explorer_copypath">Copy đường dẫn</system:String>
|
||||||
<system:String x:Key="plugin_explorer_copypath_subtitle">Copy path of current item to clipboard</system:String>
|
<system:String x:Key="plugin_explorer_copypath_subtitle">Sao chép đường dẫn của mục hiện tại vào clipboard</system:String>
|
||||||
<system:String x:Key="plugin_explorer_copyfilefolder">Sao chép</system:String>
|
<system:String x:Key="plugin_explorer_copyfilefolder">Sao chép</system:String>
|
||||||
<system:String x:Key="plugin_explorer_copyfile_subtitle">Copy current file to clipboard</system:String>
|
<system:String x:Key="plugin_explorer_copyfile_subtitle">Sao chép tập tin hiện tại vào clipboard</system:String>
|
||||||
<system:String x:Key="plugin_explorer_copyfolder_subtitle">Copy current folder to clipboard</system:String>
|
<system:String x:Key="plugin_explorer_copyfolder_subtitle">Copy current folder to clipboard</system:String>
|
||||||
<system:String x:Key="plugin_explorer_deletefilefolder">Xóa</system:String>
|
<system:String x:Key="plugin_explorer_deletefilefolder">Xóa</system:String>
|
||||||
<system:String x:Key="plugin_explorer_deletefile_subtitle">Permanently delete current file</system:String>
|
<system:String x:Key="plugin_explorer_deletefile_subtitle">Permanently delete current file</system:String>
|
||||||
|
|
@ -88,7 +88,7 @@
|
||||||
<system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Open the location that contains current item</system:String>
|
<system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Open the location that contains current item</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openwitheditor">Mở bằng trình chỉnh sửa:</system:String>
|
<system:String x:Key="plugin_explorer_openwitheditor">Mở bằng trình chỉnh sửa:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openwitheditor_error">Failed to open file at {0} with Editor {1} at {2}</system:String>
|
<system:String x:Key="plugin_explorer_openwitheditor_error">Failed to open file at {0} with Editor {1} at {2}</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openwithshell">Open With Shell:</system:String>
|
<system:String x:Key="plugin_explorer_openwithshell">Mở bằng Shell:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openwithshell_error">Failed to open folder {0} with Shell {1} at {2}</system:String>
|
<system:String x:Key="plugin_explorer_openwithshell_error">Failed to open folder {0} with Shell {1} at {2}</system:String>
|
||||||
<system:String x:Key="plugin_explorer_excludefromindexsearch">Loại trừ các thư mục hiện tại và thư mục con khỏi Tìm kiếm chỉ mục</system:String>
|
<system:String x:Key="plugin_explorer_excludefromindexsearch">Loại trừ các thư mục hiện tại và thư mục con khỏi Tìm kiếm chỉ mục</system:String>
|
||||||
<system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">Bị loại trừ khỏi Tìm kiếm chỉ mục</system:String>
|
<system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">Bị loại trừ khỏi Tìm kiếm chỉ mục</system:String>
|
||||||
|
|
|
||||||
|
|
@ -44,10 +44,10 @@
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_program_pls_select_program_source">Hãy chọn một nguồn dữ liệu</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_pls_select_program_source">Hãy chọn một nguồn dữ liệu</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_delete_program_source">Bạn có chắc chắn là muốn xóa các đặt hàng đã chọn?</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_delete_program_source">Bạn có chắc chắn là muốn xóa các đặt hàng đã chọn?</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_duplicate_program_source">Another program source with the same location already exists.</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_duplicate_program_source">Đã tồn tại một nguồn chương trình khác có cùng vị trí.</system:String>
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_program_edit_program_source_title">Program Source</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_edit_program_source_title">Nguồn chương trình</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_edit_program_source_tips">Edit directory and status of this program source.</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_edit_program_source_tips">Chỉnh sửa thư mục và trạng thái của nguồn chương trình này.</system:String>
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_program_update">Cập nhật</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_update">Cập nhật</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_only_index_tip">Program Plugin will only index files with selected suffixes and .url files with selected protocols.</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_only_index_tip">Program Plugin will only index files with selected suffixes and .url files with selected protocols.</system:String>
|
||||||
|
|
@ -73,7 +73,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_program_run_as_administrator">Chạy với quyền quản trị</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_run_as_administrator">Chạy với quyền quản trị</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_open_containing_folder">Mở thư mục chứa</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_open_containing_folder">Mở thư mục chứa</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_disable_program">Vô hiệu hóa chương trình này hiển thị</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_disable_program">Vô hiệu hóa chương trình này hiển thị</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_open_target_folder">Open target folder</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_open_target_folder">Mở thư mục đích</system:String>
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_program_plugin_name">Chương trình</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_plugin_name">Chương trình</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_plugin_description">Tìm kiếm chương trình trong Flow Launcher</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_plugin_description">Tìm kiếm chương trình trong Flow Launcher</system:String>
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_relace_winr">Thay thế Win + R</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_relace_winr">Thay thế Win + R</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_close_cmd_after_press">Close Command Prompt after pressing any key</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_close_cmd_after_press">Đóng Command Prompt sau khi nhấn phím bất kỳ</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_press_any_key_to_close">Press any key to close this window...</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_press_any_key_to_close">Nhấn phím bất kỳ để đóng cửa sổ này...</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_leave_cmd_open">Không đóng dấu nhắc lệnh sau khi thực hiện lệnh</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_leave_cmd_open">Không đóng dấu nhắc lệnh sau khi thực hiện lệnh</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_always_run_as_administrator">Luôn chạy với tư cách quản trị viên</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_always_run_as_administrator">Luôn chạy với tư cách quản trị viên</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_run_as_different_user">Xóa lựa chọn đã chọn</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_run_as_different_user">Xóa lựa chọn đã chọn</system:String>
|
||||||
|
|
|
||||||
|
|
@ -1132,7 +1132,7 @@
|
||||||
<comment>Area Control Panel (legacy settings)</comment>
|
<comment>Area Control Panel (legacy settings)</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PenAndTouch" xml:space="preserve">
|
<data name="PenAndTouch" xml:space="preserve">
|
||||||
<value>Pen and touch</value>
|
<value>Bút và cảm ứng</value>
|
||||||
<comment>Area Control Panel (legacy settings)</comment>
|
<comment>Area Control Panel (legacy settings)</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PenAndWindowsInk" xml:space="preserve">
|
<data name="PenAndWindowsInk" xml:space="preserve">
|
||||||
|
|
@ -1144,15 +1144,15 @@
|
||||||
<comment>Area Control Panel (legacy settings)</comment>
|
<comment>Area Control Panel (legacy settings)</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PerformanceInformationAndTools" xml:space="preserve">
|
<data name="PerformanceInformationAndTools" xml:space="preserve">
|
||||||
<value>Performance information and tools</value>
|
<value>Thông tin hiệu suất và công cụ</value>
|
||||||
<comment>Area Control Panel (legacy settings)</comment>
|
<comment>Area Control Panel (legacy settings)</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PermissionsAndHistory" xml:space="preserve">
|
<data name="PermissionsAndHistory" xml:space="preserve">
|
||||||
<value>Permissions and history</value>
|
<value>Quyền và lịch sử</value>
|
||||||
<comment>Area Cortana</comment>
|
<comment>Area Cortana</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PersonalizationCategory" xml:space="preserve">
|
<data name="PersonalizationCategory" xml:space="preserve">
|
||||||
<value>Personalization (category)</value>
|
<value>Cá nhân hóa (danh mục)</value>
|
||||||
<comment>Area Personalization</comment>
|
<comment>Area Personalization</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Phone" xml:space="preserve">
|
<data name="Phone" xml:space="preserve">
|
||||||
|
|
@ -1160,23 +1160,23 @@
|
||||||
<comment>Area Phone</comment>
|
<comment>Area Phone</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PhoneAndModem" xml:space="preserve">
|
<data name="PhoneAndModem" xml:space="preserve">
|
||||||
<value>Phone and modem</value>
|
<value>Điện thoại và modem</value>
|
||||||
<comment>Area Control Panel (legacy settings)</comment>
|
<comment>Area Control Panel (legacy settings)</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PhoneAndModemOptions" xml:space="preserve">
|
<data name="PhoneAndModemOptions" xml:space="preserve">
|
||||||
<value>Phone and modem - Options</value>
|
<value>Điện thoại và modem - Tùy chọn</value>
|
||||||
<comment>Area Control Panel (legacy settings)</comment>
|
<comment>Area Control Panel (legacy settings)</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PhoneCalls" xml:space="preserve">
|
<data name="PhoneCalls" xml:space="preserve">
|
||||||
<value>Phone calls</value>
|
<value>Cuộc gọi điện thoại</value>
|
||||||
<comment>Area Privacy</comment>
|
<comment>Area Privacy</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="PhoneDefaultApps" xml:space="preserve">
|
<data name="PhoneDefaultApps" xml:space="preserve">
|
||||||
<value>Phone - Default apps</value>
|
<value>Điện thoại - Ứng dụng mặc định</value>
|
||||||
<comment>Area System</comment>
|
<comment>Area System</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Picture" xml:space="preserve">
|
<data name="Picture" xml:space="preserve">
|
||||||
<value>Picture</value>
|
<value>Hình ảnh</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Pictures" xml:space="preserve">
|
<data name="Pictures" xml:space="preserve">
|
||||||
<value>Hình ảnh</value>
|
<value>Hình ảnh</value>
|
||||||
|
|
|
||||||
21
README.md
21
README.md
|
|
@ -330,23 +330,22 @@ Or download the [early access version](https://github.com/Flow-Launcher/Prerelea
|
||||||
<img src="https://user-images.githubusercontent.com/6903107/144858082-8b654daf-60fb-4ee6-89b2-6183b73510d1.png" width="100%">
|
<img src="https://user-images.githubusercontent.com/6903107/144858082-8b654daf-60fb-4ee6-89b2-6183b73510d1.png" width="100%">
|
||||||
|
|
||||||
## Sponsors
|
## Sponsors
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://appwrite.io">
|
<a href="https://coderabbit.ai/">
|
||||||
<img src='https://appwrite.io/assets/logotype/black.svg' width="40%"/>
|
<img src="https://github.com/Flow-Launcher/Flow.Launcher/assets/6903107/7c996d74-0c69-4011-922f-a95ca7e874b0" width="30%" alt="Coderabbit Logo" />
|
||||||
</a>
|
</a>
|
||||||
<br />
|
<br />
|
||||||
|
<br />
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://github.com/TheBestPessimist">
|
<a href="https://github.com/TheBestPessimist">
|
||||||
<img src='https://avatars.githubusercontent.com/u/4482210?v=4' width="10%"/>
|
<img src='https://avatars.githubusercontent.com/u/4482210?v=4' width="10%"/>
|
||||||
</a>
|
</a>
|
||||||
<br />
|
|
||||||
|
|
||||||
</p>
|
</p>
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://appwrite.io">
|
||||||
|
<img src='https://appwrite.io/assets/logotype/white.svg' width="30%" alt="Appwrite Logo" />
|
||||||
|
</a>
|
||||||
|
<br />
|
||||||
|
</p>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/itsonlyfrans"><img src="https://avatars.githubusercontent.com/u/46535667?v=4" width="10%" /></a>
|
<a href="https://github.com/itsonlyfrans"><img src="https://avatars.githubusercontent.com/u/46535667?v=4" width="10%" /></a>
|
||||||
<a href="https://github.com/andreqramos"><img src="https://avatars.githubusercontent.com/u/49326063?v=4" width="10%" /></a>
|
<a href="https://github.com/andreqramos"><img src="https://avatars.githubusercontent.com/u/49326063?v=4" width="10%" /></a>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue