Commit Graph
181 Commits
Author SHA1 Message Date
Sebastian Beckmann 482778d532 frontend: Change renderer combo box to use custom data
While the Metal renderer is displayed as "Metal (Experimental)", the
"Experimental" part doesn't need to be stored to the config. Otherwise,
anyone having selected the Metal renderer will have it get unselected
once the "Experimental" part is removed, and presumably the people who
have it selected while it's experimental would also be the people who
would want it once it's stable.
2025-09-08 17:39:38 -04:00
PatTheMav f932082112 frontend: Add Metal to available list of renderers in basic settings 2025-09-04 17:58:27 -04:00
Sebastian Beckmann e4381755ca frontend/data: Remove unused context bar string 2025-09-04 14:48:30 -04:00
Sebastian Beckmann 22ce393680 shared/idian: Make title and description common to all row types 2025-09-04 14:17:02 -04:00
Sebastian Beckmann fca07b4ce4 frontend: Include OBSIdianPlayground MOC
Also puts the include in the correct place in OBSBasic_MainControls.
2025-09-04 14:17:02 -04:00
Sebastian Beckmann e05496462a frontend/themes: Remove Idian test rule 2025-09-04 14:17:02 -04:00
Sebastian Beckmann affe09d250 frontend: Fix plugin manager module type loading 2025-09-03 15:34:26 -04:00
PatTheMav e8d4224992 frontend: Change crash sentinel location to separate subdirectory
Putting the crash sentinel in the main "obs-studio" directory carries
the risk of unwanted deletion of files in the same directory, which
usually contains user configuration files like "user.ini" and
"global.ini".

Even though the code will ignore any file that does not start with the
crash sentinel prefix string, the code itself would allow changing the
prefix to "global.ini" and thus inadvertently delete the global
configuration file as well.

To further reduce the risk, this change will put the sentinels in a
separate sub-directory that should only ever contain sentinel files,
all of which can possibly deleted without any data loss for the user.
2025-09-03 13:01:44 -04:00
FiniteSingularity a5fa416628 frontend: Fix plugin manager config loading crash
Current code isn't catching a parse error exception if an invalid config
file is loaded by the plugin manager. This change wraps the plugin
manager config json parse call with a try/catch, and handles invalid
config files by creating a new config file, and logs an error that the
existing config file is invalid.
2025-09-02 15:54:47 -04:00
tytan652andPatTheMav 747f67e150 frontend: Do not enable crash log upload without log file
Co-authored-by: PatTheMav <PatTheMav@users.noreply.github.com>
2025-09-02 15:28:33 -04:00
Sebastian Beckmann 527e2f291f frontend: Remove unneeded argument from log upload privacy notice 2025-09-02 14:57:41 -04:00
Norihiro Kamae e647729592 frontend/api: Fix deprecation warning message for global config 2025-08-28 15:11:59 -04:00
FiniteSingularity 23b67268e7 frontend: Provide UI for phase 1 of plugin manager
For phase 1 of the plugin manager, the ability to toggle off/on plugins
to be loaded at launch is provided.

This commit adds a new Plugin Manager dialog which can be accessed from
the Tools menu, which shows a list of all installed 3rd party plugins
with a checkbox to toggle them off or on.  If a change is made, the user
is prompted to restart OBS. To allow this, the plugin manager uses a
json based config file stored in the OBS config directory. Additionally
for sources in the source tree, a sample UI has been provided that
indicates any sources whose parent module is disabled, by turning its
title red.
2025-08-28 14:29:10 -04:00
Ryan Foster e187f9acee Revert "UI: Work around Qt dock restore crash"
This reverts commit 3dcf68f8ed.

The bug that this was meant to work around was most likely QTBUG-102718,
which was fixed in Qt 6.2.5, 6.3.1, and 6.4.0. The minimum version of Qt
we currently support is Qt 6.4.2 because it is what is available on
Ubuntu 24.04. Thus, we should not need this workaround now.

https://bugreports.qt.io/browse/QTBUG-102718
2025-08-25 18:50:16 -04:00
PatTheMav c8ec906844 frontend: Change overflow texture rendering to be sRGB-aware
Current code assumes that the overflow texture and the render target
always share the same color format including transfer function.

