Fix crash accessing image space properties without an active window
This commit is contained in:
parent
c4b9e2da8c
commit
006ff64538
Notes:
blender-bot
2023-02-14 06:00:49 +01:00
Referenced by issue #77348, Blender LTS: Maintenance Task 2.83
|
@ -106,7 +106,7 @@ bool ED_space_image_show_uvedit(struct SpaceImage *sima, struct Object *obedit);
|
|||
|
||||
bool ED_space_image_paint_curve(const struct bContext *C);
|
||||
|
||||
bool ED_space_image_check_show_maskedit(struct SpaceImage *sima, struct ViewLayer *view_layer);
|
||||
bool ED_space_image_check_show_maskedit(struct SpaceImage *sima, struct Object *obedit);
|
||||
bool ED_space_image_maskedit_poll(struct bContext *C);
|
||||
bool ED_space_image_maskedit_mask_poll(struct bContext *C);
|
||||
bool ED_space_image_cursor_poll(struct bContext *C);
|
||||
|
|
|
@ -610,7 +610,8 @@ bool ED_operator_mask(bContext *C)
|
|||
case SPACE_IMAGE: {
|
||||
SpaceImage *sima = area->spacedata.first;
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
return ED_space_image_check_show_maskedit(sima, view_layer);
|
||||
Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
|
||||
return ED_space_image_check_show_maskedit(sima, obedit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -475,11 +475,10 @@ bool ED_space_image_show_uvedit(SpaceImage *sima, Object *obedit)
|
|||
}
|
||||
|
||||
/* matches clip function */
|
||||
bool ED_space_image_check_show_maskedit(SpaceImage *sima, ViewLayer *view_layer)
|
||||
bool ED_space_image_check_show_maskedit(SpaceImage *sima, Object *obedit)
|
||||
{
|
||||
/* check editmode - this is reserved for UV editing */
|
||||
Object *ob = OBACT(view_layer);
|
||||
if (ob && ob->mode & OB_MODE_EDIT && ED_space_image_show_uvedit(sima, ob)) {
|
||||
if (obedit && ED_space_image_show_uvedit(sima, obedit)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -492,7 +491,8 @@ bool ED_space_image_maskedit_poll(bContext *C)
|
|||
|
||||
if (sima) {
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
return ED_space_image_check_show_maskedit(sima, view_layer);
|
||||
Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
|
||||
return ED_space_image_check_show_maskedit(sima, obedit);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -905,7 +905,7 @@ static int image_view_selected_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
}
|
||||
else if (ED_space_image_check_show_maskedit(sima, view_layer)) {
|
||||
else if (ED_space_image_check_show_maskedit(sima, obedit)) {
|
||||
if (!ED_mask_selected_minmax(C, min, max)) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
|
|
@ -368,10 +368,9 @@ static void image_listener(wmWindow *win, ScrArea *area, wmNotifier *wmn, Scene
|
|||
}
|
||||
break;
|
||||
case NC_MASK: {
|
||||
// Scene *scene = wmn->window->screen->scene;
|
||||
/* ideally would check for: ED_space_image_check_show_maskedit(scene, sima)
|
||||
* but we cant get the scene */
|
||||
if (sima->mode == SI_MODE_MASK) {
|
||||
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
|
||||
Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
|
||||
if (ED_space_image_check_show_maskedit(sima, obedit)) {
|
||||
switch (wmn->data) {
|
||||
case ND_SELECT:
|
||||
ED_area_tag_redraw(area);
|
||||
|
|
|
@ -1455,11 +1455,14 @@ static bool rna_SpaceImageEditor_show_paint_get(PointerRNA *ptr)
|
|||
|
||||
static bool rna_SpaceImageEditor_show_uvedit_get(PointerRNA *ptr)
|
||||
{
|
||||
SpaceImage *sima = (SpaceImage *)(ptr->data);
|
||||
SpaceImage *sima = ptr->data;
|
||||
bScreen *screen = (bScreen *)ptr->owner_id;
|
||||
Object *obedit = NULL;
|
||||
wmWindow *win = ED_screen_window_find(screen, G_MAIN->wm.first);
|
||||
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
|
||||
Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
|
||||
if (win != NULL) {
|
||||
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
|
||||
obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
|
||||
}
|
||||
return ED_space_image_show_uvedit(sima, obedit);
|
||||
}
|
||||
|
||||
|
@ -1467,22 +1470,28 @@ static bool rna_SpaceImageEditor_show_maskedit_get(PointerRNA *ptr)
|
|||
{
|
||||
SpaceImage *sima = (SpaceImage *)(ptr->data);
|
||||
bScreen *screen = (bScreen *)ptr->owner_id;
|
||||
Object *obedit = NULL;
|
||||
wmWindow *win = ED_screen_window_find(screen, G_MAIN->wm.first);
|
||||
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
|
||||
return ED_space_image_check_show_maskedit(sima, view_layer);
|
||||
if (win != NULL) {
|
||||
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
|
||||
obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
|
||||
}
|
||||
return ED_space_image_check_show_maskedit(sima, obedit);
|
||||
}
|
||||
|
||||
static void rna_SpaceImageEditor_image_set(PointerRNA *ptr,
|
||||
PointerRNA value,
|
||||
struct ReportList *UNUSED(reports))
|
||||
{
|
||||
SpaceImage *sima = (SpaceImage *)(ptr->data);
|
||||
bScreen *screen = (bScreen *)ptr->owner_id;
|
||||
wmWindow *win = ED_screen_window_find(screen, G_MAIN->wm.first);
|
||||
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
|
||||
Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
|
||||
|
||||
BLI_assert(BKE_id_is_in_global_main(value.data));
|
||||
SpaceImage *sima = ptr->data;
|
||||
bScreen *screen = (bScreen *)ptr->owner_id;
|
||||
Object *obedit = NULL;
|
||||
wmWindow *win = ED_screen_window_find(screen, G_MAIN->wm.first);
|
||||
if (win != NULL) {
|
||||
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
|
||||
obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
|
||||
}
|
||||
ED_space_image_set(G_MAIN, sima, obedit, (Image *)value.data, false);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue