Commit Graph

3618 Commits

Author SHA1 Message Date
PatTheMav
9f887c76d3 frontend: Prepare Qt UI Widgets for splits 2025-01-08 17:33:13 +01:00
PatTheMav
f813121bb9 frontend: Add renamed Qt UI Widgets 2025-01-08 17:33:12 +01:00
PatTheMav
a0668682b7 frontend: Prepare UI utility files for splits 2025-01-08 17:33:12 +01:00
PatTheMav
d846b0ba0a frontend: Add renamed UI utility classes and functions 2025-01-08 17:33:12 +01:00
PatTheMav
9876882e0b frontend: Prepare Qt Settings UI files for splits 2025-01-08 15:36:55 +01:00
PatTheMav
7f6bee603b frontend: Add renamed Qt Settings UI implementation 2025-01-08 15:36:55 +01:00
PatTheMav
f80b591a72 frontend: Prepare OAuth implementation for splits 2025-01-08 15:36:55 +01:00
PatTheMav
8e4ee1d3fc frontend: Add renamed OAuth implementation 2025-01-08 15:36:55 +01:00
PatTheMav
e0469b00d6 frontend: Add OBSImporter and importer implementations 2025-01-08 15:36:55 +01:00
PatTheMav
a959ecadaf frontend: Add renamed Qt UI docks 2025-01-08 15:36:55 +01:00
PatTheMav
e4a43f6555 frontend: Prepare Qt UI dialogs for splits 2025-01-08 15:36:55 +01:00
PatTheMav
00fc9035a4 frontend: Add renamed Qt UI dialogs 2025-01-08 15:36:55 +01:00
PatTheMav
819850c0f6 frontend: Prepare Qt UI components for splits 2025-01-08 15:36:54 +01:00
PatTheMav
3bbda4803e frontend: Add renamed Qt UI components
This commit only contains Qt UI components that are self-contained,
i.e. the translation units only contain code for a single class or
interface and don't mix implementations.
2025-01-08 15:36:54 +01:00
Translation Updater
0b2c85845e Update translations from Crowdin 2024-12-06 23:21:55 +00:00
PatTheMav
b285a849b9 UI: Fix collision of existing backup files for new scene collections
The new Scene Collection code uses the lazy creation behaviour of
OBSBasic::Load, which itself uses obs_data_create_from_json_file_safe.

The internal implementation will create a new scene collection with the
contents of an existing backup file with the same name however, thus
users would end up with a nominally "new" scene collection that
contains contents of an old backup.

This update will remove any existing backup file colliding with the
name of the new, duplicated, or renamed, scene collection and remove it
before activating it (and having OBSBasic::Load create a new one).
2024-12-03 15:09:11 -05:00
test
e2cd815b84 UI: Add unassigned icon 2024-11-25 15:45:27 -05:00
PatTheMav
7ffc38ebb6 UI: Fix broken module paths provided via environment on macOS
When custom module and module data paths are provided via environment
variables, the module paths generated by current code will not be
compatible with the plugin bundle structure used on macOS.

Using environment variables is a simple way to test plugins,
as this allows OBS to discover them from alternative user-provided
locations.
2024-11-20 13:01:15 -05:00
Penwywern
ca342c2491 frontend-tools: Correctly pass settings to modified cb on reload 2024-11-19 18:11:08 -05:00
Dennis Sädtler
b71f43980a UI: Fix falling back to non-multitrack output after error
This lambda would be called from the Qt event loop rather than the
original call stack when continuing from an error, resulting in the
captured references being invalid.
To solve this must explicitly use a copy instead of reference capture.
2024-11-19 16:55:52 -05:00
Dennis Sädtler
1648dcc7f2 UI: Fix autoconfig saving signed stream key 2024-11-19 16:00:23 -05:00
Ruwen Hahn
4c1f783c66 UI: Forward auto rtmp/rtmps IVS preference
(cherry picked from commit ffa751696106761ddcf965d3f68e0d8920495a9b)
2024-11-18 17:12:45 -05:00
Ruwen Hahn
a00595c2d7 UI: Ignore all auto URLs for server selection
(cherry picked from commit a36c1d4dd4b07e9b0aa66f286fe52f6f5a8d9e98)
2024-11-18 17:12:45 -05:00
shiina424
d7292a4f64 UI: Create YouTube Dock when switching profile 2024-11-05 14:42:06 -05:00
test
bb9399a948 UI: Add trash and general icon 2024-11-01 16:03:13 -04:00
test
c531c304b2 UI: Add trash icon 2024-11-01 16:03:13 -04:00
shiina424
7dc0064292 UI/themes: Fix missing icon in system theme 2024-11-01 16:03:13 -04:00
shiina424
5ccab9c65b UI/themes: Fix control button pressed color in Rachni theme 2024-11-01 15:31:11 -04:00
PatTheMav
bf00c17b2b UI: Update profile encoder information after module load
The function InitBasicConfigDefaults2's purpose is to set up encoder-
related settings for a profile, which requires all available encoders
to have been discovered first.

