Commit Graph

1958 Commits

Author SHA1 Message Date
Philipp Oeser
cbbeeccd08 Fix #124027: EEVEE light influence UI disappears when light is pinned
As desribed in #90039, we dont have a context object when pinning data,
this was accessed though leading to python errors.

The object was only used for the active state of certain layouts, do to
resolve the errors (and disappearing UI), check if we actually get an
object from context. That means the correct active state of certain
layouts is lost (it could either be always ON or always OFF, PR is using
the former -- since the default visibility is ON, so that would be more
common).

Pull Request: https://projects.blender.org/blender/blender/pulls/124091
2024-07-03 13:43:39 +02:00
Campbell Barton
463c05b341 Extensions: fix missing redraw after setting tags, report adding a repo
- Report when a repository is added since it's not so clear from the
  popup that a new repository has been added.
- Fix for missing redraw after selecting all/none tags.
- Also access the tags property once instead of getting it for each
  button.
2024-07-03 16:56:01 +10:00
Campbell Barton
e2b24904c9 Extensions: add buttons to select tags
This is for convenience since manually selecting all/none is tedious.
2024-07-03 15:55:20 +10:00
Bastien Montagne
570eee1717 Debug: Add new userpref option to enforce recompute of ID usercount on filesave.
This is a workaround to allow user to keep working without loss of data
when an issue like #124049 happens.

This commit also expose again the `use_all_linked_data_direct` debug
option, no idea why that one was removed.
2024-07-02 16:46:19 +02:00
Campbell Barton
df6ba6d324 Fix unhandled exception refreshing outdated extensions
Changes the the extension repositories in the preferences while
update notifications were running could raise an exception.

Resolve by only calculating outdated extensions for
repositories that still exist.
2024-07-02 17:04:53 +10:00
Andrej730
1f0592b3b1 Docs: corrections to bpy.utils.register_tool
- Replaced `tool` argument with `tool_cls`.
- Removed `space_type` argument that's not present in the method.

Ref: !118900
2024-07-02 16:18:08 +10:00
Thomas Barlow
d1cff7974a Fix #108254: Infinite loop in rna_info.BuildRNAInfo(..)
When a registered class has a non-registered superclass,
rna_info.BuildRNAInfo entered an eternal loop.

The while loop in `rna_info.get_py_class_from_rna` was not mutating the
variables within the loop nor the variable in its condition, meaning it
would loop infinitely if the loop didn't exit in its first iteration.

When yielding registered classes in `subclasses_recurse`, the function
was erroneously checking if the class' superclass was registered rather
than checking the class itself, causing registered classes to be skipped
if their superclass was not also registered. If the class to be found
was skipped, the while loop would not exit in its first iteration and
would thus loop infinitely.

The while loop has been modified to iterate through each base rna type
until there is no further base type.

The `subclasses_recurse` function now correctly checks whether the
subclass is registered, not its superclass, when determining if the
subclass should be yielded.

Besides the fix, no functional changes are expected, the generated
Python API docs remain unchanged.

Ref: !108256
2024-07-02 16:03:26 +10:00
Campbell Barton
1322daa480 Extensions: clear search and tags when showing updates
Search and tags could prevent extensions from being displayed.
2024-07-02 15:20:25 +10:00
Campbell Barton
c29d8326e0 UI: sort add-ons by name
Previously add-ons were sorted by category & name, remove the category
only sorting by name since the category is no longer displayed and
isn't part of extension meta-data. Now the add-ons are sorted by name
(case insensitive).

Details:

- Store add-ons modules sorted to avoid having to sort on every redraw.
- addon_utils.modules() now returns an iterator.
2024-07-02 15:06:14 +10:00
Campbell Barton
33fb83ae74 Fix using network shares for extensions on WIN32
- Support UNC paths.
- Normalize URL's to account for differences between browsers.
2024-07-02 12:53:00 +10:00
Campbell Barton
603b833fe3 Fix error accessing remote extension repositories via file:// on WIN32
Converting the URL back to a path left a slash before the drive letter.
2024-07-02 09:27:59 +10:00
Campbell Barton
0255be9b22 Fix invalid repository paths from generated HTML
The "repository" in links from the generated HTML was only valid when
the URL did not contain a path component.
Resolve by supporting relative "repository".

This simplifies referencing the JSON from a generated HTML since
a relative link doesn't need to know the repositories absolute URL
to the destination.
2024-07-01 23:33:09 +10:00
Campbell Barton
c2326a1639 Fix #123677: Incompatible extensions can be installed from disk 2024-07-01 22:57:38 +10:00
Campbell Barton
7bd846ce0a Fix error including platforms in extensions HTML output 2024-07-01 22:08:34 +10:00
Campbell Barton
78330522d2 Fix #123877: exception showing an add-on with an invalid manifest
Extensions with a manifest that can't be parsed caused can exception
in the add-ons UI.

Account for errors loading the manifest, falling back to dummy values
& show a warning that the exceptions manifest could not be parsed.
2024-07-01 17:20:38 +10:00
Campbell Barton
75f500ad02 Fix #123923: regression un-installing an extension
Regression in [0] which used an argument only available in Python 3.12.

[0]: 37ae9d5fc4
2024-07-01 16:37:54 +10:00
Campbell Barton
789b7bba91 Fix #123938: error dragging extension URLs to install an extension
Regression in [0].

[0]: 989de85cf6
2024-07-01 16:06:32 +10:00
Campbell Barton
0c54c347d8 Extensions: correct missing return
Harmless but mypy warns about this.
2024-07-01 15:57:42 +10:00
Campbell Barton
2d7b41c8c2 Extensions: Enforce copyright format "YYYY Name" or "YYYY-YYYY Name"
Based on !123846 with additional checks.

Co-authored-by: Mahid Sheikh <standingpad-animations@noreply.localhost>
2024-07-01 15:54:20 +10:00
Campbell Barton
5629b09ccf Extensions: update makefile for linters 2024-07-01 15:30:34 +10:00
Campbell Barton
67ddb0e1a5 Extensions: detect external changes on startup & loading preferences
Changes to an extensions manifest weren't accounted for.
This was particularly a problem for "System" extensions which aren't
intended to be managed inside Blender however the problem existed for
any changes made outside of Blender.

Now enabled extensions are checked on startup to ensure:

- They are compatible with Blender.
- The Python wheels are synchronized.

Resolves #123645.

Details:

- Any extension incompatibilities prevent the add-on being enabled
  with a message printing the reason for it being disabled.

- Incompatible add-ons are kept enabled in the preferences to avoid
  loosing their own preferences and allow for an upgrade to restore
  compatibility.

- To avoid slowing down Blender's startup:

  - Checks are skipped when no extensions are enabled
    (as is the case for `--factory-startup` & running tests).
  - Compatibility data is cached so in common case,
    the cache is loaded and all enabled extensions `stat` their
    manifests to detect changes without having to parse them.
  - The cache is re-generated if any extensions change or the
    Blender/Python version changes.

- Compatibility data is updated:

  - On startup (when needed).
  - On an explicit "Refresh Local"
    (mainly for developers who may edit the manifest).
  - When refreshing extensions after install/uninstall etc.
    since an incompatible extensions may become compatible
    after an update.
  - When reloading preferences.

- Additional info is shown when the `--debug-python` is enabled,
  if there are ever issues with the extension compatibility cache
  generation not working as expected.

- The behavior for Python wheels has changed so they are only setup
  when the extension is enabled. This was done to simplify startup
  checks and has the benefit that an installed but disabled extension
  never runs code - as the ability to install wheels means it could
  have been imported from other scripts. It also means users can disable
  an extension to avoid wheel version conflicts.

  This does add the complication however that enabling add-on which is
  an extension must first ensure it's wheels are setup.
  See `addon_utils.extensions_refresh(..)`.

