Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions docs/Net11Api_04_KioskManagerComponent.HighRiskReview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Net11Api_04 KioskModeManager High-Risk Review

This document records review findings that require an API or lifecycle design decision before they can be patched safely.

## FullScreen requested state and actual state differ

`KioskModeManager.FullScreen` currently returns `true` when fullscreen has been requested but no target form is available. `FullScreenChanged`, however, is raised only when the resolved form actually enters or exits fullscreen. This creates two observable state models:

- The property reports requested state through `_pendingFullScreen || _isFullScreen`.
- The event reports actual window state through changes to `_isFullScreen`.

Consequently, setting `FullScreen = true` without a resolved form changes the property without raising the event. When a form later becomes available, the event is raised even though the property value remains `true`.

Before changing this behavior, decide whether `FullScreen` represents requested state or actual window state. The decision must cover:

- initialization and delayed parenting;
- missing, replaced, reparented, and disposed container controls;
- event ordering and two-way data binding;
- `ToggleFullScreen` behavior while a request is pending;
- disposal and failed fullscreen transitions;
- compatibility for applications already observing the property or event.

Tests should define the complete transition matrix for requested, pending, entered, exited, reparented, and disposed states.
2 changes: 1 addition & 1 deletion src/BuildAssist/BuildAssist.msbuildproj
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

