Commit Graph
100 Commits
Author SHA1 Message Date
Richard StanwayandJim b9ef64d4eb deps/media-playback: Check if frame can be played before using it
It's possible that frame_ready is false when this function is called,
which implies that the mp_decode frame field is not valid. However we
dereference the frame by counting the number of audio channels before
checking the value of frame_ready, causing a crash.
2023-04-30 16:23:16 -07:00
Richard StanwayandJim 7ceb39bd56 deps/media-playback: Initialize mutex earlier for cached media
mp_cache_stop / mp_cache_free both try to use the mutex so we need to
make sure it's initialized before calling functions that may fail.
2023-04-29 11:30:01 -07:00
Richard StanwayandJim 1d7c066cf5 UI: Avoid calling libobs functions with null pointers in projectors 2023-04-14 15:50:59 -07:00
Richard StanwayandRyan Foster bacc3ac8ed UI: Add Citrix ICAService to Windows DLL blocklist 2023-04-12 21:32:49 +00:00
Richard StanwayandRodney 9cdd847445 UI: Fix incorrect use of QT_TO_UTF8 in SpeakerLayoutChanged
The string is immediately destroyed after use, so taking a pointer to it
ends up pointing to invalid memory. Let's avoid using QT_TO_UTF8 here.
2023-04-05 21:26:21 +00:00
Richard StanwayandRodney 820fba2d7f UI: Remove unnecessary variables type conversions
Detected by PVS Studio.
2023-04-05 00:40:31 +02:00
Richard StanwayandRodney a781f4a887 UI: Don't std::move main in SetUndoProperties
main is used later in the function, making this undefined behavior.
Though we can move the scene_name string.

Detected by PVS Studio.
2023-04-03 21:47:14 +02:00
Richard StanwayandJim 0f614034ca obs-ffmpeg: Handle mux errors when writing replay buffer
Without this, we could continuously call signal_failure in write_packet,
crashing OBS with a stack overflow with all the error callbacks.
2023-04-01 16:21:37 -07:00
Richard StanwayandRyan Foster d71fa5248f obs-ffmpeg: Fix memory corruption during cleanup
We were calling avio_close on a field that might have held an
AVIOContext. This commit checks which type was allocated so we
can call the appropriate cleanup function.
2023-03-31 13:19:48 -04:00
Richard StanwayandRyan Foster e0f674de86 UI: Add AMD AV1 encoder to simple output mode
Fixes https://github.com/obsproject/obs-studio/issues/8584
2023-03-30 22:04:07 -04:00
Richard StanwayandRyan Foster 9a24b1ad06 UI: Update Windows DLL blocklist
- Add Bandicam
- Add VirtualMotionCapture (unity capture)
- Add HolisticMotionCapture (unity capture)

Fixes https://github.com/obsproject/obs-studio/issues/8552
2023-03-30 21:16:35 -04:00
Richard StanwayandRyan Foster 0ed53ada03 obs-ffmpeg: Use more actionable error messages for hardware encoders
Telling a user to "Check your driver is up to date" is too open to
interpretation, many users will use Windows Update or Device Manager to
check for updates which doesn't help. Instead, let's explicitly tell
them what is most likely to fix the problem.
2023-03-25 22:48:19 -04:00
Richard StanwayandJim 5182368009 UI: Properly handle SIGINT on non-Windows platforms
Running Qt code in a signal handler is not safe. Per the Qt docs, we
instead create a pair of sockets and a QSocketNotifier so that the
signal handler can notify the main thread which can process the exit
request without risk.

Reference: https://doc.qt.io/archives/qt-6.3/unix-signals.html
Reference: https://man7.org/linux/man-pages/man7/signal-safety.7.html
2023-03-25 16:17:02 -07:00
Richard StanwayandJim c9dd230a72 obs-outputs: Explicitly close RTMP socket on send error
Some send() errors are not treated as fatal but the connection gets shut
down regardless. When this happens, librtmp may send an FCunpublish
message which various services interpret as an "end of stream" message
and disable features like "disconnect protection". Instead, let's
explicitly close the socket so that the remote end is aware that this is
an unclean disconnect.
2023-03-18 15:38:54 -07:00
Richard StanwayandJim e305b0f172 UI: Add old Vtuber Maker versions to DLL blocklist
This DLL is based on Unity Capture and suffers from the same deadlock
bug as many similar filters. A fixed version was released on 2023-03-14.
https://store.steampowered.com/news/app/1368950/view/3674412925835790027
2023-03-18 15:23:52 -07:00
Richard Stanway 7e9b071a6c obs-ffmpeg: Add GeForce MX450 variant to unsupported NVENC list 2023-03-18 13:31:42 +01:00
Richard StanwayandRyan Foster 9d4a7f01dd UI: Add DLL blocking functionality for Windows
Adds a NtMapViewOfSection hook which we can use before DLLs are loaded
to decide whether to abort the process. This is useful for blocking
known problematic DLLs that cause crashes. In addition, the PE timestamp
can be checked to block only older DLLs such as older versions of Vtuber
virtual cameras with known deadlock bugs.

A simple counter of each DLL is used for logging purposes. Since DLLs
can be blocked at any time, the output is only logged on exit of OBS.
2023-03-09 14:16:34 -05:00
Richard StanwayandJim 2468268569 libobs: Hold async mutex when calling set_async_texture_size
Calling set_async_texture_size without holding async_mutex is dangerous
as cur_async_frame could be changed / freed by another thread.
2023-03-04 16:10:19 -08:00
Richard StanwayandJim bb7ca3c2c3 UI: Add mutex for writing to the log file
fstream is not thread-safe and the act of writing the string and the
newline are two separate operations which could execute concurrently in
multiple threads, resulting in lines joining together followed by two
newlines. Due to the presence of a static mutex, this also removes
inline on the function.
2023-03-04 15:34:17 -08:00
Richard StanwayandJim 01786a3f11 libobs: Disable encoder scaling request if it matches output size
It was possible to set the encoder to scale the video to the same size
as the output, resulting in unnecessary passes through swscale and
skipping hardware encoders. This was a common user error in Advanced
Output mode where they would tick the rescale box but leave it at the
same resolution as their main output.
2023-03-04 15:14:42 -08:00
Richard Stanway 5b193bca55 libobs/util: Fix typo in curl revocation support check 2023-03-02 19:36:31 +01:00
Richard StanwayandRyan Foster e280fd6cd0 obs-ffmpeg: Add GeForce MX350 variant to unsupported NVENC list 2023-02-17 11:19:08 -05:00
Richard StanwayandRyan Foster 25f01357e6 obs-ffmpeg: Handle NV_ENC_ERR_NO_ENCODE_DEVICE error 2023-02-17 11:19:08 -05:00
Richard StanwayandRyan Foster 7dae8d307c obs-ffmpeg: Restore bad GPU index NVENC error message
FFmpeg wipes priv_data if the encoder fails to start, so we need some
way of knowing if the GPU index was non-zero. This is a bit ugly but the
best way to do it for now.
2023-02-17 11:19:08 -05:00
Richard StanwayandRyan Foster e593335086 obs-ffmpeg: NVENC error logging improvements
This writes the result of nvEncGetLastErrorString to the last encoder
error instead of just the log file. This makes it user-visible, which
should help users diagnose and solve the problem.

Also strips off leading colons from NVENC error strings as these can
look odd given our format string. An example of such an error:

::NV_ENC_TWO_PASS_FULL_RESOLUTION is only supported multipass encoding
on this architecture.
2023-02-17 11:19:08 -05:00
c57a291316 libobs: Convert security product name to UTF-8 for logging
Co-Authored-By: gkvjwa <285794886@qq.com>
2023-02-15 15:36:13 -05:00
Richard StanwayandRyan Foster 0121533e3e win-capture: Convert monitor name to UTF-8 for display
Also increase the buffer size to account for potential wide characters
consuming many bytes.
2023-02-15 15:36:13 -05:00
Richard StanwayandRyan Foster 150124038b libobs-d3d11: Convert monitor name to UTF-8 for logging 2023-02-15 15:36:13 -05:00
Richard StanwayandRyan Foster e9504326f9 UI: Remove unnecessary null checks 2023-02-15 13:40:13 -05:00
Richard StanwayandRyan Foster 2ac43052f9 UI: Fix memory leak of remux window 2023-02-15 13:40:13 -05:00
Richard StanwayandRyan Foster bff7928b50 UI: Avoid division by zero when calculating slider position
Detected by UBSan.
2023-02-15 13:40:13 -05:00
Richard StanwayandRyan Foster 1f278bb18b UI: Set remux entry state before adding to queue
When adding to the queue, this triggers rowCountChanged which then
calls canClearFinished, reading undefined memory for state if this is
not set. The correct state is set immediately after by checkInputPath.