This assumption is incorrect however as OBS might use a 16-bit floating
point texture with a linear gamma transfer function when a high-bitrate
format is selected. On top of that OBS Studio wants rendering code to
ensure that linear color blending is used throughout the application.

The DrawOverflow function had not been updated to reflect this. This
change brings it in line with other functions involved in preview
rendering, which enable automatic sRGB conversion for the framebuffer
and the texture used in the fragment shader.
2025-08-24 15:29:33 -04:00
Sebastian Beckmann 7685a0c78b frontend: Set cursor width for OBSHotkeyEdit to 0
This hides the cursor from the OBSHotkeyEdit spin boxes even when they
are in focus.
Uses a shared style owned by OBSApp.
2025-08-23 13:01:02 -04:00
cg2121 4b403d2a3e frontend: Use signal to update log viewer
Instead of calling the log viewer directly, use a signal instead.
2025-08-23 12:13:39 -04:00
tytan652 ffcc3acd9d frontend: Replace transition duration spinbox direct access 2025-08-22 16:48:23 -04:00
tytan652 d22ddfd395 frontend: Reduce reliance on transition indexes 2025-08-22 16:48:23 -04:00
tytan652 2962770813 frontend: Replace transitions combobox direct access 2025-08-22 16:48:23 -04:00
tytan652 11562b6696 frontend: Remove some shadowing 2025-08-22 16:48:23 -04:00
Sebastian Beckmann 872ea5fb91 shared/idian: Rename component classes 2025-08-22 16:21:52 -04:00
Sebastian Beckmann edb2c9ca48 shared/idian: Rename widget classes 2025-08-22 16:21:52 -04:00
Sebastian Beckmann 5cda3d4e8e shared/idian: Rename all-in-one include to Idian.hpp 2025-08-22 16:21:52 -04:00
Sebastian Beckmann 9e0c3219ff frontend: Move idian widgets to shared/qt 2025-08-22 16:21:52 -04:00
Sebastian Beckmann de9fcd6b42 frontend: Unify naming of Idian Playground
It's called Idian Playground in some places and Widget Playground in
others. Idian Playground is more precise so let's use that.
2025-08-22 16:21:52 -04:00
Sebastian Beckmann c527f9e34c cmake: Don't add Idian playground when feature is disabled 2025-08-22 16:21:52 -04:00
Warchamp7andderrod e8f6143769 frontend: Add new Idian widgets
Co-Authored-By: derrod <rodney@rodney.io>
2025-08-22 16:21:52 -04:00
PatTheMav de997b1e2f frontend: Update crash handling and log upload functionality
Updates include:

* Use of CrashHandler to provide automatic uploads of the most recent
crash log if an unclean shutdown was detected and it has not been
uploaded yet.
* Detection and handling of unclean shutdowns is delegated entirely to
the CrashHandler class
* Use of OBSLogReply has been replaced with the LogUploadDialog, which
asks for confirmation before new uploads of log files (confirmation is
skipped for files with available upload URLs already - only available
for crash logs with this change)

Architectural changes:
* OBSApp is the layer responsible for application launch and shutdown
states, as well as crash logs and application logs
* The actual handling is delegated to purpose-made classes which OBSApp
owns instances of
* OBSBasic in turn refers to OBSApp for all this functionality, and can
subscribe/connect to appropriate events exposed by OBSApp to this
purpose
* Implementation details (like the existence of the CrashHandler class)
are not exposed to OBSBasic or the LogUploadDialog

The amount of changes for normal log file upload have been purposefully
limited. A proper refactoring of the application log file handling will
move this code out of OBSBasic as well.
2025-08-22 15:38:12 -04:00
PatTheMav e4e3035661 frontend: Add LogUploadDialog class 2025-08-22 15:38:12 -04:00
PatTheMav 272825b46a frontend: Add CrashHandler class
The CrashHandler class encapsulates all functionality around unsafe
shutdown detection as well as crash log discovery and log upload.