As encoders are added by runtime modules, this also means that discovery
needs to be delayed until after modules have been loaded, but modules
themselves require a valid profile to exist and be loaded.

This leads to the requirement of profiles needing to exist in a
half-initialized state when modules are loaded and only becoming
fully initialized after that.

This distinction is not necessary after the initial launch of obs-studio
because runtime plugins are not hot-loadable, so the update can happen
unconditionally at any time a plugin is changed, which implicitly
couples every call to ActivateProfile with a call to
UpdateProfileEncoders.
2024-10-30 16:18:29 -04:00
Matt Gajownik
0be9d9ff79 UI: Open active profile directory via File menu 2024-10-30 15:57:46 -04:00
SarenDev
23e772cc2c UI/importers: Translate capture sources depending on WS
Translate window or game capture sources to xcomposite or pipewire
depending on the window system used.
This change prevents xcomposite being assigned on non-X11 systems
which causes a crash
2024-10-30 14:39:30 -04:00
Richard Stanway
ab48cd0b3d UI: Add TikTok Live Studio Virtual Camera to DLL blocklist
Ref: https://www.hanselman.com/blog/webcam-randomly-pausing-in-obs-discord-and-websites-lsvcam-and-tiktok-studio
2024-10-30 14:16:47 -04:00
PatTheMav
1cf6b3d45e UI: Restore frontend API events being dispatched during initialization
The frontend API events "OBS_FRONTEND_EVENT_SCENE_CHANGED" and
"OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED" are not dispatched if
disableSaving has a value > 0. Prior code decremented disableSaving to
0 globally (regardless of whether saving was necessary, which is only
the case if a new collection is created as a fallback for a missing
scene collection).

Thus the updated code exhibits different event dispatch behavior then
old code which some plugins might have relied on. To avoid introducing
new behavior, explicitly create the environment to allow the dispatch
to take place and remove/refactor the events in a later version.
2024-10-30 13:46:36 -04:00
gxalpha
23910f471f UI: Remove LineEditAutoResize widget
This widget was created primarily for the custom YouTube chat input and
used solely for that. With the custom YouTube input gone, it serves no
further purpose. If it's needed again in the future, it can be recreated
from the history.

Effectively reverts 5a298106bc.
2024-10-30 11:59:33 -04:00
gxalpha
de31ec80ae UI: Remove SendChatMessage from YoutubeApiWrappers
With the custom YouTube chat sending removed in the parent commit,
there's no need to keep these functions anymore.

Effectively reverts 49dfc113c1.
2024-10-30 11:59:33 -04:00
gxalpha
4730292394 UI: Remove custom YouTube chat input
The custom chat was originally introduced as a workaround because the
ability to chat was always missing due to limitations on YouTube's side.
With the introduction of first-party YouTube chat features in
9b8fa0f0ca, it only has the limited use
case when the user is logged in via the API (in OBS settings), but isn't
logged in in the integration docks. As it's quite a bit of code for not
a lot of value, I think it's worth removing. Users should log in via the
panel instead.

Effectively reverts 3513c78be2.
2024-10-30 11:59:33 -04:00
Charlie Li
7e1e60cece cmake: Install desktop files and icons on FreeBSD 2024-10-29 15:20:20 -04:00
Matt Gajownik
0eef4e25ee UI: Split out Whats New dialog, fix crash on shutdown
CEF crashes on shutdown if any browser window remains open during the
shutdown flow. Reproducible 100% of the time on Linux with What's New.
The previous implementation of the What's New dialog correctly deleted
all the Qt widgets, but the CEF internal event flow would only call the
"preparing to close" function, and never the "window safely closed"
function. Moving the code (practically unchanged) to a custom QDialog
solves the problem entirely, and is more consistent with other uses.
2024-10-24 16:01:46 -04:00
derrod
3ee7655fe4 UI: Log Twitch 403 error bodies 2024-10-23 12:51:56 -04:00
Matt Gajownik
9908c7941f UI: Don't load Restream UI before CEF is ready 2024-10-23 17:33:18 +11:00
PatTheMav
072102701c UI: Use custom property on QAction to retain profile or collection name
On some platforms (e.g. KDE) accelerators are automatically added to
the text properties of QActions, thus changing the value returned by
text().

