Fix error in operator poll functions

- PALETTE_OT_color_add: crashed without a brush.
- SCREEN_OT_actionzone: crashed without a window.
- PREFERENCES_OT_studiolight_show: exception when opening prefs failed.
This commit is contained in:
Campbell Barton 2022-08-30 20:56:59 +10:00
parent 34e30baedf
commit 524d9a3e2f
3 changed files with 27 additions and 20 deletions

View File

@ -1116,6 +1116,10 @@ class PREFERENCES_OT_studiolight_show(Operator):
bl_label = ""
bl_options = {'INTERNAL'}
@classmethod
def poll(cls, _context):
return bpy.ops.screen.userpref_show.poll()
def execute(self, context):
context.preferences.active_section = 'LIGHTS'
bpy.ops.screen.userpref_show('INVOKE_DEFAULT')

View File

@ -723,15 +723,16 @@ typedef struct sActionzoneData {
static bool actionzone_area_poll(bContext *C)
{
wmWindow *win = CTX_wm_window(C);
bScreen *screen = WM_window_get_active_screen(win);
if (win && win->eventstate) {
bScreen *screen = WM_window_get_active_screen(win);
if (screen) {
const int *xy = &win->eventstate->xy[0];
if (screen && win && win->eventstate) {
const int *xy = &win->eventstate->xy[0];
LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
LISTBASE_FOREACH (AZone *, az, &area->actionzones) {
if (BLI_rcti_isect_pt_v(&az->rect, xy)) {
return true;
LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
LISTBASE_FOREACH (AZone *, az, &area->actionzones) {
if (BLI_rcti_isect_pt_v(&az->rect, xy)) {
return true;
}
}
}
}

View File

@ -361,7 +361,6 @@ static int palette_color_add_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
Paint *paint = BKE_paint_get_active_from_context(C);
Brush *brush = paint->brush;
ePaintMode mode = BKE_paintmode_get_active_from_context(C);
Palette *palette = paint->palette;
PaletteColor *color;
@ -369,17 +368,20 @@ static int palette_color_add_exec(bContext *C, wmOperator *UNUSED(op))
color = BKE_palette_color_add(palette);
palette->active_color = BLI_listbase_count(&palette->colors) - 1;
if (ELEM(mode,
PAINT_MODE_TEXTURE_3D,
PAINT_MODE_TEXTURE_2D,
PAINT_MODE_VERTEX,
PAINT_MODE_SCULPT)) {
copy_v3_v3(color->rgb, BKE_brush_color_get(scene, brush));
color->value = 0.0;
}
else if (mode == PAINT_MODE_WEIGHT) {
zero_v3(color->rgb);
color->value = brush->weight;
if (paint->brush) {
const Brush *brush = paint->brush;
if (ELEM(mode,
PAINT_MODE_TEXTURE_3D,
PAINT_MODE_TEXTURE_2D,
PAINT_MODE_VERTEX,
PAINT_MODE_SCULPT)) {
copy_v3_v3(color->rgb, BKE_brush_color_get(scene, brush));
color->value = 0.0;
}
else if (mode == PAINT_MODE_WEIGHT) {
zero_v3(color->rgb);
color->value = brush->weight;
}
}
return OPERATOR_FINISHED;