Table of Contents

Namespace Whim

Classes

ActivateAdjacentWorkspaceTransform
Activates the next (or previous) workspace in the given monitor.
ActivateLayoutEngineTransform
Set the active layout engine in the workspace specified by WorkspaceId and Predicate(IContext, Workspace, ILayoutEngine, int).
ActivatePreviouslyActiveLayoutEngineTransform
Activate the previously active layout engine in the workspace specified by WorkspaceId.
ActivateWorkspaceTransform
Activates the given workspace in the active monitor, or the given monitor (if provided).
ActiveLayoutEngineChangedEventArgs
Event for when the active layout engine for a workspace has changed.
AddProxyLayoutEngineTransform
Adds a proxy layout engine to the list of proxy layout engine creators. This does not add the layout engine to any existing workspaces. A proxy layout engine is used by plugins to add layout functionality to all workspaces. This should be used by IPlugins.
AddWindowToWorkspaceTransform
Adds the given Window to the workspace with the given WorkspaceId
AddWorkspaceTransform
Create a workspace with the given Name and layout engines. If this transform is called prior to initialization, then IWorkspace creation is deferred. null is returned by the transform if the workspace creation was deferred.
BaseProxyLayoutEngine
Abstract layout engine, which proxy layout engines should inherit from.
BaseRemoveWorkspaceTransform
Remove a workspace.
BaseWorkspaceTransform
Base transform for a workspace operation. The return value from the store dispatch is whether the workspace has changed.
BaseWorkspaceWindowTransform
Base transform for a window operation in a given workspace, where the window exists in the workspace.
ColorExtensions
Extension methods for Color.
ColumnLayoutEngine
Layout engine that lays out windows in columns.
Command
Supports all classes in the .NET class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all .NET classes; it is the root of the type hierarchy.
ConfigLoaderException
Exception thrown by Whim when loading the config.
CycleLayoutEngineTransform
Cycle the layout engine for the provided workspace with the given WorkspaceId
DefaultFilteredWindows
Defaults for various IFilterManagers.
DeferWindowPosHandle
Sets the position of multiple windows at once, using SetWindowPos(HWND, HWND, int, int, int, int, SET_WINDOW_POS_FLAGS).
This internally calls SetWindowPos(HWND, HWND, int, int, int, int, SET_WINDOW_POS_FLAGS) to set the position of the window. Each call occurs in parallel.
When the system has non-100% scaled monitors, for some reason we need to set the window position twice, otherwise windows will have incorrect dimensions.
DeferWindowPosState
The positioning state of a window.
DirectionHelpers
Extension methods for the Direction enum.
DoWorkspaceLayoutTransform
Queues a layout (sets all the window positions) for the workspace specified by WorkspaceId. This requires that the workspace has a matching monitor in the IMonitorSector.
Engine
Exposes the Whim IContext.
ExitEventArgs
Event arguments for the Exiting event.
FileSinkConfig
SinkConfig with custom functionality for the file sink.
FirefoxWindowProcessor
Custom logic to handle events from Firefox.
FocusLayoutEngine
A layout engine that displays one window at a time. FocusLayoutEngine supports showing windows as:
  • Normal: The focused window is shown in its normal size.
  • Maximized: The focused window is shown in its maximized size.
  • Minimized: The focused window can be hidden. Additionally, all non-focused windows are shown as minimized (minimized to the taskbar).