Each (functional) CrashHandler should be initialized with an app launch
UUID, which enables the handler to disambiguate a sentinel file for the
current app launch from those of prior app launches.
2025-08-22 15:38:12 -04:00
Norihiro Kamae 8e2da12c2a frontend: Fix multiview not decrementing showing state count
Also replaced a variable `numSrcs` with `multiviewNewScenes.size()`
because they are always identical.
2025-08-22 14:10:45 -04:00
derrod 4c05feed69 frontend: Make Hybrid MOV the default for beta builds on macOS 2025-08-21 18:14:33 -04:00
derrod 0619198c25 frontend: Add Hybrid MOV to format list 2025-08-21 18:14:33 -04:00
Sebastian Beckmann 5730f86050 frontend/api: Remove obs_frontend_add_dock
Deprecated since cde5545f8f (30.0).
2025-08-20 18:05:15 -04:00
derrod a7d5721c2c frontend: Remove channel change signal handler from transform dialog 2025-08-20 13:57:36 -04:00
cg2121 33e8a23386 frontend: Auto release OBSDataArray objects
Makes sure that all obs data array objects in cpp files are using
auto release RAII wrappers.
2025-08-20 12:59:53 -04:00
Dennis Sädtler ef057dd3af frontend: Fix and simplify initialization of supported_codecs 2025-08-19 18:44:49 -04:00
Sebastian Beckmann a7d68842fb frontend: Don't mark OBSHotkeyEdit as read-only on macOS
Recent styling changes mean read-only QLineEdits no longer visually take
focus. There are better ways to remove the input cursor, and if we do
that that should probably be all operating systems anyways.
2025-08-19 16:41:27 -04:00
Sebastian Beckmann 268e30a52b frontend: Remove unused macOS window icons
Commit [1] originally made a differentiation between the operating
systems for the window icon. However, on macOS the window icon is only
respected for the main window (and used for the entire app, as windows
themselves don't have icons), and that got removed in [2]. This means
that this code doesn't actually do anything anymore, and thus should be
removed.

[1] 9ac92f61be
[2] 4afafaac6d
2025-08-19 14:48:06 -04:00
Sebastian Beckmann 28ca612d9e frontend: Remove unused OBSContextBarProxyStyle
All usages of OBSContextBarProxyStyle were removed in [1], so the class
is completely unused now. It should be deleted.

[1] 8dcfae9a39
2025-08-19 14:25:37 -04:00
shiina424 1af512f323 frontend: Fix invisible scrollbar in Light theme 2025-08-04 14:04:08 -04:00
shiina424 d9317a38a2 frontend: Fix invisible scrollbar in Rachni theme 2025-08-04 14:04:08 -04:00
Warchamp7 6a7de7ed4f frontend: Fix settings scrollbar size 2025-07-21 14:57:23 -04:00
Warchamp7 3cdc013a56 frontend: Fix progress bar appearance 2025-07-18 16:56:40 -04:00
Dennis Sädtler a45bbe134f frontend: Do not set maximum_video_tracks if user has set it to "Auto" 2025-07-18 13:07:37 -04:00
Damian Marcin SzymańskiandRyan Foster 9331fb7dac frontend: Fix build failure with Clang 20+ in OBSCanvas
Canvas is a move-only type without a copy constructor. Since C++17
requires types stored in std::optional to be copy-constructible unless
explicitly allowed, Clang 20+ emits an error when attempting to
instantiate std::optional<Canvas>.

While GCC allows this as an extension, Clang enforces the standard
more strictly.

This PR replaces std::optional<Canvas> with std::unique_ptr<Canvas> to
resolve the build error with Clang 20+ while keeping functional
behavior identical.

Tested with GCC 15.1.0 and Clang 20.1.7.

Co-Authored-By: Ryan Foster <ryan@obsproject.com>
2025-07-15 14:29:05 -04:00
Warchamp7 d268a19b4a frontend: Avoid recreating YouTube dock 2025-07-11 17:28:59 -04:00
Warchamp7 9858e7e722 frontend: Enforce minimum height for QList items 2025-07-07 14:35:42 -04:00
Matt Gajownik 70c85f9875 Update translations from Crowdin 2025-07-01 13:34:08 -04:00