Detected by UBSan.
2023-02-15 13:40:13 -05:00
Richard StanwayandRyan Foster 7178124da9 libobs: Fix typo in function name 2023-02-15 13:40:13 -05:00
Richard StanwayandRyan Foster 7c8acd48a9 UI: Improved implementation for sorting filters menu
Rather than finding the insertion point and iterating the vector for
each item, let's sort it afterwards.
2023-02-15 12:48:08 -05:00
c36583d794 obs-filters: Ensure gain is positive for upward compressor
The gain should be positive for an upward compressor. Initially, the
gain would be zeroe'd below -60 dB to ensure noise is not amplified by
the upward compressor. This created a discontinuity at -60 dB since
just above -60 dB, the audio is boosted by +20 dB (at default
settings). This was fixed in commit 50db097 which decreased smoothly
the gain so that it's 0 dB at -60 dB. However that commit forgot to
limit the gain decrease which was negative below -60 dB.
This is fixed by the current commit.
Additionally initialization allowed -inf gain. We hard limit to positive
gains only as they should be for an upward compressor.
The bugfix was found by R1ch and put in form by pkv.

Co-authored-by: pkv <pkv@obsproject.com>
Signed-off-by: pkv <pkv@obsproject.com>
2023-02-04 02:05:46 -08:00
Richard Stanway e9a401d898 UI: Remove unsupported Windows versions from manifest 2023-02-01 23:00:50 +01:00
Richard Stanway 668775f4f0 obs-ffmpeg: Use gai_strerrorA for error logging on Windows
Avoids wide characters in the format string which cause truncation.
2023-01-27 23:41:07 +01:00
Richard Stanway 062cfcf63d obs-filters: Fix wrong number of arguments to error macro 2023-01-27 23:21:41 +01:00
Richard StanwayandJim 9b1f7d6d21 virtualcam-module: Update filter size immediately when used in OBS
Fixes a crash due to the previous output size being used when scaling
the frame.
2023-01-27 13:03:22 -08:00
Richard StanwayandRyan Foster 5a4283816d obs-filters: Improve NVIDIA effects SDK version checks
- Don't repeatedly query version at runtime in case a user installs the
  SDK while OBS is running
- Restore default DLL search directory
- Don't show outdated SDK message if the SDK is not found
- Protect minimum version macro with brackets
2023-01-24 12:53:15 -05:00
Richard StanwayandJim bf00ef1ea3 obs-outputs: Improvements to Windows interface logging
Now uses GetIfEntry2 which supports 64-bit values for reporting speed, so
10+ gbps adapters are now reported correctly in the log. Also added an
additional log line if the interface error counters are non-zero to possibly
help identify physical faults. Finally the transmit and receive speeds are
logged independently so that asynchronous mediums such as Wi-Fi that might
have good RX but poor TX can be better diagnosed.
2023-01-14 15:48:43 -08:00
Richard StanwayandJim 930c65e7c3 UI: Prevent negative "disk full in" calculation when no output
If the output is paused the average bitrate will be zero, resulting in
infinite time until disk is full and int overflows. Similarly, if no data
has been collected yet, the result will be NaN and undefined behavior.
2023-01-07 15:49:13 -08:00
Richard StanwayandRodney b51773b97b rtmp-services: Specify RTMP_SERVICES_FORMAT_VERSION in package.json 2023-01-06 21:16:21 +01:00
Richard StanwayandJim 20d4bab77a win-capture: Always reset timeout when searching for target display
If the display wasn't found, the timer was not reset, causing the code
to execute on every single tick, stalling the graphics thread and using
excessive CPU.
2023-01-04 23:20:41 -08:00
Richard StanwayandRyan Foster 510f0116a6 cmake: Specify utf-8 for MSVC builds
If there is no BOM, MSVC defaults to the user's code page which can
result in errors if UTF-8 characters are present in the source files.
2022-11-20 17:38:23 -05:00
Richard StanwayandMatt Gajownik 02c6ce8b58 obs-vst: Improve some string handling
- Use constant references where appropriate
- Avoid unnecessary use of strcmp / strlen
- Clear std::string with clear()

