UI: Updated Windows File Registration #107013

Merged
Harley Acheson merged 2 commits from Harley/blender:RegisterNew into main 2023-05-24 21:20:02 +02:00
Member

Windows file associations using ProgID, needed because of the launcher.
This fixes "pin to taskbar" and Recent Documents lists, allow per-
version jump lists and an "Open with" list with multiple versions.


This is mostly code by @LazyDodo from here: https://archive.blender.org/developer/D13587

When we introduced the launcher it created a few problems:

  • When people pinned blender to the taskbar it would launch the regular executable, popping back up the console window
  • Because the launcher is configured to start .blend files recent files do not show up in the (possibly pinned) taskbar button

Additionally with modern blender versions being able to install side-by-side, it's hard to even guess what specific blender version is currently configured to launch blender. This PR changes the registration in the following ways:

  • allow side by side registrations (but the last registered version will still be the default)
  • When the users choses to pin blender, the launcher will be used rather than blender.exe
  • Per version recent file lists
  • Multiple versions on the "Open with" list

image.png

This also adds an "unregister" option to help cleanup unwanted cruft and allow more control when dealing with multiple blender versions. It also allows these processes to happen for the current user or for all users. The latter will very likely trigger a User Access Control prompt.

image

This PR alters and adds some command-line arguments:

  • -r is altered so that it registers only as current user.
  • -ra registers for all users, needed for some network installations
  • -u unregisters as current user
  • -ua unregisters for all users, needed for some network installations

We would need to alter the installer so that it calls "-ra" when installing and "-ua" upon uninstallation.

Windows file associations using ProgID, needed because of the launcher. This fixes "pin to taskbar" and Recent Documents lists, allow per- version jump lists and an "Open with" list with multiple versions. --- This is mostly code by @LazyDodo from here: https://archive.blender.org/developer/D13587 When we introduced the launcher it created a few problems: * When people pinned blender to the taskbar it would launch the regular executable, popping back up the console window * Because the launcher is configured to start .blend files recent files do not show up in the (possibly pinned) taskbar button Additionally with modern blender versions being able to install side-by-side, it's hard to even guess what specific blender version is currently configured to launch blender. This PR changes the registration in the following ways: * allow side by side registrations (but the last registered version will still be the default) * When the users choses to pin blender, the launcher will be used rather than blender.exe * Per version recent file lists * Multiple versions on the "Open with" list ![image.png](/attachments/28bf2b9d-1f7a-4ff5-90a0-b4b3f0ba9dc8) This also adds an "unregister" option to help cleanup unwanted cruft and allow more control when dealing with multiple blender versions. It also allows these processes to happen for the current user or for all users. The latter will very likely trigger a User Access Control prompt. ![image](/attachments/fb2941c3-a540-40b7-9301-30acf9ce5a26) This PR alters and adds some command-line arguments: * `-r` is altered so that it registers only as current user. * `-ra` registers for all users, needed for some network installations * `-u` unregisters as current user * `-ua` unregisters for all users, needed for some network installations We would need to alter the installer so that it calls "-ra" when installing and "-ua" upon uninstallation.
Harley Acheson force-pushed RegisterNew from 60911fd0d1 to 2b09300fb9 2023-04-20 00:41:08 +02:00 Compare
Harley Acheson force-pushed RegisterNew from 2b09300fb9 to dcd0d4e55a 2023-04-22 00:40:10 +02:00 Compare
Harley Acheson force-pushed RegisterNew from dcd0d4e55a to 0ebb8ec902 2023-04-25 02:10:20 +02:00 Compare
Harley Acheson changed title from WIP: Updated Windows File Registration to UI: Updated Windows File Registration 2023-04-25 17:42:31 +02:00
Harley Acheson added this to the User Interface project 2023-04-25 17:42:47 +02:00
Harley Acheson requested review from Ray molenkamp 2023-04-25 17:45:08 +02:00
Harley Acheson requested review from Brecht Van Lommel 2023-04-25 17:45:24 +02:00
Harley Acheson changed title from UI: Updated Windows File Registration to WIP: UI: Updated Windows File Registration 2023-04-25 20:09:12 +02:00
Author
Member

To do this right it looks like more options need to be added.

We'd need a user-facing checkmark for "All Users", disabled by default. The operators would probably have to ShellExecuteEx ourselves with "runas" (if all users) and WaitForSingleObject in order to report success or failure. The installer would have to use "-ra" and then we can have the uninstall use "-ua".

To do this right it looks like more options need to be added. We'd need a user-facing checkmark for "All Users", disabled by default. The operators would probably have to ShellExecuteEx ourselves with "runas" (if all users) and WaitForSingleObject in order to report success or failure. The installer would have to use "-ra" and then we can have the uninstall use "-ua".
Member

That was a much longer conversation in person, nice summary!

That was a much longer conversation in person, nice summary!
Harley Acheson force-pushed RegisterNew from f63a9486d4 to 5efb87545e 2023-04-28 17:13:02 +02:00 Compare
Author
Member

@LazyDodo - How's this look?

image

It does exactly what you think, initiating UAC for All Users, reports success and failure properly, etc.

@LazyDodo - How's this look? ![image](/attachments/fe82d33a-a73b-443a-b802-c245a7bf634b) It does exactly what you think, initiating UAC for All Users, reports success and failure properly, etc.
Member

That doesn't look like the greatest UI? Then again, I'm not on the UI team, so take any criticism here with a grain of salt, and don't by shy telling me to mind my own business.

how about .... (pardon my ms-paint)

image

That doesn't look like the greatest UI? Then again, I'm not on the UI team, so take any criticism here with a grain of salt, and don't by shy telling me to mind my own business. how about .... (pardon my ms-paint) ![image](/attachments/99d44704-da6a-4d84-accb-fa254bec81a4)
Author
Member

That doesn't look like the greatest UI?

No, will play around a bit. The spoiler seems to be the checkbox. When the buttons are on the same row the checkmark looks to be applying to just one of them. It does a bit with mine too of course.

Will keep playing.

But have to say having it do the UAC thing feels pretty awesome.

> That doesn't look like the greatest UI? No, will play around a bit. The spoiler seems to be the checkbox. When the buttons are on the same row the checkmark looks to be applying to just one of them. It does a bit with mine too of course. Will keep playing. But have to say having it do the UAC thing feels pretty awesome.
Harley Acheson changed title from WIP: UI: Updated Windows File Registration to UI: Updated Windows File Registration 2023-05-03 17:57:44 +02:00
Harley Acheson force-pushed RegisterNew from b78291f2f7 to 9ee4b64ee9 2023-05-18 01:29:23 +02:00 Compare
Ray molenkamp approved these changes 2023-05-19 02:17:26 +02:00
Ray molenkamp left a comment
Member

mostly small nitpickings, lgtm for landing in 4.0 without another round of review from my end.

mostly small nitpickings, lgtm for landing in 4.0 without another round of review from my end.
@ -1195,0 +1210,4 @@
if (!SUCCEEDED(hr))
return;
/* Find the current executable, and see if it's blender.exe if not bail out. */
Member

Nitpicking, especially since i'm pretty sure this is my code, if we move the check for blender.exe before SHGetPropertyStoreForWindow we can save our selves a SHGetPropertyStoreForWindow/Release call when things "go bad"

Nitpicking, especially since i'm pretty sure this is my code, if we move the check for `blender.exe` before `SHGetPropertyStoreForWindow` we can save our selves a `SHGetPropertyStoreForWindow/Release` call when things "go bad"
Harley marked this conversation as resolved
@ -1195,0 +1218,4 @@
return;
}
/* Set the launcher as the shell command so the console window will not flash.
Member

This can move inside the if (SUCCEEDED(hr)) { branch no need to execute it if we're not gonna use it.

This can move inside the `if (SUCCEEDED(hr)) {` branch no need to execute it if we're not gonna use it.
Harley marked this conversation as resolved
@ -52,3 +51,2 @@
}
if (!background) {
MessageBox(0, "Could not register file extension.", "Blender error", MB_OK | MB_ICONERROR);
printf("%s\n", message);
Member

would fprintf(stderr, be nicer here?

would `fprintf(stderr, ` be nicer here?
Harley marked this conversation as resolved
@ -62,3 +74,2 @@
HKEY root = 0;
BOOL usr_mode = false;
DWORD dwd = 0;
HKEY hkey = 0;
Member

hkey_progid

`hkey_progid`
Harley marked this conversation as resolved
Brecht Van Lommel requested changes 2023-05-19 15:21:14 +02:00
Brecht Van Lommel left a comment
Owner

Unregistering seems pretty obscure, I can't think of a situation where I would do that from within Blender in practice. But I guess why not.

Unregistering seems pretty obscure, I can't think of a situation where I would do that from within Blender in practice. But I guess why not.
@ -248,6 +253,8 @@ GHOST_TTrackpadInfo GHOST_WindowWin32::getTrackpadInfo()
GHOST_WindowWin32::~GHOST_WindowWin32()
{
unregisterWindowAppUserModelProperties();

Put inside if (m_hWnd) {.

Put inside `if (m_hWnd) {`.
Harley marked this conversation as resolved
@ -1195,0 +1203,4 @@
void GHOST_WindowWin32::registerWindowAppUserModelProperties()
{
IPropertyStore *pstore;
char BlPath[MAX_PATH];

Use snake_case for variables.

Use snake_case for variables.
Harley marked this conversation as resolved
@ -1195,0 +1207,4 @@
wchar_t shell_command[MAX_PATH];
HRESULT hr = SHGetPropertyStoreForWindow(m_hWnd, IID_PPV_ARGS(&pstore));
if (!SUCCEEDED(hr))

Always use {}.

Always use {}.
Harley marked this conversation as resolved
@ -643,3 +641,1 @@
split.alignment = 'RIGHT'
split.label(text="")
split.operator("preferences.associate_blend", text="Make Default")
layout.label(text="Open blend files with this installation")

installation -> Blender version

installation -> Blender version
Harley marked this conversation as resolved
@ -137,0 +140,4 @@
char BlPath[MAX_PATH];
char InstallDir[FILE_MAXDIR];
char SysDir[FILE_MAXDIR];
const char* ThumbHandlerDLL;

Code style is also off here, no snake_case, wrong location for *.

Code style is also off here, no snake_case, wrong location for `*`.
Harley marked this conversation as resolved
@ -235,6 +342,41 @@ bool BLI_windows_external_operation_execute(const char *filepath, const char *op
return ShellExecuteExW(&shellinfo);
}
bool BLI_windows_execute_self(const char* parameters, bool wait, bool elevated, bool silent)

const bool for arguments.

`const bool` for arguments.
Harley marked this conversation as resolved
@ -281,0 +300,4 @@
if (all_users && BLI_windows_execute_self("-ua", true, true, true)) {
BKE_report(op->reports, RPT_INFO, "File association unregistered");
WM_cursor_wait(false);
MessageBox(

I don't think these operations need a messagebox. Maybe on failure, but not on success.

I don't think these operations need a messagebox. Maybe on failure, but not on success.
Harley marked this conversation as resolved
@ -5819,0 +5821,4 @@
prop = RNA_def_property(srna, "register_all_users", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_REGISTER_ALL_USERS);
RNA_def_property_ui_text(prop, "Register for All Users", "Registration/Unregistration for All Users requires elevated privileges");

The name or description does not indicate what is being registered.
The description should be a proper sentence:

Make this Blender version open .blend files for all users. Requires elevated privileges.
The name or description does not indicate what is being registered. The description should be a proper sentence: ``` Make this Blender version open .blend files for all users. Requires elevated privileges. ```
Harley marked this conversation as resolved
@ -631,1 +630,4 @@
BLI_args_print_arg_doc(ba, "-r");
BLI_args_print_arg_doc(ba, "-ra");
BLI_args_print_arg_doc(ba, "-u");
BLI_args_print_arg_doc(ba, "-ua");

Use longer, less obscure argument names, and only keep -r as an alternative abbreviation. I don't think we should take a single letter u for a relatively unimportant feature.

Use longer, less obscure argument names, and only keep `-r` as an alternative abbreviation. I don't think we should take a single letter `u` for a relatively unimportant feature.
Harley marked this conversation as resolved
Member

Unregistering seems pretty obscure, I can't think of a situation where I would do that from within Blender in practice. But I guess why not.

Used to be obscure, but not anymore, with blender 4.0, 4.1, 4.2 now installing and registering side by side, you'd want a way to get rid of the 4.0 registration if you decide to remove it from your system. Sure the MSI installer will take care of that, but it only covers part of our user base and the remaining part of the user base may not be tech savvy enough to navigate the CLI to do it.

> Unregistering seems pretty obscure, I can't think of a situation where I would do that from within Blender in practice. But I guess why not. Used to be obscure, but not anymore, with blender 4.0, 4.1, 4.2 now installing and registering side by side, you'd want a way to get rid of the 4.0 registration if you decide to remove it from your system. Sure the MSI installer will take care of that, but it only covers part of our user base and the remaining part of the user base may not be tech savvy enough to navigate the CLI to do it.

Actually, this patch doesn't seem to make any changes to the installer as far as I can tell. Should it now do anything to support the unregister and app ID with the version in it?

Also maybe the MSIX for the Windows store needs some update?

Actually, this patch doesn't seem to make any changes to the installer as far as I can tell. Should it now do anything to support the unregister and app ID with the version in it? Also maybe the MSIX for the Windows store needs some update?
Member

that part of the installer lives in SVN (win64_vc15\package\installer_wix\WIX.template) so review of that bit will be a bit challenging. Probably easier to track updating all installers and stores for this in a separate ticket? since this has to land first before we can do any of the other work.

that part of the installer lives in SVN (`win64_vc15\package\installer_wix\WIX.template`) so review of that bit will be a bit challenging. Probably easier to track updating all installers and stores for this in a separate ticket? since this has to land first before we can do any of the other work.
Author
Member

@blender-bot build

@blender-bot build
Author
Member

@blender-bot build

@blender-bot build
Brecht Van Lommel approved these changes 2023-05-19 20:24:09 +02:00
Brecht Van Lommel left a comment
Owner

Looks good to me now by itself, assuming MSI and MSIX changes will come after this.

I don't know the exact process of creating an MSIX package for local testing, but can help figure it out if needed.

Looks good to me now by itself, assuming MSI and MSIX changes will come after this. I don't know the exact process of creating an MSIX package for local testing, but can help figure it out if needed.
Author
Member

Following is our current proposed WIX.template with changes to call with " --register-allusers" on installation, and " --unregister-allusers" during uninstall. As mentioned this would be done outside this PR.

Following is our current proposed WIX.template with changes to call with " --register-allusers" on installation, and " --unregister-allusers" during uninstall. As mentioned this would be done outside this PR.
Member

I have to admit, i wasn't involved/consulted on the windows store, I'm not even sure if the secret sauce for that one is publicly available. There's some resource files in git over at release\windows\msix\ which i'm not entirely sure how to use.

I have to admit, i wasn't involved/consulted on the windows store, I'm not even sure if the secret sauce for that one is publicly available. There's some resource files in git over at `release\windows\msix\` which i'm not entirely sure how to use.
Author
Member

Microsoft Store installations are more problematic than I realized. These are so sandboxed that these changes to the registry can't work. Registering file associations this way or from the command-line just silently fail because the OS pretends success.

Therefore this PR now adds a function to detect Store installations so that the buttons can disable with nice tooltip explanations:

image

I think it is better to show the items disabled rather than hiding them as this seems less likely to result in bug reports.

The detection of Store installations is only doing so by examining the executable path for "\WindowsApps" which seems weak but I haven't (yet) found anything better.

Microsoft Store installations are more problematic than I realized. These are so sandboxed that these changes to the registry can't work. Registering file associations this way or from the command-line just silently fail because the OS pretends success. Therefore this PR now adds a function to detect Store installations so that the buttons can disable with nice tooltip explanations: ![image](/attachments/1a911390-2c5e-421b-9a9c-29657d96e22b) I think it is better to show the items disabled rather than hiding them as this seems less likely to result in bug reports. The detection of Store installations is only doing so by examining the executable path for "\WindowsApps\" which seems weak but I haven't (yet) found anything better.

It seems file type association is already in release/windows/msix/AppxManifest.xml.template. Is that not working?

If that works, I'd still suggest to hide this panel entirely, or at least replace the buttons by some text explaining things.

It seems file type association is already in `release/windows/msix/AppxManifest.xml.template`. Is that not working? If that works, I'd still suggest to hide this panel entirely, or at least replace the buttons by some text explaining things.
Author
Member

It seems file type association is already in release/windows/msix/AppxManifest.xml.template. Is that not working?

That should work for associating .blend files with the executable, and we have had no reports of it not working. But doing it that way cannot install the thumbnailer and it looks like there is no way of doing so while the program runs in this sandboxed environment. We have had at least one report of that, #107921.

If that works, I'd still suggest to hide this panel entirely, or at least replace the buttons by some text explaining things.

Hiding the panel entirely was Ray's first thought too, and I don't mind doing that. My idea above with the disabled buttons and the explanatory disabled hints was this explains the situation better so we wouldn't get complaints of "Youtube says these buttons should be here". But it isn't a very good explanation that can only be seen by hovering so I'm probably wrong on that.

Hiding the panel wouldn't have stopped #107921 so probably "replace the buttons by some text explaining things" might work.

> It seems file type association is already in `release/windows/msix/AppxManifest.xml.template`. Is that not working? That should work for associating .blend files with the executable, and we have had no reports of it not working. But doing it that way cannot install the thumbnailer and it looks like there is no way of doing so while the program runs in this sandboxed environment. We have had at least one report of that, #107921. > If that works, I'd still suggest to hide this panel entirely, or at least replace the buttons by some text explaining things. Hiding the panel entirely was Ray's first thought too, and I don't mind doing that. My idea above with the disabled buttons and the explanatory disabled hints was this explains the situation better so we wouldn't get complaints of "Youtube says these buttons should be here". But it isn't a very good explanation that can only be seen by hovering so I'm probably wrong on that. Hiding the panel wouldn't have stopped #107921 so probably "replace the buttons by some text explaining things" might work.
Member

My gut instincts are often wrong, i'm with @Harley on this now, explaining why it's disabled will generate fewer support tickets than flat out hiding it.

My gut instincts are often wrong, i'm with @Harley on this now, explaining why it's disabled will generate fewer support tickets than flat out hiding it.
Thumbnails should be possible, it seems Krita does it? https://invent.kde.org/graphics/krita/-/blob/master/packaging/windows/msix/manifest.xml.in https://learn.microsoft.com/en-us/windows/apps/desktop/modernize/desktop-to-uwp-extensions#show-file-contents-in-a-thumbnail-image-within-file-explorer I'm fine with some text until that is working, but maybe it's faster to make the thumbnail work.
Author
Member

I'm fine with some text until that is working, but maybe it's faster to make the thumbnail work.

Those links do imply that it might be possible for the store installer to do both the registration of blend files and install the thumbnailer, because it runs with elevated privileges. But it would still not be possible to do or change these things within Blender since it is sandboxed while running.

So the above links might solve #107921 but we are still stuck with having to hide or explain these buttons to the users who have installed via the MS store. And I guess if there is chance we want to detect this from python I should add... a readonly dynamic property? bpy.context.preferences.system.is_msstore_installation or similar.

> I'm fine with some text until that is working, but maybe it's faster to make the thumbnail work. Those links do imply that it might be possible for the store _installer_ to do both the registration of blend files and install the thumbnailer, because it runs with elevated privileges. But it would still not be possible to do or change these things _within_ Blender since it is sandboxed while running. So the above links might solve #107921 but we are still stuck with having to hide or explain these buttons to the users who have installed via the MS store. And I guess if there is chance we want to detect this from python I should add... a readonly dynamic property? bpy.context.preferences.system.is_msstore_installation or similar.
Author
Member

Now also showing different text - "Not applicable to MS Store installation"- when in this state:

image

Now also showing different text - "Not applicable to MS Store installation"- when in this state: ![image](/attachments/d4957e25-e10b-468b-8b6d-5a5c4e9cbd0a)

Can this be just text, no grayed out buttons? Something like:

Microsoft Store installation.
Default Apps for opening blend files can be set in the Windows Settings.
Can this be just text, no grayed out buttons? Something like: ``` Microsoft Store installation. Default Apps for opening blend files can be set in the Windows Settings. ```
Author
Member

Can this be just text, no grayed out buttons? Something like...

That works quite well.

image

Note that I might skive off early today. Its a national holiday and wife is home.

> Can this be just text, no grayed out buttons? Something like... That works quite well. ![image](/attachments/4f4ad6c2-7733-4c49-a396-72da7a008990) Note that I might skive off early today. Its a national holiday and wife is home.
Brecht Van Lommel approved these changes 2023-05-23 18:51:22 +02:00
Brecht Van Lommel left a comment
Owner

Just some nitpicks, for which fixes don't need further review from me.

Just some nitpicks, for which fixes don't need further review from me.
@ -665,6 +668,22 @@ static void rna_UserDef_viewport_lights_update(Main *bmain, Scene *scene, Pointe
rna_userdef_update(bmain, scene, ptr);
}
static int rna_register_all_users_editable(struct PointerRNA *UNUSED(ptr), const char **r_info)

This is unnecessary now, and settings that do nothing should generally still be editable.

This is unnecessary now, and settings that do nothing should generally still be editable.
Harley marked this conversation as resolved
@ -668,0 +681,4 @@
static bool rna_userdef_is_msstore_installation_get(PointerRNA *UNUSED(ptr))
{
return BLI_windows_is_store_install();

Needs # ifdef WIN32

Needs `# ifdef WIN32`
Harley marked this conversation as resolved
@ -5819,0 +5848,4 @@
"is_msstore_installation",
false,
"Is MS Store Installation",
"Whether this blender installation is a sandboxed Microsoft Store version.");

I'd avoid the abbrevation and instead use is_microsoft_store_install and "Microsoft Store Install"

I'd avoid the abbrevation and instead use `is_microsoft_store_install` and `"Microsoft Store Install"`
Harley marked this conversation as resolved
Harley Acheson force-pushed RegisterNew from 2fb00457e1 to 7de823924c 2023-05-24 19:30:33 +02:00 Compare
Author
Member

@blender-bot build

@blender-bot build
Harley Acheson added 1 commit 2023-05-24 20:59:32 +02:00
buildbot/vexp-code-patch-coordinator Build done. Details
3d8dfe2fb0
Calm warning
Author
Member

@blender-bot build windows

@blender-bot build windows
Harley Acheson merged commit 9cf77efaa0 into main 2023-05-24 21:20:02 +02:00
Harley Acheson deleted branch RegisterNew 2023-05-24 21:20:04 +02:00
Howard Trickey referenced this issue from a commit 2023-05-29 02:51:37 +02:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#107013
No description provided.