[h2]What's new in Desktop+ 3.0?[/h2]
In short: All-new interface, new and enhanced features, vast improvements on ease of use.
The long version:
[img]{STEAM_CLAN_IMAGE}/39315717/20dd59c6681a52bf8439db20d5e7c1927e421b0d.png[/img]
[b]Floating Settings Windows[/b]
Application settings and overlay properties are now separate windows which can be dragged around or pinned when you need them to stay in place even after the dashboard is closed.
The color scheme has been adjusted to be slightly brighter and buttons are a bit rounded now.
[video mp4=https://i.imgur.com/L82x3Wt.mp4 web= controls=false][/video]
[b]Overlay Bar[/b]
The new to manage overlays. While creation by duplicating an existing overlay is still available, the primary way to create additional overlays is to select the overlay source from the "Add Overlay" menu and drag the new overlay directly where desired.
[img]{STEAM_CLAN_IMAGE}/39315717/b06ab0bbc1e4f555b9e2c392a6020a33be8daae5.png[/img]
[b]Fully Custom Keyboard[/b]
Replacing the SteamVR keyboard and keyboard extension settings to offer something closer to a full PC keyboard.
Layouts and keyboard behavior can configured as needed. Keyboard window can be dragged around and resized too. Pinning keeps it around in-game if needed.
Included keyboard layouts: QWERTY (USA), QWERTZ (Germany), AZERTY (France), AZERTY (Belgium), QWERTY (United Kingdom), QWERTY (Spain), QWERTY (Latin America).
A keyboard layout editor is accessible in desktop mode for further customization.
[video mp4=https://i.imgur.com/RN4q7ao.mp4 web= controls=false][/video]
[b]Keyboard Auto-Visibility[/b]
The VR keyboard now appears automatically when focusing a text input field and disappears again when unfocusing (unless it was manually brought up).
This behavior is experimental for desktop and window overlays as there's no reliable way to detect all input fields (also no way to get notified of actual on-screen-keyboard events to my knowledge).
The current implementation works well enough for applications using native controls or sending the correct assistive events (Chrome does that, so a lot of ground covered there).
Keyboard auto-visibility can be toggled on and off for desktop/window and browser overlays separately to match your preference.
The settings "Focus Window when Pointing at Overlay" and "Focus Game when Laser Pointer leaves Overlay" are now applied to the VR keyboard as well if the keyboard is being shown for a window overlay.
[video mp4=https://i.imgur.com/DOCePZX.mp4 web= controls=false][/video]
[b]Custom Laser Pointer[/b]
The custom laser pointer allows for laser pointer input outside of the dashboard without stealing all input and more control over its behavior.
There are default bindings for common controllers that mirror how the controller is bound for SteamVR laser pointer interaction.
If you have any existing customized controller bindings for Desktop+, you'll have to revert to defaults or configure laser pointer bindings manually.
[b]Window Listing Improvements[/b]
The list of capturable windows is now updated right when window changes happen and overlay names are adjusted if applicable.
Window overlay captures are now automatically restored when a previously captured window appears again.
The window matching algorithm now also uses the window class name for comparisons to reduce the chance of false positives.
[video mp4=https://i.imgur.com/yyaddtx.mp4 web= controls=false][/video]
[b]More Ways to Create Window Overlays[/b]
Window overlays can now be created by pulling a window out by it's title bar (hold left-click down + scroll down).
Alternatively, the Floating UI now also contains a button to create an overlay from the currently focused window in case the window has no title bar or is hard to reach.
[b]Auto-Docking[/b]
Overlays now automatically dock to controllers when dragged close to them.
[video mp4=https://i.imgur.com/Yf5nN1T.mp4 web= controls=false][/video]
[b]Floating UI Redesign[/b]
The Floating UI now appears centered right below overlays, with both main bar and Action-Bar stacked on top of each other. This design works better for overlays acting as the dashboard overlay and properly supports the curvature setting.
There are also additional buttons for specific overlay types, such as the aforementioned button to add the active window as an overlay for desktop overlays, a button to reset cumulative values of the Performance Monitor, and Browser overlay controls.
[b]All Your Windows Are Right Where You Left Them[/b]
What used to be already true for overlays applies to most UI windows as well.
Settings, Overlay Properties and the Desktop+ Keyboard windows can remember their last position, size and what they were open for. By default this is enabled for the keyboard only, but this can be changed in the "Persistent UI" settings.
All UI windows now have two different states they keep track of. One is while the Desktop+ dashboard tab is active, the other when it's not (global state).
This also means if you want the keyboard to be permanently visible in the dashboard tab... just don't hide it manually and it'll be at your service each time you come back.
The keyboard window has some additional behavior, as it's assigned to the overlay it was opened for. Within the dashboard tab it will display relative to the dashboard, but outside of it will now follow the overlay it's assigned to when not pinned.
The keyboard window also follows the assigned overlays visibility in those cases.
Something to keep in mind with all of this is that you can reset the position of each UI window by holding down the respective button that brings them up for 3 seconds (for Overlay Properties, hold the Overlay Bar button with the icon, not the menu).
[video mp4=https://i.imgur.com/QfJS8mW.mp4 web= controls=false][/video]
[b]Overlay Drag Settings[/b]
No need to get tilted about the overlay orientation being slightly off anymore.
It's now possible to force overlays to stay upright when dragging them. Simply tick the box in the Overlay Position Change page of the Overlay Properties window.
There are also two drag settings to allow for more precise overlay arrangements:
Fixed Distance:
Force a fixed distance between the overlays and the user. The distance can set to be based off a sphere or a cylinder shape, as well as optionally be curved and tilted along the chosen shape.
The reference position for this is always based on the headset position, but is only updated when the dashboard is brought up or drag-mode is toggled on if the dashboard is not active. Small changes in position are ignored to allow for a more fixed reference position between adjustments.
Using stick or touchpad to change the distance of an overlay during a drag will adjust the Fixed Distance value while this drag setting is enabled.
Snap Position:
Snaps the position of overlays to a chosen interval. Resizing during a drag also snaps the overlay size to this value. Overlays are snapped based on the position of the center point of the bottom edge.
The Manual Adjustment movement buttons will use the Snap Position value as increment/decrement steps while this drag setting is enabled.
Overlay auto-docking can be disabled here as well.
These settings are global and apply to normal drags, but not to gesture or UI window drags.
[b]Pen Input Simulation[/b]
It is now possible to have the laser pointer simulate a touch pen input device instead of a mouse.
This enables gestures meant for pen inputs, such as click drag scrolling in many applications and holding down left-click to perform a right click.
Some of the pen input behaviors are configurable on the OS-end, so make sure they are enabled if you wish make use of them.
[b]Gaze-based HMD Laser Pointer Input Enhancements[/b]
Now with the option to define global keyboard shortcuts for simulated mouse inputs, as well as to toggle the laser pointer.
With this, inputs on overlays without motion controllers can now also be done while the dashboard is closed.
[img]{STEAM_CLAN_IMAGE}/39315717/b2fdca4bff34350d64dc4dc6fd784633317b1b39.png[/img]
[b]Revamped Actions[/b]
Actions have gotten more powerful as well. They now are composed of individual commands which allows for an action to do multiple things at once.
While the goal is not provide a full macro solution (consider using the Launch Application command to run something like that on demand), it expands the list of possibilities.
The current set of commands covers previously available functionality with a few additional options, as well as new "Set Mouse Position", "Load Overlay Profile" commands.
Built-in actions have been converted to normal actions with their respective commands available to use in any other action.
The new actions are stored in a separate actions.ini file and use unique 64-bit numbering as IDs. This avoids breakage with references across multiple profiles and configs.
[b]Overlay Tags[/b]
Overlay tags replace the previously available overlay group IDs. Instead of just assigning overlays a number, it is now possible to assign one or more tags. These tags are then used for matching specific overlays as action targets.
Tags are always inclusive. Adding multiple tags to an overlay matches it for each of them and adding multiple tags for targeting checks each tag individually for matching targets (i.e. does not require multiple tags on a target).
There's also a set of implicit auto-tags that matches based on the overlay properties.
The "Toggle Overlay Group X Enabled State" SteamVR input actions have been removed.
Their functionality is now covered by binding an action as a global shortcut that has a Show Overlay command set to toggle.
[b]Extended Action Bindings Possibilities[/b]
The Global Shortcuts have been increased to a maximum of 20 (entries still need to be a fixed amount in the binding manifest/Steam backend), while hotkeys are not artificially limited anymore.
[b]Overlay Profiles Changes[/b]
There no longer is any distinction between single and multi-overlay profiles. You can freely choose which overlays to save in a profile and which to add from one.
[b]Application Profiles[/b]
Application profiles allow to automatically load an overlay profile or execute actions when a SteamVR application is launched.
Profiles for non-Steam applications can be configured while they're running. This isn't needed if the said application installed a permanent application manifest in SteamVR... but that's rather rare.
Note that changes to overlays aren't saved automatically while an application profile has loaded an overlay profile (save the associated overlay profile manually instead).
The global overlay layout that has been used before will be restored when the profile's application is closed, however.
An action can be selected for when the profile's application is launched or exited.
[img]{STEAM_CLAN_IMAGE}/39315717/e9efb039be3692a3ce746dc150a54be69b7f4756.png[/img][b]SteamVR Theater Screen Support[/b]
Desktop+ now allows putting overlays on the SteamVR Theater Screen, which was a new addition in SteamVR 2.1.
To do this, take the overlay of your choice and set it to use the new Theater Screen origin.
There can only be one Theater Screen origin overlay active at once.
If another overlay of that origin is set to be visible, it'll hide every other one automatically. Theater Screen origin overlays will also be hidden if the SteamVR Theater Screen is taken over by an overlay of another application or when using the "Close Overlay" button below the screen.
Some overlay properties are controlled by the SteamVR Theater Screen and can't be set by Desktop+, such as overlay position, width, curvature and display mode.
All other properties and functions are supported and should work as expected.
[video mp4=https://i.imgur.com/9AcxBBE.mp4 web= controls=false][/video]
[b]HMD Floor Position Origin can now Spin[/b]
The new additional setting appears when select the HMD Floor Position origin and will make the origin point turn with the HMD.
[b]Browser Overlays[/b]
Desktop+ now comes with web browsing functionality in the form of a new overlay type: The Browser Overlay.
Since not everyone needs a fully-fledged browser in their desktop viewing app and a copy a Chromium is roughly 51x the size of a normal Desktop+ setup, this is an optional component.
Desktop+ Browser overlay support can be installed as a free DLC:
https://store.steampowered.com/app/3263240/Desktop_Browser/
The DLC should be available automatically, but defaults to be unticked. Use the DLC tab in the application's properties on the Steam client to tick and install it.
[b]Revamped Overlay Handling[/b]
This is more of an internal change, but the main result visible to end-users is elimination of all flicker after reordering or deleting overlays.
If you are using a third-party tool that access Desktop+ overlays (e.g. Stop Sign VR), keep in mind that the overlay keys no longer change when the overlay order changes. This means for such tools, Desktop+ Overlay 1 will refer to the same overlay even if you put it next to Overlay 12 in the overlay bar.
The overlay keys do match the order in the overlay bar when a profile gets loaded (or on startup). If you need to get an overlay to be a certain ID for an external tool, save and load an overlay profile.
[b]Overlay Position can now be Locked[/b]
To lessen the amount of accidentally dragging the dashboard overlay (and any others), the position of overlays can now be locked. This can be done by either ticking the checkbox in the Overlay Properties window or long pressing the drag-mode toggle in the Floating UI.
The lock state is temporarily toggled off for the respective overlay when using the Position Change page in the Overlay Properties window, but is restored when leaving that page.
Note that this option only prevents dragging. Position-locked overlays will still move along with their set origin.
[b]Enhanced Logging[/b]
Things go wrong sometimes and troubleshooting can be tough without the right information. Desktop+ has been doing a little bit of logging on fatal errors, but it wasn't really much.
It's long overdue, but it now logs a little bit more.
Logs include some basic VR system info, as well as the detected desktop layout, capture capabilities and information on critical initialization events. Outside of that there's no active logging if no errors occur, so it does not affect overall performance.
Logs are stored in the application install directory, "DesktopPlus.log" and "DesktopPlusUI.log" respectively. If the files are older than 7 days, they'll get renamed with a "_prev" suffix, and after another 7 days the older logs get overwritten.
The files aren't massive so there's no need to worry about them taking up too much space after a while.
It shouldn't need to be said, but the logs stay where they are and aren't sent off anywhere automatically. Please include them when reporting issues if you feel they'll help, though, as the information will save some back and forth.
[b]More Languages[/b]
Desktop+ now officially supports German alongside English.
There's also a Japanese community translation by まるまさ (Marumasa). This one will naturally lag behind a bit once further updates add new text, but it's complete right now. Once again I'd like to thank them for their efforts here!
As a side note, submissions for new community translations are always welcome. Same goes for keyboard layouts.
Neither technically need my hand to be used or distributed, of course, but getting useful things out to everyone is always nice.
[b]Desktop+ 2.x Configuration & Profile Migration[/b]
Old configs and profiles are automatically migrated on first launch.
This is being done in a non-destructive manner. Old config file is renamed and profiles are loaded from a different location, meaning the old files can remain untouched.
Existing legacy actions are converted to the new ones on launch. The previous by default existing custom actions are replaced by new defaults and not converted, but this will fail if they were renamed, so watch out for potential double entries.
This has been prepared for in advance and the renamed config file is loaded in legacy versions (v.2.8+) instead of the normal one if it exists.
Old config and profile files can be removed for good by navigating to [Restore Default Settings] and ticking "Delete Unused Legacy Configuration & Profile Files" (and unticking everything else).
[b]Other Changes[/b]
[list]
[*]There no longer is a special dashboard overlay. All overlays can have the same settings and the first one can now be removed as well.
[*]Overlays no longer store separate positions per origin setting and instead convert them to the new origin when switching.
[*]Cropping can now be toggled off without changing cropping values.
[*]Secondary windows, such as context menus, are now included in window captures if possible (requires Windows 11 24H2)
[*]Added fallback behavior for when focusing a window fails, setting the window as topmost temporarily instead
[*]Added option to select individual elements to reset to the Restore Default Settings prompts
[*]Added strict window matching overlay property
[*]Laser Pointer Override no longer triggers while left mouse button is down, or is caught by sticky desktop corners
[*]Added "Toggle Dashboard (Debug Command)" default action
This SteamVR debug command is well-known at this point, so it only makes sense to include it instead of telling everyone to do it by hand.
Nevertheless it still is a debug command offering functionality that is intentionally not provided to applications via the proper API, so don't expect this to keep working forever.
[*]Added command-line argument allowing external applications to execute an action ("--DoAction [UID]")
Use [Copy UID to Clipboard] on the Actions settings page to obtain the UID for this.
[*]Command-line arguments are now also accepted in GNU-style double-dashed format
[*]Added per-monitor DPI-awareness in desktop mode (previously only had fixed DPI on launch)
[*]Added support for full keyboard control in desktop mode
[*]Added ability to use shift+mouse wheel during desktop mode drag movement to adjust the overlay size
[*]Floating UI now displays the overlay name when the output is invalid (i.e. window capture lost)
[*]Added option of removing the overlay instead of hiding it by long-holding the Floating UI Hide Overlay button
[*]Added option to smooth/stabilize simulated mouse inputs
[*]Updated [url=https://github.com/elvissteinjr/DesktopPlus/blob/master/docs/user_guide.md]User Guide[/url] to cover the new interface
[/list]
[h2]I hate this, what can I do?[/h2]
While definitely not perfect, this is what will be the supported version of Desktop+ going forward.
If you need to go back for troubleshooting purposes, there is now a "Legacy 2.8.x" beta branch you can switch to.
Just be aware there won't be any further updates to that branch.
...well, if a future SteamVR update breaks everything, there might be one to fix that... but that's the most there'll be.
[h2]The Future of Desktop+[/h2]
3.0 is a big milestone which some others have been unable... or unwilling to reach. However, it took a long time to get there. Longer than I'd like to admit.
It's not the end, though. There were some things that have been pushed back in favor of getting feature parity with the 2.x branch done and some ideas I want to experiment on.
That being said, things around PCVR in general have slowed down quite a bit. It's not dead, but it remains a niche.
Desktop+ started as just a better performing desktop dashboard overlay. The built-in solution has long been replaced with something that performs just as good (there's no secret sauce after all), if not better in some scenarios, even if it has some quirks of its own.
In all honesty I don't even use most of the extra features much myself. I just think they're neat and hope someone gets use out of them.
So don't expect fast updates, but it'll stick around for the foreseeable future.