Issues detected by PVS Studio.
2022-11-20 17:25:33 +11:00
Richard StanwayandMatt Gajownik fe9c3748ce obs-vst: Use libobs memory allocation functions 2022-11-20 17:25:33 +11:00
Richard Stanway 63c3299a9f obs-outputs: Increase librtmp send timeout to 15 seconds
Based on what we're seeing after the release of OBS 28, six seconds is
too low and causes disconnects instead of dropped frames.
2022-11-11 20:53:10 +01:00
Richard StanwayandJim 7e0ade0df0 UI: Remove support for toggling Aero
We no longer support Windows 7 and Aero (DWM composition) is
permanently enabled for all newer versions, so this code is obsolete.
2022-11-08 20:44:47 -08:00
Richard StanwayandJim da3a81a637 libobs: Remove Aero logging 2022-11-08 20:44:47 -08:00
Richard StanwayandJim c9c20008da UI: Fix always on top not being saved on exit
By the time we reach this part of the code it's too late to be checking
the window flags as the window has already been closed.
2022-11-05 11:06:39 -07:00
Richard StanwayandJim 2ad517e91e obs-filters: Remove unused assignments 2022-10-15 16:17:46 -07:00
Richard StanwayandJim 1d044db4f6 UI: Check return value of ConvertResText before accessing results 2022-10-15 16:17:46 -07:00
Richard StanwayandJim a282b1c64d libobs: Add ifdef for Windows-only variable assignment 2022-10-15 16:17:46 -07:00
Richard StanwayandJim cba81638b5 UI: Fix potential memory leak when parsing OBSThemeMeta 2022-10-15 16:17:46 -07:00
Richard StanwayandJim f021da2afa UI: Copy result of getenv before use
Another call to getenv, as well as a call to the POSIX functions
setenv(), unsetenv(), and putenv() may invalidate the pointer
returned by a previous call or modify the string obtained from a
previous call.

https://en.cppreference.com/w/c/program/getenv
2022-10-15 16:17:46 -07:00
Richard StanwayandJim daee83373c UI: Remove unused assignments 2022-10-15 16:17:46 -07:00
Richard Stanway e93ad13529 UI: Don't offer current resolution in auto config if < 240p
Fixes #3612.
2022-10-13 23:13:27 +02:00
Richard StanwayandJim 21c711d46b UI: Ignore left-click on non-multiview projectors
Fixes a crash that could occur after having both multiview and
non-multiview projectors active.
2022-09-17 16:19:24 -07:00
Richard Stanway 47e441b2e5 UI/updater: CMake: Add /utf-8 to MSVC command line
Fixes compiler interpreting UTF-8 as individual bytes when building the
wide string and showing the wrong characters.

Fixes #7304.
2022-09-05 22:51:15 +02:00
Richard Stanway 1cae3d4a3c UI/updater: Fix manifest XML namespace for dpiAware setting 2022-09-05 22:49:11 +02:00
Richard StanwayandRodney 3332beece5 obs-ffmpeg: Fix seek offset being calculated incorrectly
If FFmpeg wrote data and then seeked back to immediately overwrite it,
the second seek would be skipped as our virtual offset was incorrectly
thinking it hadn't changed. This caused MP4 corruption when seeking
back in the file to write the moov atom.

Fixes https://github.com/obsproject/obs-studio/issues/7269
Fixes https://github.com/obsproject/obs-studio/issues/7144
2022-09-03 01:34:14 +02:00
Richard Stanway 31414d2d7a UI/updater: Fix wrong parameter order for MessageBox 2022-09-01 00:44:57 +02:00
Richard Stanway 854d75919f UI/updater: Use a unique temp path for patch files
Fixes a case where patches for the same destination file but different
source files would clobber each other and cause integrity check
failures.
2022-09-01 00:37:53 +02:00
Richard Stanway edca16d77d UI: Add HTTP header if the update check is manually initiated
With the addition of server-side release rate control, having the server
know if the update check was manually initiated can allow it to deliver
the update to the user even if they would normally not be eligible.
Windows only.
2022-08-30 16:12:56 +02:00
Richard StanwayandJim 894bc4078b obs-ffmpeg: Log codec when creating NVENC encoders
With HEVC and H264 settings being near-identical, it was impossible to
figure out which codec was being used by context alone. This applies to
both ffmpeg output and jim-nvenc.

