When the browser panel inside a dialog navigates to a new URL, it calls
the navigation URL handler from its own event loop. The OAuth dialog has
installed such a handler to check each navigation event's URL for a
possible "code" argument.
If such a "code" argument is found, the dialog's "accept" method is
called, which in turn will call "closeBrowser" as the dialog attempts to
close itself.
This results in browser shutdown code running in the middle of CEF
draining its main event loop of pending tasks.
In the Chrome Runtime this now results in a crash within CEF's
"InterceptNavigationThrottle" destructor, which is executed as part of
the browser shutdown.
Decoupling the URL change handler of the dialog from the URL change
handler of the browser panel ensures that the browser shutdown is
initiated from the Qt main event loop and not the CEF main event loop
and resolves the issue.
To create a build system that only produces the core libraries required
for plugin development (libobs and obs-frontend-api), developers could
use the "ENABLE_PLUGINS" cache variable.
This variable was removed and replaced with "ENABLE_CORE_MODULES"
for the plugin manager feature, but disabling building of core modules
made it impossible to build libobs (as the required files were not
generated).
This commit adds temporary support for the deprecated "ENABLE_PLUGINS"
variable (with a deprecation warning) and also ensures that libobs can
be built successfully without any core modules enabled.
Remove the registry key check for the virtual camera module installer.
The regsvr32 will perform this check itself, so we don't need to if the
registration is already present. However, if we want to update the path,
simply checking that the key exists will prevent us from being able to
update the path in the future, and as necessary for OBS v33+. This also
corrects the incorrect file paths to the modules in the new core plugin
structure.
Parenting the missing encoders dialog means it doesn't show up in the
taskbar. Since the popup is shown before the main window is shown, it
can end up appearing behind other windows if the user focuses another
application after opening OBS. This can lead to confusion as there is
no indication OBS has opened, but is currently waiting for the dialog
to complete.
The directory chooser can return a path that ends with a separator,
e.g. when the path is typed manually or on some platform dialogs.
std::filesystem::path::filename() returns an empty string for such a
path, so the imported profile gets an empty directory name and its
files are copied directly into the profiles root instead of a new
profile directory. No new profile appears in the profile list.
Normalize the selected path with QDir::cleanPath() before building the
filesystem path, which strips the trailing separator and yields the
actual directory name.
Updates the plugin manager window rows to use a local copy of
ModuleInfo.
Passing around a pointer to the actual entry within the modules_ vector
felt like a sensible optimization for updating the enabled state of
entries. However when deleting entries from the Missing category it
means pointers to anything after the deleted entry become incorrect or
invalidated.
The Status enum is renamed to Category as it's more appropriate.
Adds handling for plugins in safe mode by always putting them in the
Installed category since we can't know if they're Errored or Missing.
Also displays the Disabled indicator for all plugins in safe mode.
Follow-up to c3046ec172.
That commit completely replaced the various gs_image_file* structs and
functions, but the docs were not updated. Update the docs with the new
structs and functions.
Follow-up to c3046ec172.
That commit completely replaced the various gs_image_file* structs and
functions, but this script was not updated. Use the new structs and
functions to fix the script.
Scripting libraries for Python and Lua need to be placed in the runtime
plugin directory of the application bundle on macOS.
This was previously handled by the same code that handles the first-
party runtime modules, but the scripting libraries are not libobs
modules and thus need to be handled separately.
Adjust the check for missing encoders to only check encoders for the
currently set Output Mode (Simple or Advanced).
Avoids a confusing warning when OBS is set to Simple output mode but
the encoder that was previously configured for Advanced has gone
missing.
The updater itself is distributed and updated for all versions of OBS
for which updates are still available. As such, it needs to be aware
of the legacy plugin location for versions before v33 and the new
location for v33 onwards.
When checking if the browser plugin exists, check both locations.
When installing the virtual cam, we reference the manifest for the
version we are updating to and use the appropriate location.