The SwapWindowInDirection(Direction, IWindow) and FocusWindowInDirection(Direction, IWindow) behaviour are a bit different to other layout engines:
FocusMonitorDesktopTransform
Focus the Windows desktop's window.
FocusWindowInDirectionTransform
Focus the window adjacent to the given WindowHandle in the workspace with the given WorkspaceId in the provided Direction. Returns whether the active layout engine changed.
FocusWindowTransform
Queue focus for the provided WindowHandle. If WindowHandle is default, focus the last focused window. If there is no last focused window, focus the monitor's desktop. The focus operation will be performed after the transform sequence is executed.
FocusWorkspaceTransform
Focus the last focused window in the workspace with given WorkspaceId. NOTE: This does not update the workspace's LastFocusedWindow. Instead, it queues a call to Focus(). If there is no last focused window, the monitor's desktop will be focused.
InitializeWindowException
Exception thrown when a window could not be initialized.
IntExtensions
Extension methods for int.
KeyModifiersExtensions
Extension methods for KeyModifiers.
LayoutAllActiveWorkspacesTransform
Triggers all active workspaces to update their layout. Active workspaces are those that are visible on a monitor.
LayoutEngineCustomAction
The payload for a custom action for a layout engine to perform, via PerformCustomAction<T>(LayoutEngineCustomAction<T>).
LayoutEngineCustomActionTransform
Performs a custom action in a layout engine.
LayoutEngineCustomActionWithPayloadTransform<T>
Performs a custom action in a layout engine.
LayoutEngineCustomAction<T>
The payload for a custom action for a layout engine to perform, via PerformCustomAction<T>(LayoutEngineCustomAction<T>).
LayoutEngineIdentity
The unique identity of a layout engine within a IWorkspace.
Logger
Logger used throughout Whim. It is accessed according to the singleton pattern.
LoggerConfig
The user-configurable settings for Logger.
MergeWorkspaceWindowsTransform
Merges the windows of the given SourceWorkspaceId into the given TargetWorkspaceId.
MonitorHelpers
Helper methods for converting between the coordinate systems.
MonitorWorkspaceChangedEventArgs
Event arguments for when the workspace shown on a monitor changes.
MonitorsChangedEventArgs
Represents the change in monitors of Windows and Whim. This may include monitors were added or removed, or monitors that were unchanged but had some properties changed, like their position, resolution, work area, or scaling factor.
MoveWindowEdgesInDirectionTransform
Moves the given WindowHandle by the given PixelsDeltas.
MoveWindowToAdjacentMonitorTransform
Moves the window with WindowHandle to the next (or previous) monitor.
MoveWindowToAdjacentWorkspaceTransform
Moves the window with handle WindowHandle to the next (or previous) workspace.
MoveWindowToMonitorIndexTransform
Move the window with WindowHandle to the monitor at MonitorIndex.
MoveWindowToMonitorTransform
Moves the window with WindowHandle to the monitor with MonitorHandle.
MoveWindowToPointTransform
Moves the window with WindowHandle to the given Point.
MoveWindowToWorkspaceTransform
Moves the window with WindowHandle to the given TargetWorkspaceId.
Picker<TResult>
Description of how to retrieve data from the Store. The implementing record should be populated with the payload.
Pickers
Pure pickers for IMapSector.
PluginCommands
Supports all classes in the .NET class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all .NET classes; it is the root of the type hierarchy.
PointHelpers
Extension methods for the IPoint<T> interface.
Point<T>
Supports all classes in the .NET class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all .NET classes; it is the root of the type hierarchy.
Rectangle
Helpers for IRectangle<T>.
RectangleExtensions
Extension methods for IRectangle<T>.
Rectangle<T>
Supports all classes in the .NET class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all .NET classes; it is the root of the type hierarchy.
RemoveWindowFromWorkspaceTransform
Remove the window for the given Window from the workspace with the given WorkspaceId.
RemoveWorkspaceByIdTransform
Removes the first workspace which matches the Id.
RemoveWorkspaceByNameTransform
Removes the first workspace which matches the Name.
RootSector
Supports all classes in the .NET class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all .NET classes; it is the root of the type hierarchy.
RouteEventArgs
Describes how an IWindow has been routed between workspaces. This implicitly describes hypothetical `WindowAdded` and `WindowRemoved` events for a workspace.
SaveStateTransform
A transform that saves Whim's state.
SetCreateLayoutEnginesTransform
Set the CreateLayoutEngines.
SetLayoutEngineFromIndexTransform
Set the active layout engine in the workspace specified by WorkspaceId and LayoutEngineIndex.
SetLayoutEngineFromNameTransform
Set the active layout engine in the workspace specified by WorkspaceId and LayoutEngineName.
SetWorkspaceNameTransform
Set the name of the workspace with the provided Id to Name.
SinkConfig
Default configuration options for a logging sink.
SwapWindowInDirectionTransform
Swap the WindowHandle in the provided Direction for the workspace with the given WorkspaceId
SwapWorkspaceWithAdjacentMonitorTransform
Swap the workspace with WorkspaceId with the adjacent monitor.
Transform
Operation describing how to update the state of the IStore. The implementing record should be populated with the payload.
Transform<TResult>
Operation describing how to update the state of the IStore. The implementing record should be populated with the payload.
TransparentWindowController
Controller for making a window transparent.
UIElementExtensions
Extension methods for UIElement.
Unit
An empty type for DotNext.Result<T>s which don't return anything.
VeryObservableCollection<T>
A custom ObservableCollection<T> which also subscribes to changes in its children. A normal ObservableCollection<T> only raises events when the collection itself changes.
VirtualKeyExtensions
Extension methods for VIRTUAL_KEY.
WhimException
The standard exception for Whim errors.
WindowAddedEventArgs
Event arguments for when a IWindow has been added to Whim and Windows.
WindowBackdropConfig
WinUI supports different backdrops/materials, depending on the OS version. To see the different materials available, see https://learn.microsoft.com/en-us/windows/apps/design/signature-experiences/materials. The different materials support differing levels and style of transparency. This config lets you specify which backdrop to use for a given Whim window.
WindowBackdropController
Manages the system backdrop for a Window.
WindowEventArgs
Base event arguments for when a IWindow has had something happen to it.
WindowExtensions
Extensions for Window.
WindowFocusedEventArgs
Event arguments for when the focused window has changed. When Window is null, then Whim does not track the focused window.
WindowMessageMonitorEventArgs
Args for a WindowMessageMonitor event.
WindowMessageMonitorEventArgsPayload
Represents a message passed to a window procedure.
WindowMinimizeEndedEventArgs
Event arguments for when a IWindow is no longer minimized.
WindowMinimizeStartedEventArgs
Event arguments for when a IWindow has been minimized.
WindowMoveEndedEventArgs
Event arguments for when a IWindow has stopped moving.
WindowMoveEventArgs
Base event arguments for when a IWindow has been moved.
WindowMoveStartedEventArgs
Event arguments for when a IWindow has started moving.
WindowMovedEventArgs
Event arguments for when a window has changed location, shape, or size.
WindowPosition
A window's position at a point in time.
WindowRemovedEventArgs
Event arguments for when a IWindow has been removed from Whim and Windows.
WindowState
Supports all classes in the .NET class hierarchy and provides low-level services to derived classes. This is the ultimate base class of all .NET classes; it is the root of the type hierarchy.
Workspace
Workspaces contain windows to be organized by layout engines.
WorkspaceAddedEventArgs
Event arguments for when a workspace has been added.
WorkspaceEventArgs
Event arguments for when an argument is added or removed from the workspace manager.
WorkspaceLayoutCompletedEventArgs
Event arguments for when a workspace has completed performing a layout.
WorkspaceLayoutStartedEventArgs
Event arguments for when a workspace has started performing a layout.
WorkspaceRemovedEventArgs
Event arguments for when a workspace has been removed.
WorkspaceRenamedEventArgs
Event arguments for when a workspace has been renamed.

