Fix gizmos showing for non-visible objects
[blender.git] / source / blender / editors / space_view3d / view3d_gizmo_camera.c
index 3c29d4c407ba8fe9645c76a4065f112f23d64ec7..ace22094e530eb334b40971694ea299f9506626a 100644 (file)
@@ -70,12 +70,16 @@ static bool WIDGETGROUP_camera_poll(const bContext *C, wmGizmoGroupType *UNUSED(
                return false;
        }
 
-       Object *ob = CTX_data_active_object(C);
-       if (ob && ob->type == OB_CAMERA) {
-               Camera *camera = ob->data;
-               /* TODO: support overrides. */
-               if (camera->id.lib == NULL) {
-                       return true;
+       ViewLayer *view_layer = CTX_data_view_layer(C);
+       Base *base = BASACT(view_layer);
+       if (base && BASE_VISIBLE(v3d, base)) {
+               Object *ob = base->object;
+               if (ob->type == OB_CAMERA) {
+                       Camera *camera = ob->data;
+                       /* TODO: support overrides. */
+                       if (camera->id.lib == NULL) {
+                               return true;
+                       }
                }
        }
        return false;
@@ -83,7 +87,8 @@ static bool WIDGETGROUP_camera_poll(const bContext *C, wmGizmoGroupType *UNUSED(
 
 static void WIDGETGROUP_camera_setup(const bContext *C, wmGizmoGroup *gzgroup)
 {
-       Object *ob = CTX_data_active_object(C);
+       ViewLayer *view_layer = CTX_data_view_layer(C);
+       Object *ob = OBACT(view_layer);
        float dir[3];
 
        const wmGizmoType *gzt_arrow = WM_gizmotype_find("GIZMO_GT_arrow_3d", true);
@@ -132,7 +137,8 @@ static void WIDGETGROUP_camera_refresh(const bContext *C, wmGizmoGroup *gzgroup)
                return;
 
        struct CameraWidgetGroup *cagzgroup = gzgroup->customdata;
-       Object *ob = CTX_data_active_object(C);
+       ViewLayer *view_layer = CTX_data_view_layer(C);
+       Object *ob = OBACT(view_layer);
        Camera *ca = ob->data;
        PointerRNA camera_ptr;
        float dir[3];
@@ -234,7 +240,8 @@ static void WIDGETGROUP_camera_message_subscribe(
         const bContext *C, wmGizmoGroup *gzgroup, struct wmMsgBus *mbus)
 {
        ARegion *ar = CTX_wm_region(C);
-       Object *ob = CTX_data_active_object(C);
+       ViewLayer *view_layer = CTX_data_view_layer(C);
+       Object *ob = OBACT(view_layer);
        Camera *ca = ob->data;
 
        wmMsgSubscribeValue msg_sub_value_gz_tag_refresh = {