Fix T58256: error message w/ missing Select Box tool

Support space modes not having tools.
This commit is contained in:
Campbell Barton 2018-12-04 13:34:11 +11:00
parent 2ff79613a8
commit 80816fc712
Notes: blender-bot 2023-02-14 10:43:47 +01:00
Referenced by issue #58256, "Tool `Select Box` not found for space `IMAGE_EDITOR`." message is often displayed
2 changed files with 34 additions and 4 deletions

View File

@ -82,6 +82,9 @@ void WM_toolsystem_ref_sync_from_context(
void WM_toolsystem_init(struct bContext *C);
int WM_toolsystem_mode_from_spacetype_ex(
struct ViewLayer *view_layer, struct ScrArea *sa, int space_type,
bool *r_ensure);
int WM_toolsystem_mode_from_spacetype(
struct ViewLayer *view_layer, struct ScrArea *sa, int space_type);
bool WM_toolsystem_key_from_context(

View File

@ -559,10 +559,12 @@ void WM_toolsystem_init(bContext *C)
/* Rely on screen initialization for gizmos. */
}
int WM_toolsystem_mode_from_spacetype(
ViewLayer *view_layer, ScrArea *sa, int spacetype)
int WM_toolsystem_mode_from_spacetype_ex(
ViewLayer *view_layer, ScrArea *sa, int spacetype,
bool *r_ensure)
{
int mode = -1;
bool ensure = false;
switch (spacetype) {
case SPACE_VIEW3D:
{
@ -575,23 +577,39 @@ int WM_toolsystem_mode_from_spacetype(
else {
mode = CTX_MODE_OBJECT;
}
ensure = true;
break;
}
case SPACE_IMAGE:
{
SpaceImage *sima = sa->spacedata.first;
mode = sima->mode;
if (ELEM(mode, SI_MODE_PAINT, SI_MODE_UV)) {
ensure = true;
}
break;
}
case SPACE_NODE:
{
mode = 0;
ensure = true;
break;
}
}
if (r_ensure) {
*r_ensure = ensure;
}
return mode;
}
int WM_toolsystem_mode_from_spacetype(
ViewLayer *view_layer, ScrArea *sa, int spacetype)
{
return WM_toolsystem_mode_from_spacetype_ex(
view_layer, sa, spacetype,
NULL);
}
bool WM_toolsystem_key_from_context(
ViewLayer *view_layer, ScrArea *sa, bToolKey *tkey)
{
@ -787,6 +805,12 @@ static const char *toolsystem_default_tool(const bToolKey *tkey)
return "Comb";
}
break;
case SPACE_IMAGE:
switch (tkey->mode) {
case SI_MODE_PAINT:
return "Draw";
}
break;
}
return "Select Box";
@ -825,11 +849,14 @@ void WM_toolsystem_update_from_context(
bContext *C, WorkSpace *workspace, ViewLayer *view_layer,
ScrArea *sa)
{
bool ensure = false;
const bToolKey tkey = {
.space_type = sa->spacetype,
.mode = WM_toolsystem_mode_from_spacetype(view_layer, sa, sa->spacetype),
.mode = WM_toolsystem_mode_from_spacetype_ex(view_layer, sa, sa->spacetype, &ensure),
};
toolsystem_reinit_ensure_toolref(C, workspace, &tkey, NULL);
if (ensure) {
toolsystem_reinit_ensure_toolref(C, workspace, &tkey, NULL);
}
}