Fixes #6976.
2022-08-29 21:43:04 -07:00
Richard StanwayandJim e58485e0b2 UI: Fix padding on context bar buttons in System and Dark themes 2022-08-29 21:42:25 -07:00
Richard StanwayandJim ac55328e7f UI: Simplify multiview projector removal 2022-08-24 05:33:47 -07:00
Richard StanwayandJim 5e6cbebcb9 UI: Remove allProjectors list
Seems like this wasn't used anywhere and projectors were not being
removed on destruction, resulting in a memory leak.
2022-08-24 05:33:47 -07:00
Richard StanwayandJim c64997ed80 UI: Fix crash when toggling volume control mode
The toggleControlLayoutAction (change between horizontal and vertical
display mode) deletes and re-recreates the volume controls, meaning we
were writing to freed memory. This is a kind of hacky fix but it's the
only action we need to be concerned with for now.
2022-08-24 05:14:56 -07:00
Richard Stanway ef48f5b28d UI/installer: Update references to dependencies for 28.0.0 2022-08-21 17:26:27 +02:00
Richard StanwayandJim 8227dccf77 libobs: Initialize main_view video mix before video thread
Fixes a race condition where the video thread would exit because it sees
no active mixes, causing OBS to freeze on startup.

Fixes #7095
2022-08-20 01:27:47 -07:00
Richard StanwayandJim abedc7d08b UI: Fix use-after-free in properties view 2022-08-17 05:30:57 -07:00
Richard Stanway dcc79c374d obs-ffmpeg: Fix format specifier in obs-amf-test 2022-08-12 23:05:58 +02:00
Richard Stanway 3c6c44e1fe win-capture: Fix incorrect path in CMakeLists 2022-08-09 02:31:50 +02:00
Richard Stanwayandjpark37 86963f65d2 libobs, win-capture: Don't export ms_get_obfuscated_func
Since this was included in things like the inject helper and game
capture DLLs, it added an additional export to those programs. Instead,
simply share the source files directly in the projects that need it.

Co-authored-by: jpark37 <jpark37@users.noreply.github.com>
2022-08-07 19:41:23 +02:00
Richard StanwayandJim 8ab6fffec4 obs-amf-test: Add 2.5 second timeout for AMF test process
If the test process freezes for whatever reason, OBS would block
indefinitely on reading the pipe. This commit adds a 2.5 second timeout
on the AMF test process after which it will self-terminate.
2022-08-01 13:34:27 -07:00
Richard StanwayandJim 68415fa08f obs-ffmpeg: Throw on invalid amf_format 2022-08-01 13:34:27 -07:00
Richard StanwayandJim ac025b51ac obs-ffmpeg: Use get_buf function to ensure buffers_mutex is locked 2022-08-01 13:34:27 -07:00
Richard StanwayandJim 2e8b8c5ae1 obs-ffmpeg: Fix typo in min_qp_p / max_qp_p options
Detected by PVS Studio.
2022-08-01 13:34:27 -07:00
Richard StanwayandJim 00408b6b3b obs-ffmpeg: Don't load AMF DLL before amf-test
In the event that simply loading the AMF DLL causes initialization code
to run that might crash, don't load the DLL before the AMF test process
has succeeded. Instead, we load the DLL as data to see if it exists,
then run the AMF test, then load the DLL for real.
2022-08-01 13:34:27 -07:00
Richard Stanway ad11ae2f5c libobs: Remove redundant get_data calls in obs_data functions 2022-07-27 21:58:16 +02:00
Richard Stanway 88226db6b3 obs-ffmpeg: Fix AMF AVC / HEVC check logic 2022-07-22 00:45:34 +02:00
Richard Stanway 009fc43bee deps/opts-parser: Skip parsing of empty strings 2022-07-20 03:29:59 +02:00
Richard Stanway 22ef40ba17 text-freetype2: Don't read / write empty size arrays 2022-07-18 23:23:12 +02:00
Richard Stanway 174e91f211 rtmp-services: Avoid calling bmemdup on NULL resolution list 2022-07-18 23:12:49 +02:00
Richard StanwayandJim c5965c8605 libobs: Log errors for bmalloc(0)
malloc(0) is implementation defined and almost always a mistake. I
believe we should be more like malloc and treat bmalloc(0) as an error
instead of tying to handle it. For now we can log an error in case 3rd
party plugins are broken, in the future I would suggest this becomes a
crash-worthy error.
2022-07-16 15:20:55 -07:00
Richard StanwayandJim dbdbfe79d2 libobs: Deprecate base_set_allocator and make it no-op
Hopefully nothing is actually using this in the first place. As a
library libobs has alignment requirements so we should probably not
allow an application to replace our aligned mallocs with something else.
This also allows more aggressive optimizations inside libobs as the call
can be completely inlined into a libc malloc.
2022-07-16 15:20:55 -07:00
Richard StanwayandJim 17c39ccb07 obs-ffmpeg, obs-outputs: Check return of obs_encoder_get_extra_data
A race condition can occur in obs-outputs where the send_thread is in
the process of (re)connecting but the encoder was shut down in the
meantime. This causes the expected header data to be garbage, resulting
in a crash.
2022-06-25 16:03:12 -07:00
Richard Stanway dada82fec1 obs-outputs: Don't shutdown RTMP session when silently reconnecting
The silent reconnect (GOAWAY) is supposed to be used for switching the
connection to a different server. As such, cleanly shutting down the
RTMP connection can destroy state that needs to be preserved in order
for the GOAWAY-enabled server to properly resume the same stream on
reconnect.