<!-- Work out VS installation path, so we can find MSBuild.exe -->
<Exec
Command="vswhere.exe -latest -prerelease -property installationPath -requires Microsoft.Component.MSBuild"
Command='"$(VSWherePath)\vswhere.exe" -latest -prerelease -property installationPath -requires Microsoft.Component.MSBuild'
WorkingDirectory="$(VSWherePath)"
EchoOff="true"
ConsoleToMsBuild="true"
Expand Down
3 changes: 3 additions & 0 deletions src/System.Windows.Forms.Primitives/src/NativeMethods.txt
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,9 @@ PD_RESULT_*
PostQuitMessage
PostQuitMessage
PostThreadMessage
PowerCreateRequest
PowerClearRequest
PowerSetRequest
PRF_*
PROGRESS_CLASS
PROPERTYKEY
Expand Down
25 changes: 25 additions & 0 deletions src/System.Windows.Forms/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -109,3 +109,28 @@ virtual System.Windows.Forms.Control.OnParentVisualStylesModeChanged(System.Even
virtual System.Windows.Forms.Control.OnVisualStylesModeChanged(System.EventArgs! e) -> void
virtual System.Windows.Forms.Control.VisualStylesMode.get -> System.Windows.Forms.VisualStylesMode
virtual System.Windows.Forms.Control.VisualStylesMode.set -> void
System.Windows.Forms.KioskModeManager
System.Windows.Forms.KioskModeManager.AlwaysOn.get -> bool
System.Windows.Forms.KioskModeManager.AlwaysOn.set -> void
System.Windows.Forms.KioskModeManager.ContainerControl.get -> System.Windows.Forms.ContainerControl?
System.Windows.Forms.KioskModeManager.ContainerControl.set -> void
System.Windows.Forms.KioskModeManager.ContainerControlChanged -> System.EventHandler?
override System.Windows.Forms.KioskModeManager.Dispose(bool disposing) -> void
System.Windows.Forms.KioskModeManager.EscapeExitsFullScreen.get -> bool
System.Windows.Forms.KioskModeManager.EscapeExitsFullScreen.set -> void
System.Windows.Forms.KioskModeManager.FullScreen.get -> bool
System.Windows.Forms.KioskModeManager.FullScreen.set -> void
System.Windows.Forms.KioskModeManager.FullScreenChanged -> System.EventHandler?
System.Windows.Forms.KioskModeManager.KioskModeManager() -> void
System.Windows.Forms.KioskModeManager.KioskModeManager(System.ComponentModel.IContainer! container) -> void
System.Windows.Forms.KioskModeManager.MousePointerAutoHideDelay.get -> int
System.Windows.Forms.KioskModeManager.MousePointerAutoHideDelay.set -> void
virtual System.Windows.Forms.KioskModeManager.OnContainerControlChanged(System.EventArgs! e) -> void
virtual System.Windows.Forms.KioskModeManager.OnFullScreenChanged(System.EventArgs! e) -> void
override System.Windows.Forms.KioskModeManager.Site.get -> System.ComponentModel.ISite?
override System.Windows.Forms.KioskModeManager.Site.set -> void
System.Windows.Forms.KioskModeManager.ToggleFullScreen() -> void
System.Windows.Forms.KioskModeManager.ToggleFullScreenKeys.get -> System.Windows.Forms.Keys
System.Windows.Forms.KioskModeManager.ToggleFullScreenKeys.set -> void
System.Windows.Forms.KioskModeManager.TopMostInFullScreen.get -> bool
System.Windows.Forms.KioskModeManager.TopMostInFullScreen.set -> void
32 changes: 31 additions & 1 deletion src/System.Windows.Forms/Resources/SR.resx
Original file line number Diff line number Diff line change
Expand Up @@ -2691,6 +2691,36 @@ To replace this default dialog please handle the DataError event.</value>
<data name="DescriptionImageList" xml:space="preserve">
<value>Manages a collection of images that are typically used by other controls such as ListView, TreeView, or ToolStrip.</value>
</data>
<data name="DescriptionKioskModeManager" xml:space="preserve">
<value>Manages common fullscreen, input, cursor, and power behavior for kiosk-style WinForms applications.</value>
</data>
<data name="KioskModeManagerAlwaysOnDescr" xml:space="preserve">
<value>Indicates whether Windows should keep the display and system awake while this component is active.</value>
</data>
<data name="KioskModeManagerContainerControlDescr" xml:space="preserve">
<value>The container whose containing form is controlled by the kiosk mode manager.</value>
</data>
<data name="KioskModeManagerContainerControlChangedDescr" xml:space="preserve">
<value>Occurs when the ContainerControl property value changes.</value>
</data>
<data name="KioskModeManagerEscapeExitsFullScreenDescr" xml:space="preserve">
<value>Indicates whether pressing Escape exits fullscreen mode.</value>
</data>
<data name="KioskModeManagerFullScreenDescr" xml:space="preserve">
<value>Gets or sets a value indicating whether the resolved form is currently fullscreen.</value>
</data>
<data name="KioskModeManagerFullScreenChangedDescr" xml:space="preserve">
<value>Occurs when the fullscreen state changes.</value>
</data>
<data name="KioskModeManagerMousePointerAutoHideDelayDescr" xml:space="preserve">
<value>The delay, in milliseconds, before the mouse pointer is hidden while fullscreen. A value of 0 disables automatic pointer hiding.</value>
</data>
<data name="KioskModeManagerToggleFullScreenKeysDescr" xml:space="preserve">
<value>The key combination that toggles between fullscreen and restored mode.</value>
</data>
<data name="KioskModeManagerTopMostInFullScreenDescr" xml:space="preserve">
<value>Indicates whether the form is topmost while fullscreen.</value>
</data>
<data name="DescriptionLabel" xml:space="preserve">
<value>Provides run-time information or descriptive text for a control.</value>
</data>
Expand Down Expand Up @@ -7075,4 +7105,4 @@ Stack trace where the illegal operation occurred was:
<data name="FormScreenCaptureModeRequiresTopLevel" xml:space="preserve">
<value>The FormScreenCaptureMode property can only be changed on top-level Forms with their TopLevel property set to true.</value>
</data>
</root>
</root>
50 changes: 50 additions & 0 deletions src/System.Windows.Forms/Resources/xlf/SR.cs.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

50 changes: 50 additions & 0 deletions src/System.Windows.Forms/Resources/xlf/SR.de.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

50 changes: 50 additions & 0 deletions src/System.Windows.Forms/Resources/xlf/SR.es.xlf

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading