The old shutdown code did not correctly exit but instead just
continuously called the QApplication notify function until it
SEGFAULTed. This led to crashes whenever SteamVR was shut down. Users
with Windows Error Reporting turned on would get a 100+ MB crashdump
file along with increased shutdown time for SteamVR.
For clarity the shutdown functions should probably be collected in a
single function.
clang-tidy is currently set up with errors for all checks that do not
warn. This is to prevent regressing the repo.
Gradually these warnings should be removed in order to prevent further
regresssions in warnings that do not have many occurences.
`tval.tv_usec` is a (signed) `long` and `ssPrec->m_offset` is an
`unsigned int`. Clang warns upon realizing that we are attempting to
divide a signed `long` with an `unsigned int`.
Casting the `long` to `unsigned long` makes both operands `unsigned` and
allows for auto conversion to `size_t`.
The `size_t` cast is to make it apparent that the cast is correct.
The IPolicyConfig file is a third party file and since it describes a
third party API we can't make changes to it. Adding it via the system
includes disables warnings on most compilers.
The _var was chosen because it conflicts with the naming convention in
the rest of the file.
Fixing the error was easier than getting GCC to ignore errors in one
file, or using a pragma to mute the warning.
Introducing a GCC pragma would require disabling C4068 on MSVC (unknown
pragma).
Encapsulating compiler specific options in a separate file
makes it easier to reason about what is going to happen on
a specific qmake call.
clang-msvc and msvc are separate because they don't support
exactly the same compiler switches.
There are still many elements remaining from the old input system.
These have not been removed due to time constraints. They should
be removed as part of a general clean up process.
The PTT profile buttons have been replaced with a text telling users
to use the SteamVR bindings interface. This is for people who don't
read changelogs.
The old system used the old OpenVR input system which is
incompatible with the new IVRInput.
This change broke the AccessbilityTabController, but
that is to be removed because the functionality can be
found elsewhere.
The 5.11.2 version has been removed from AppVeyor leading to all builds
failing due to lack of Qt install. The 5.12 folder is symlinked to the
newest Qt version, preventing the need for changes during small updates
and preventing failures when versions have been removed.
This solves
https://github.com/OpenVR-Advanced-Settings/OpenVR-AdvancedSettings/issues/53
.svg files were not treated as binary which means they were spamming up
the diff log.
Bash files were not being pulled with LF line endings, which means they
couldn't be run by Windows Subsystem for Linux.
Bash files were renamed .sh to easily allow them to be recognized by
both .gitattributes and humans.
Taken from https://github.com/alexkaratarakis/gitattributes.
All images have been moved to the /img/ folder in order to fully
separate qml from images. The .qrc file allows qml to use the images by
appending the qrc:/ prefix before the abstract path to the image.
Note that the .qrc file is also check at compile time, which further
enhances the confidence the lack of errors.
Some of the images are not used in the QML, but instead directly passed
through to the OpenVR API. These have not been added to the .qrc file.
The QRC file is a platform independant way of referring to resource
files. It allows the program to access resources in an abstract way
instead of the direct file path.
This is the first step towards moving all files to the new system.
Elements work like they've always done, this just moves the commonly
used components away from the global namespace.
The qmldir file still does something, although at this point it is
unknown exactly how it's used and whether or not it could be changed to
simplify imports across the block.
The popups have been moved inside the scope of the ProfileButtons. Since
the popups open based on the location of their parents, they are
currently opening underneath where they used to open.
Since the profiles and ptt settings do not work anyway, this is seen as
acceptable.
The PttControllerConfigDialog was not used by anything else, hence it
makes sense to move it into a more limited scope.
The PttControllerConfigDialog file itself is only used by AudioPage and
AccessibilityPage. Since the AccessibilityPage is going to be removed
the PttControllerConfigDialog should be moved into the audio_page
folder.
The PTT controls were grouped in a ColumnLayout with the microphone
device and volume controls. Grouping the microphone controls together
mirrors what is done with the mirror device controls.
The mirror selector is a sub part of the volume slider. This could be
changed in the future to have the slider be a top level component that
contains both selector and slider.
For now the way to go is to have the mirror device and audio device
selectors as different components instead of trying to inherit from a
single component and filling in the necessary function calls.
This is because some function calls are nested inside other components
and would be very messy. Perhaps in future commits the selectors will
inherit from a single parent.
Setting the default audio profile has also been moved into the separate
dialog box. This should not change anything and no bugs were found in
testing, however I have no idea how objects in QML/C++ are initialized
or if our current codebase is created with this in mind.
The openvr/bin/linux64 directory also contained a file called empty.dir.
This has been removed because it was an empty file.
VREvent_Scroll has been renamed to VREvent_ScrollSmooth, and not
VREvent_ScrollDescrete because the second one will keep scrolling after
having let go of the scroll (tested on Vive controller). This feels
weird when done on a Vive controller and so the first option was chosen.
The first option also feels more like the old system.
Even though the version jump is weird this is the next release.
This removes the massively indented logic in the previous version.
Notice that individual components will still be imported with an
import "utilities_page". Therefore anything except UtilitiesPage.qml
should be in a separate folder.
The QML at the moment is a giant mess. Moving pages into individual
folders and properly abstracting the sub components of the pages will
allow for much easier development and better error messages.
Additionally it will prevent polluting the global namespace. Really, all
the reasons for avoiding globally available values and using
abstractions in regular programming also come into play here.