This commit closes the TLS/TCP connection before calling RTMP_Close,
causing librtmp to skip the FCUnpublish and deleteStream messages.
2022-06-20 22:10:06 +02:00
Richard Stanway 34bbb94acd UI: Use int return type in OBSIgnoreWheelProxyStyle 2022-05-30 22:55:36 +02:00
Richard StanwayandJim 898256d416 obs-ffmpeg: Add a circlebuf to buffer output in ffmpeg-mux
This adds a circular buffer to ffmpeg-mux when writing to a file.
Output from ffmpeg is buffered so that slow disk I/O does not block
ffmpeg writes, as this causes the pipe to become full and OBS stops
sending frames with a misleading "Encoding overloaded!" warning. The
buffer may grow to 256 MB depending on the rate of data coming in and
out, if the buffer is full OBS will start waiting in ffmpeg writes.

A separate I/O thread is responsible for processing the contents of
the buffer and writing them to the output file. It tries to process 1 MB
at a time to minimize small I/O.

Complicating things considerably, some formats in ffmpeg require seeking
on the output, so we can't just treat everything as a stream of bytes.
To handle this, we record offsets of each write and try to buffer as
many contiguous writes as possible. This unfortunately makes the code
quite complicated, but hopefully well commented.
2022-05-30 10:06:09 -07:00
Richard StanwayandJim 108d32c0c6 UI: Remove m3u8 format from simple output mode
This option regularly confuses users, who accidentally select it and
then ask why they have hundreds of 2-4 second video clips in their
output folder. HLS output format to file is a pretty niche use case,
so let's keep it in advanced mode only.
2022-05-21 15:46:40 -07:00
Richard StanwayandJim c7e83518e1 win-wasapi: Log source name when showing device errors
Sometimes users have a forgotten source pointing to an invalid device,
which is very difficult to locate without us showing the source name.
2022-05-17 02:47:08 -07:00
Richard Stanway 377af35016 UI: Move scene import dialog to the stack
Changed for consistency as almost every other dialog in the application
is stack-allocated.
2022-05-16 21:51:01 +02:00
Richard Stanway 8bd4ef61a0 obs-ffmpeg: Change types to avoid unnecessary casts 2022-05-07 16:01:48 +02:00
Richard Stanway 4c96feafab obs-ffmpeg: Fix compiler warning 2022-04-19 03:23:53 +02:00
Richard Stanway 42ce624b13 libobs: Remove unnecessary blend_type assignment
The code pattern for all other assignments skips the default value.
Detected by PVS Studio.
2022-04-19 03:16:48 +02:00
Richard Stanway 0bc955bdf2 libobs: Fix wrong enum in obs_sceneitem_get_blending_method
Detected by PVS Studio.
2022-04-19 03:16:48 +02:00
Richard Stanway a8ecf3c8f2 UI: Fix display affinity logic when re-applying
The old behavior toggled display affinity every time the window was
updated instead of applying it consistently.
2022-03-31 17:23:53 +02:00