diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt
index 5ee8b605e0..2a5185c79b 100644
--- a/.github/actions/spell-check/expect.txt
+++ b/.github/actions/spell-check/expect.txt
@@ -16,6 +16,7 @@ adaptivecards
ADDSTRING
ADDUNDORECORD
ADifferent
+ADMINS
adml
admx
advfirewall
@@ -169,7 +170,11 @@ cim
CImage
cla
CLASSDC
+classguid
+classmethod
CLASSNOTAVAILABLE
+claude
+CLEARTYPE
clickable
clickonce
clientside
@@ -201,6 +206,7 @@ colorformat
colorhistory
colorhistorylimit
COLORKEY
+colorref
comctl
comdlg
comexp
@@ -218,6 +224,7 @@ CONTEXTHELP
CONTEXTMENUHANDLER
contractversion
CONTROLPARENT
+Convs
cooldown
copiedcolorrepresentation
COPYPEN
@@ -229,6 +236,8 @@ cpcontrols
cph
cplusplus
CPower
+cpptools
+cppvsdbg
cppwinrt
createdump
CREATEPROCESS
@@ -251,6 +260,8 @@ CTLCOLORSTATIC
CURRENTDIR
CURSORINFO
cursorpos
+CURSORSHOWING
+cursorwrap
customaction
CUSTOMACTIONTEST
CVal
@@ -267,12 +278,14 @@ dacl
datareader
datatracker
Dayof
+dbcc
DBID
DBLCLKS
DBLEPSILON
DBPROP
DBPROPIDSET
DBPROPSET
+DBT
DCBA
DCOM
DComposition
@@ -288,6 +301,8 @@ DEFAULTFLAGS
DEFAULTICON
defaultlib
DEFAULTONLY
+DEFAULTSIZE
+defaulttonearest
DEFAULTTONULL
DEFAULTTOPRIMARY
DEFERERASE
@@ -307,11 +322,21 @@ DESKTOPABSOLUTEPARSING
desktopshorcutinstalled
devblogs
devdocs
+devenv
+DEVICEINTERFACE
+devicetype
+DEVINTERFACE
devmgmt
DEVMODE
DEVMODEW
+DEVNODES
devpal
+DEVTYP
+dfx
DIALOGEX
+diffs
+digicert
+DINORMAL
DISABLEASACTIONKEY
DISABLENOSCROLL
diskmgmt
@@ -425,6 +450,12 @@ eyetracker
FANCYZONESDRAWLAYOUTTEST
FANCYZONESEDITOR
FARPROC
+fdw
+fdx
+FErase
+fesf
+FFFF
+Figma
FILEEXPLORER
FILEFLAGS
FILEFLAGSMASK
@@ -441,6 +472,7 @@ FILESYSPATH
Filetime
FILEVERSION
FILTERMODE
+FInc
findfast
FIXEDFILEINFO
FIXEDSYS
@@ -526,11 +558,13 @@ HCRYPTPROV
hcursor
hcwhite
hdc
+HDEVNOTIFY
hdr
hdrop
hdwwiz
Helpline
helptext
+hgdiobj
HGFE
hglobal
hhk
@@ -675,6 +709,7 @@ jfif
jgeosdfsdsgmkedfgdfgdfgbkmhcgcflmi
jjw
jobject
+JOBOBJECT
jpe
jpnime
Jsons
@@ -709,6 +744,7 @@ Ldone
Ldr
LEFTSCROLLBAR
LEFTTEXT
+leftclick
LError
LEVELID
LExit
@@ -740,6 +776,8 @@ lowlevel
LOWORD
lparam
LPBITMAPINFOHEADER
+LPCFHOOKPROC
+lpch
LPCITEMIDLIST
LPCLSID
lpcmi
@@ -757,6 +795,7 @@ LPMONITORINFO
LPOSVERSIONINFOEXW
LPQUERY
lprc
+LPrivate
LPSAFEARRAY
lpstr
lpsz
@@ -803,6 +842,8 @@ MAXSHORTCUTSIZE
maxversiontested
MBM
MBR
+Mbuttondown
+mcp
MDICHILD
MDL
mdtext
@@ -814,7 +855,10 @@ MENUITEMINFO
MENUITEMINFOW
MERGECOPY
MERGEPAINT
+Metacharacter
+metadatamatters
Metadatas
+Metacharacter
metafile
metapackage
mfc
@@ -841,6 +885,7 @@ mmsys
mobileredirect
mockapi
MODALFRAME
+modelcontextprotocol
MODESPRUNED
MONITORENUMPROC
MONITORINFO
@@ -875,7 +920,9 @@ MSLLHOOKSTRUCT
Mso
msrc
msstore
+mstsc
msvcp
+MT
MTND
mtrue
MULTIPLEUSE
@@ -885,6 +932,8 @@ mvvm
MVVMTK
MWBEx
MYICON
+myorg
+myrepo
NAMECHANGE
namespaceanddescendants
nao
@@ -1009,6 +1058,7 @@ openas
opencode
OPENFILENAME
opensource
+openurl
openxmlformats
OPTIMIZEFORINVOKE
ORPHANEDDIALOGTITLE
@@ -1203,6 +1253,7 @@ RAWPATH
rbhid
rclsid
RCZOOMIT
+rdp
RDW
READMODE
READOBJECTS
@@ -1230,6 +1281,7 @@ remappings
REMAPSUCCESSFUL
REMAPUNSUCCESSFUL
Remotable
+remotedesktop
remoteip
Removelnk
renamable
@@ -1260,6 +1312,7 @@ RIGHTSCROLLBAR
riid
RKey
RNumber
+rollups
rop
ROUNDSMALL
rpcrt
@@ -1471,6 +1524,9 @@ SVGIO
svgz
SVSI
SWFO
+swp
+SWPNOSIZE
+SWPNOZORDER
SWRESTORE
symbolrequestprod
SYMCACHE
@@ -1487,6 +1543,8 @@ SYSKEY
syskeydown
SYSKEYUP
SYSLIB
+sysmenu
+systemai
SYSTEMAPPS
SYSTEMMODAL
SYSTEMTIME
@@ -1573,6 +1631,9 @@ UHash
UIA
UIEx
ULONGLONG
+Ultrawide
+UMax
+UMin
ums
uncompilable
UNCPRIORITY
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 4c8d382c7b..6ce7261dfa 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -26,7 +26,7 @@
-
+
diff --git a/src/modules/MouseUtils/CursorWrap/MonitorTopology.cpp b/src/modules/MouseUtils/CursorWrap/MonitorTopology.cpp
index 070e7a3521..0dc14d2168 100644
--- a/src/modules/MouseUtils/CursorWrap/MonitorTopology.cpp
+++ b/src/modules/MouseUtils/CursorWrap/MonitorTopology.cpp
@@ -14,7 +14,6 @@ void MonitorTopology::Initialize(const std::vector& monitors)
Logger::info(L"======= TOPOLOGY INITIALIZATION START =======");
Logger::info(L"Initializing edge-based topology for {} monitors", monitors.size());
-
m_monitors = monitors;
m_outerEdges.clear();
m_edgeMap.clear();
@@ -692,7 +691,6 @@ int MonitorTopology::GetAbsolutePosition(const MonitorEdge& edge, double relativ
return static_cast(result);
}
-
std::vector MonitorTopology::DetectMonitorGaps() const
{
std::vector gaps;
diff --git a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Apps/AppListItem.cs b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Apps/AppListItem.cs
index 426bfcccba..041138c5ce 100644
--- a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Apps/AppListItem.cs
+++ b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.Apps/AppListItem.cs
@@ -19,7 +19,6 @@ public sealed partial class AppListItem : ListItem, IPrecomputedListItem
{
private readonly AppCommand _appCommand;
private readonly AppItem _app;
-
private readonly Lazy> _iconLoadTask;
private readonly Lazy> _detailsLoadTask;
diff --git a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PerformanceMonitor/OnLoadStaticPage.cs b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PerformanceMonitor/OnLoadStaticPage.cs
index 0c4242240e..55929c88cc 100644
--- a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PerformanceMonitor/OnLoadStaticPage.cs
+++ b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PerformanceMonitor/OnLoadStaticPage.cs
@@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.
using System;
+using System.Threading;
using Microsoft.CommandPalette.Extensions;
using Microsoft.CommandPalette.Extensions.Toolkit;
using Windows.Foundation;
@@ -70,6 +71,7 @@ internal abstract partial class OnLoadContentPage : OnLoadBasePage, IContentPage
internal abstract partial class OnLoadBasePage : Page
{
+ private readonly Lock _loadLock = new();
private int _loadCount;
#pragma warning disable CS0067 // The event is never used
@@ -82,22 +84,28 @@ internal abstract partial class OnLoadBasePage : Page
add
{
InternalItemsChanged += value;
- if (_loadCount == 0)
+ lock (_loadLock)
{
- Loaded();
- }
+ if (_loadCount == 0)
+ {
+ Loaded();
+ }
- _loadCount++;
+ _loadCount++;
+ }
}
remove
{
InternalItemsChanged -= value;
- _loadCount--;
- _loadCount = Math.Max(0, _loadCount);
- if (_loadCount == 0)
+ lock (_loadLock)
{
- Unloaded();
+ _loadCount--;
+ _loadCount = Math.Max(0, _loadCount);
+ if (_loadCount == 0)
+ {
+ Unloaded();
+ }
}
}
}
diff --git a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PerformanceMonitor/PerformanceWidgetsPage.cs b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PerformanceMonitor/PerformanceWidgetsPage.cs
index e1250acc82..f82e45bc57 100644
--- a/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PerformanceMonitor/PerformanceWidgetsPage.cs
+++ b/src/modules/cmdpal/ext/Microsoft.CmdPal.Ext.PerformanceMonitor/PerformanceWidgetsPage.cs
@@ -9,6 +9,7 @@ using System.Globalization;
using System.IO;
using System.Text;
using System.Text.Json.Nodes;
+using System.Threading;
using CoreWidgetProvider.Helpers;
using CoreWidgetProvider.Widgets.Enums;
using Microsoft.CmdPal.Common;
@@ -262,17 +263,17 @@ internal abstract partial class WidgetPage : OnLoadContentPage
///
internal virtual void PushActivate()
{
- _loadCount++;
+ Interlocked.Increment(ref _loadCount);
}
internal virtual void PopActivate()
{
- _loadCount--;
+ Interlocked.Decrement(ref _loadCount);
}
private int _loadCount;
- protected bool IsActive => _loadCount > 0;
+ protected bool IsActive => Volatile.Read(ref _loadCount) > 0;
protected override void Loaded()
{