Structs

Keybind

Interfaces

IButler
The butler is responsible for using the IWorkspaceManager and IMonitorManager to handle events from the IWindowManager to update the assignment of IWindows to IWorkspaces, and IWorkspaces to IMonitors.
IButlerChores
Manage the movement of IWindows between IWorkspaces and IMonitors.
IButlerPantry
The Butler's pantry is responsible for mapping IWindows to IWorkspaces to IMonitors.
ICommand
A command is a function with a unique identifier.
ICommandManager
ICommandManager is responsible for managing all the commands for Whim.
IContext
This is the core of Whim.
IContext consists of managers which contain and control Whim's state, and functionality.
IContext also contains other associated state and functionality, like the Logger.
IFileManager
Manages files and directories for Whim.
IFilterManager
Manages filters for IWindows.
IKeybind
A keybinding. This should be hashable.
IKeybindManager
IKeybindManager is responsible for managing all the keybinds for Whim.
ILayoutEngine
Layout engines dictate how windows are laid out.
IMapSector
The sector containing window-workspace and workspace-monitor mappings.
IMapSectorEvents
Events relating to the mapping of IWindows to IWorkspaces and IWorkspaces to IMonitors.
IMonitor
Represents a single display device.
IMonitorManager
The manager for IMonitors.
IMonitorSector
The sector containing monitors.
IMonitorSectorEvents
The events raised by the IMonitorSector.
INativeManager
Manager for interacting with native Windows APIs.
INotificationManager
The notification manager allows the sending of toast notifications to the user.
IPlugin
A plugin for Whim.
IPluginCommands
The commands and keybinds for a plugin.
IPluginManager
Manager for the loaded plugins.
IPoint<T>
A point in the coordinate space.
IRectangle<T>
A rectangle, where the origin is in the top-left of the primary monitor.
IResourceManager
Interface to load package and user ResourceDictionary.
IRootSector
The root sector of the state. This is read-only.
IRouterManager
Manages routers for IWindows.
IStore
Contains the state of Whim's monitors, windows, and workspaces.
IWindow
Represents a single window.
IWindowManager
The manager for IWindows.
IWindowProcessor
Represents a processor for events from Windows. This is for windows with non-standard behavior. For example, Firefox will try reset the window position on startup. The FirefoxWindowProcessor will ignore these events.
IWindowSector
The sector containing windows.
IWindowSectorEvents
Events for the IWindowSector
IWindowState
The state of a window.
IWorkspace
Workspaces contain windows to be organized by layout engines.
IWorkspaceManager
Container responsible for the creation and removal of IWorkspaces. Events for workspaces are exposed here. To activate a workspace, or change the mapping between workspaces and monitors, use the IButler.
IWorkspaceSector
The sector containing workspaces.
IWorkspaceSectorEvents
The events raised by the IWorkspaceSector.

Enums

BackdropType
The available backdrop types - see https://learn.microsoft.com/en-us/windows/apps/design/signature-experiences/materials..
Direction
A direction in the coordinate space.
ExitReason
The possible reasons why Whim has been shut down.
FileSinkConfigRollingInterval
The file sink's rolling interval for the file logs.
KeyModifiers
The available key modifiers.
LogLevel
The log levels available to Logger.
RouterOptions
Describes how to route windows when they are added to Whim.
UncaughtExceptionHandling
Ways to handle uncaught exceptions.
WindowProcessorResult
The result of processing a window event by a IWindowProcessor.
WindowSize
The size of a window.

Delegates

CreateLeafLayoutEngine
Creates a non-proxy ILayoutEngine with the given identity.
DoConfig
Applies the user's config to the IContext.
Filter
Delegate which is called to filter a IWindow.
ProxyLayoutEngineCreator
This delegate takes an in a layout engine and returns it with a wrapper layout engine. The wrapper layout engine provides additional functionality, but still utilises the underlying layout engine.
PurePicker<TResult>
Description of how to retrieve data from the Store. Pure pickers can be implemented in terms of pure functions.
Router
Delegate which is called to route a IWindow.