Fix hide object operator to do nothing if no object is selected.

This commit is contained in:
Brecht Van Lommel 2018-06-20 16:17:12 +02:00
parent 82dc5f91e8
commit 73d0a3f142
1 changed files with 16 additions and 7 deletions

View File

@ -210,8 +210,23 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
const bool unselected = RNA_boolean_get(op->ptr, "unselected");
bool changed = false;
/* Do nothing if no objects was selected. */
bool have_selected = false;
for (Base *base = view_layer->object_bases.first; base; base = base->next) {
if (base->flag & BASE_VISIBLED) {
if (base->flag & BASE_SELECTED) {
have_selected = true;
break;
}
}
}
if (!have_selected) {
return OPERATOR_CANCELLED;
}
/* Hide selected or unselected objects. */
for (Base *base = view_layer->object_bases.first; base; base = base->next) {
if (!(base->flag & BASE_VISIBLED)) {
continue;
@ -221,22 +236,16 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op)
if (base->flag & BASE_SELECTED) {
ED_object_base_select(base, BA_DESELECT);
base->flag |= BASE_HIDE;
changed = true;
}
}
else {
if (!(base->flag & BASE_SELECTED)) {
ED_object_base_select(base, BA_DESELECT);
base->flag |= BASE_HIDE;
changed = true;
}
}
}
if (!changed) {
return OPERATOR_CANCELLED;
}
BKE_layer_collection_sync(scene, view_layer);
DEG_id_tag_update(&scene->id, DEG_TAG_BASE_FLAGS_UPDATE);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);