See code-comments for further details.
2024-07-01 15:08:14 +10:00
Campbell Barton
24d8694fe3 Fix regression installing extensions via the command line
Error in [0] meant installing multiple extensions with `--enabled`
would only enable the last extension.

[0]: 176864ab03
2024-07-01 13:55:20 +10:00
Campbell Barton
350b8047c6 Extensions: move the wheel_manager out of the extensions add-on
Move wheel management to a generic private module, prepare addon_utils
to handle changes to repositories on load (needed to resolve #123645).
2024-07-01 10:07:16 +10:00
Andrej730
87844ae24d Fix bl_text_utils/external_editor.py broken __all__
Ref: !123910
2024-06-29 22:14:37 +10:00
Julien Duroure
38237fe414 glTF exporter: Avoid crash with skinned lattices
We don't export lattices, so don't try to get skin data from it
2024-06-29 09:22:26 +02:00
Julien Duroure
77a382ba2f glTF exporter: call hook for each action, including the active one 2024-06-29 09:16:02 +02:00
Richard Antalik
1a887c06d9 Fix #123543: Delete retiming keys deletes strip
Delete operator was shared for strips and retiming keys, which was not
ideal. Operator logic relied on invoke function setting proper context
which was also hidden from users.

Split these operators and make dedicated operators for removing retiming
keys - `SEQUENCER_OT_retiming_key_delete`.
This operator returns `OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH` if
executed in non-retiming context, or no key is selected.

Pull Request: https://projects.blender.org/blender/blender/pulls/123767
2024-06-28 17:06:44 +02:00
Campbell Barton
acfa60c1ae Cleanup: rename misleading function name, quiet mypy warning 2024-06-28 23:03:17 +10:00
Sybren A. Stüvel
4bff6ba655 Remove Rigify from extensions_map_from_legacy_addons.py
Rigify is now a core add-on, and no longer an extension.

Ref: !123833
2024-06-28 11:42:48 +02:00
Sybren A. Stüvel
246b317bd4 Add-on: Rigify, move meta-rigs into a 'Rigify Meta-Rigs' sub-menu
Instead of having the Rigify meta-rigs directly in the 'Add → Armature`
menu, move them into 'Add → Armature → Rigify Meta-Rigs`.

This also removes the " (Meta-Rig)" suffix from every individual
meta-rig menu item.

This serves multiple purposes:

- It's now clear that these meta-rigs come from Rigify.
- The built-in 'Single Bone' armature now has similar visual weight as
  the 'Rigify Meta-Rigs' menu item.
- Opens up the menu in a fairer way to other add-ons, to add their own
  entries in a similar way.

Pull Request: https://projects.blender.org/blender/blender/pulls/123833
2024-06-28 11:38:31 +02:00
Sybren A. Stüvel
d1e7346c63 Add-ons: Rigify, reformat code
Run `make format` to reformat the Rigify code. It now adheres to the
global Blender code style standard, rather than having its own style.

Most of the changes are simply adding spaces around operators, newlines
below docstrings, and changing some indentation.

Note that this does not reformat any stored-as-multiline-strings code
blocks.

No functional changes.

Pull Request: https://projects.blender.org/blender/blender/pulls/123833
2024-06-28 11:38:31 +02:00
Sybren A. Stüvel
09e431c511 Rigify: mark as support=OFFICIAL
Now that Rigify is part of the core add-ons, it should be marked as
officially supported.

Pull Request: https://projects.blender.org/blender/blender/pulls/123833
2024-06-28 11:38:31 +02:00
Nathan Vegdahl
3ad753e9f4 Fix: make foot roll rigs work again in Blender 4.2 and later (#4)
The fix is to set local-space Limit Rotation constraints to use the
legacy behavior from pre-4.2.  The legacy behavior isn't meaningful/
useful for other spaces, so we leave those constraints alone.

This is one part of a two-part fix for blender/blender#123105.  The other part
is blender/blender#123361, which adds the Legacy Behavior option to the Limit
Rotation constraint.

Reviewed-on: https://projects.blender.org/extensions/rigify/pulls/4
Reviewed-by: Sybren A. Stüvel <sybren@blender.org>
2024-06-28 11:38:31 +02:00
Demeter Dzadik
8d4cc5d998 Remove CloudRig as a promoted feature set (#1)
CloudRig is no longer a Rigify feature set. I re-wrote it as a standalone add-on.

Reviewed-on: https://projects.blender.org/extensions/rigify/pulls/1
Reviewed-by: Alexander Gavrilov <angavrilov@noreply.localhost>
2024-06-28 11:38:31 +02:00
Alexander Gavrilov
f5ac944658 Fix: Rigify Apply Toggle Pole to Keyframes clears out IK keyframes
Fix bug where the "Apply Toggle Pole to Keyframes" operator would erase
keyframes.

This was caused by f61d27b735622b940521024554aadcfc52ea76cf. The
solution was offered by Alexander Gavrilov in
https://projects.blender.org/blender/blender-addons/issues/105301#issuecomment-1187067

Fixes blender/blender-addons#105301
2024-06-28 11:38:31 +02:00
Sybren A. Stüvel
541e3aae25 Add-ons: Move Rigify into addons_core
Move Rigify from the external add-ons repository into
`scripts/addons_core`.

This commit adds Rigify, from the latest revision in [the add-ons
repo][addons]. It contains work by the following authors:

  202 Alexander Gavrilov
   67 Campbell Barton
   58 Nathan Vegdahl
   31 Lucio Rossi
   24 Demeter Dzadik
   10 Brecht Van Lommel
    8 Dalai Felinto
    7 Bastien Montagne
    7 Sybren A. Stüvel
    5 Damien Picard
    4 meta-androcto
    3 Ines Almeida
    2 Jonathan Smith
    2 ZanQdo
    1 Aaron Carlisle
    1 Andrej730
    1 Hans Goudey
    1 Luca Bonavita
    1 Patrick Huang
    1 Sergey Sharybin
    1 Thomas Dinges

For the full history see the read-only [add-ons repository][addons].

Rigify has existed briefly as an extension on the extensions platform,
and commits were made to Rigify's extension repository (which is
different from the above-mentioned add-ons repository). That repository
will be deleted soon. Its commits that actually changed Rigify will be
committed as followups to this commit. Some commits were necessary to
turn the add-on into an extension; those will be ignored, as they're no
longer relevant.

[addons]: https://projects.blender.org/blender/blender-addons/src/rigify

Ref: !121825

Pull Request: https://projects.blender.org/blender/blender/pulls/123833
2024-06-28 11:38:31 +02:00
Dalai Felinto
84f11da63a UI: Extensions: Fix spacing between Install and Menu
This was originally introduced on c6e452d865.

A subsequent Cleanup commit (c3d18854f3) changed this further,
increasing the gap a few extra pixels.

Since no functional/visual change should ever come with a cleanup commit
I'm treating this small regression as a bug, fixed by this commit.

There was something right about c3d18854f3, and one of the align=True
is indeed not needed.
2024-06-28 11:29:49 +02:00
Damien Picard
92c026c39b I18n: Fix multi-context message extraction regex
The BLT_I18N_MSGID_MULTI_CTXT() macro allows extracting a single
message into up to 16 different contexts. The regex to do that was
slightly wrong because it did not account for the macro potentially
ending with a ",".

The contexts for "New" were also sorted.

Pull Request: https://projects.blender.org/blender/blender/pulls/123793
2024-06-28 10:42:47 +02:00
Campbell Barton
ac8da6c72e Extensions: move junction_module to a private location
bpy_extras is part of the public API where as the junction_module
is part of the internal implementation of extensions.
Move to "_bpy_internal".
2024-06-28 14:30:11 +10:00
Campbell Barton
80f07e3f26 Cleanup: simplify the tags drawing function
Tags share logic between extensions & add-ons, simplify the method
used for both kinds of panels to share a draw function.
2024-06-28 14:18:52 +10:00
Campbell Barton
1043b273d5 Extensions: hide the extensions add-on unless debugging extensions 2024-06-28 14:08:56 +10:00
Campbell Barton
37ae9d5fc4 Fix #123827: Extension cannot be uninstalled if symlinked
In the case of user managed files we can't rely on paths to remove
being directories, they could be symbolic links as developers may point
to their own repository. While unlikely the paths to remove could
be files too.

Use a wrapper for shutil.rmtree(..) that handles symlinks & files,
use when removing paths that are expected to be directories from user
managed locations.
2024-06-28 13:40:37 +10:00
Andrej730
1553a75fed Fix regression installing an addon by drag'n'drop
Regression in [0].

Ref: !123832

[0]: fcba8b8099
2024-06-27 22:26:32 +10:00
Campbell Barton
c3d18854f3 Cleanup: avoid unnecessary separator
The extensions UI was aligning all buttons then adding a separator.
Simplify the layout by removing align which removes the need for an
explicit separator.
2024-06-27 21:35:23 +10:00
Campbell Barton
42e1239ba8 Core: support restricting the types an XML preset may load
Prevent potential problems from untrusted XML (typically themes)
traversing into data outside the intended targets.

From what I can tell it's not currently possible but changes to RNA
could allow for this which would likely go by unnoticed.

Further details in code-comments.
2024-06-27 21:21:07 +10:00
Campbell Barton
65d0f365a9 Cleanup: correct misleading name of internal function 2024-06-27 21:01:15 +10:00
Dalai Felinto
c6e452d865 UI: Extensions: Add a separator between Install and the "⌄" button
It was too easy to click on Install by mistake, while trying to click on
the "⌄" menu. This is particulary problematic since we enable add-ons by
default.

Co-authored by: Pablo Vazquez, based on (informal) report by Campbell Barton.
2024-06-27 12:06:53 +02:00
Campbell Barton
989de85cf6 Extensions: fixed & refactor internals for extension visibility
Add utility class to check extension visibility to remove
incomplete logic that was duplicated into operator code.
Also minor refactoring to reduce the number of arguments passed
to internal function.s
2024-06-27 14:33:47 +10:00
Damien Picard
f739d4832e I18n: Extract and disambiguate a few messages
Disambiguate
- "Thickness": use "Material" for EEVEE's thickness material setting.
- "Generated": use "Texture" for texture coordinates, "Image" for
  image source, keep default context for animation keyframe types.

Translate
- Split "Online access required to (check for|install) updates..."
  into 2x2 messages individually translatable.
- "Geometry" input in bake node.
- "New" for the Palette ID: extract it as part of the
   BLT_I18N_MSGID_MULTI_CTXT for "New".

Some issues reported by Gabriel Gazzán and Satoshi Yamasaki.

Pull Request: https://projects.blender.org/blender/blender/pulls/123404
2024-06-26 19:25:22 +02:00
Campbell Barton
99fcbf877d Extensions: Remove "Enabled" section, use sorting instead
This changes the sorting for the installed extensions.
- Update.
- Enable.
- A-Z.

Don't use A-Z for "Available" extensions to prevent name manipulation
to bring an extension up on the ranks.

Match the design of !123728, rewritten to support sorting across
multiple repositories and update tags which weren't handled in the PR.

Details:

- Remove the "Filter" popover & the option "Updates Available"
  since updates are now shown first.
- Add an iterator to for visible extensions to de-duplicate logic which
  was copied for code that scanned for tags.
- Split out logic for drawing an extension into it's own function.
- Tags are now calculated based on visible extensions limited by search.
2024-06-26 23:59:58 +10:00