Thus we cannot rely on the text to always represent the same text that
we set originally and have to explicitly store and retrieve the value
as a property.

Coincidentally this not only fixes possible issues on other platforms,
but is also architecturally more correct.
2024-10-21 11:51:33 -04:00
PatTheMav
918fe6171d UI: Update order of profiles and scene collections in their menus
The old method to update the profile menu iterated over the directory
entries of the profile directory in the order provided by the operating
system.

The system calls used for this explicitly state that the order of items
is "undefined" but seems to have followed a case-insensitive
alphabetical order on Windows, an order which users have come to expect.

The new code uses a std::map to store discovered profiles and scene
collections, which is ordered by key and with std::string used for keys
this means a lexicographical sorting of keys which is case-sensitive.

To restore the old behavior, profiles and scene collections need to be
added to their respective menus sorted by case-insensitive order, which
has to be done manually before adding the items.
2024-10-21 11:51:33 -04:00
Ed Maste
39b91d8875 UI: Restore XDG config path update for FreeBSD
Restore move_to_xdg from commit ba02e065fe to migrate from pre-XDG
config path $HOME/.obs-studio on FreeBSD.
2024-10-18 18:19:19 -04:00
Ed Maste
c928fac339 libobs: Remove non-USE_XDG code
That is, leave only the code that was under USE_XDG.  Previously the
Linux CMake build defined USE_XDG unconditionally, while it was not set
by the FreeBSD build.

The non-USE_XDG code was broken, and FreeBSD should follow the XDG
convention anyway (in particular, storing config files typically under
$HOME/.config/obs-studio).  Defining USE_XDG in the os-freebsd.cmake
files would leave the non-USE_XDG code unused anywhere, so instead just
remove it.
2024-10-18 18:19:19 -04:00
Warchamp7
6ca0a88f0e UI: Remove toolButton styling 2024-10-16 13:49:34 -04:00
Warchamp7
7b052cba45 UI: Replace toolButton property with style class 2024-10-16 13:49:34 -04:00
Ed Maste
b654dba30a UI: Catch error from copy in MigrateGlobalSettings
During development on FreeBSD I encountered an uncaught exception abort
from the copy in MigrateGlobalSettings.  Catch the error and print a
user-facing message:

error: Unable to migrate global configuration - copy failed.
2024-10-16 11:37:22 -04:00
PatTheMav
ca4bc1ad36 UI: Fix initialization bug when launching without existing profile
SetupNewProfile is used to create new profiles when OBS is already
running, which requires resetting program state for the new profile.

This function cannot be used to create a new profile as a fallback
for either a non-existing profile or for a fresh installation of OBS
Studio because by the point this is called from OBSBasic::OBSInit, the
runtime modules are not loaded yet and as such no services exist.

Activating the new profile without a profile reset fixes this issue
as the reset will be done explicitly by OBSBasic::OBSInit later.
2024-10-15 14:28:43 -04:00
Ryan Foster
77d74dd0da UI: Set minimum version for nlohmann_json to 3.11
We know this is the minimum version that we require, so we can just fail
during configure if somehow an older version is found.
2024-10-15 13:30:34 -04:00
gxalpha
ba6a6bfdcb UI/themes: Consistently select indicator-mute instead of MuteCheckBox
cb026964b0 changed most instances of
MuteCheckBox as a selector for the button that mutes/unmutes a source in
the mixer to indicator-mute, but left a few instances of the old
selector, especially in variant themes while the base theme got changed.
This lead to competing selections where apparently indicator-mute won
which meant that the variant themes wouldn't override the base.
Changing all instances of MuteCheckBox to to indicator-mute fixes this
and hopefully prevents future uses of MuteCheckBox as a selector
anywhere.
2024-10-11 14:04:27 -04:00