From 393b650fb44ce2c36fb9a43859eae49ca92cd720 Mon Sep 17 00:00:00 2001 From: Mike Solar Date: Sun, 2 Aug 2026 18:25:52 +0800 Subject: [PATCH] fix: opaque-pointer declarations need qmetatype include and single ownership The scripted Q_DECLARE_OPAQUE_POINTER sweep missed the QtCore/qmetatype.h include (cascade of stdlib errors) and declared a few types in two headers (redefinition of IsPointerDeclaredOpaque). Include qmetatype.h everywhere and declare each handle in exactly one header. --- engine/include/oakengine/audio.h | 1 + engine/include/oakengine/color.h | 1 + engine/include/oakengine/encoding.h | 1 + engine/include/oakengine/footage.h | 1 + engine/include/oakengine/node.h | 3 --- engine/include/oakengine/playback.h | 1 + engine/include/oakengine/preview.h | 1 + engine/include/oakengine/project.h | 3 +-- engine/include/oakengine/renderer.h | 1 + engine/include/oakengine/serializer.h | 1 + engine/include/oakengine/task.h | 1 + engine/include/oakengine/timeline.h | 2 +- engine/include/oakengine/traverse.h | 1 + engine/include/oakengine/viewer.h | 1 + 14 files changed, 13 insertions(+), 6 deletions(-) diff --git a/engine/include/oakengine/audio.h b/engine/include/oakengine/audio.h index b6000727d..a2097d55b 100644 --- a/engine/include/oakengine/audio.h +++ b/engine/include/oakengine/audio.h @@ -325,6 +325,7 @@ OAKENGINE_API OakAudioParams *oakengine_audio_processor_output_params( #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEngineAudioProcessor *) #endif diff --git a/engine/include/oakengine/color.h b/engine/include/oakengine/color.h index 9152178b9..3a95fcbd7 100644 --- a/engine/include/oakengine/color.h +++ b/engine/include/oakengine/color.h @@ -292,6 +292,7 @@ OAKENGINE_API int oakengine_color_transform_job_set_processor( #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEngineColorManager *) Q_DECLARE_OPAQUE_POINTER(OakEngineColorProcessor *) Q_DECLARE_OPAQUE_POINTER(OakEngineColorConfig *) diff --git a/engine/include/oakengine/encoding.h b/engine/include/oakengine/encoding.h index fe3dc5bd5..f0369dfba 100644 --- a/engine/include/oakengine/encoding.h +++ b/engine/include/oakengine/encoding.h @@ -500,6 +500,7 @@ oakengine_encoding_start_audio_recording(const OakEngineEncodingParams *params, #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEngineEncodingParams *) #endif diff --git a/engine/include/oakengine/footage.h b/engine/include/oakengine/footage.h index 1352bd5e2..7f737492a 100644 --- a/engine/include/oakengine/footage.h +++ b/engine/include/oakengine/footage.h @@ -511,6 +511,7 @@ OAKENGINE_API int oakengine_footage_invalidate(OakEngineFootage *self); #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEngineFootage *) #endif diff --git a/engine/include/oakengine/node.h b/engine/include/oakengine/node.h index 8e8cf8125..e2dafcedb 100644 --- a/engine/include/oakengine/node.h +++ b/engine/include/oakengine/node.h @@ -2087,9 +2087,6 @@ oakengine_node_get_video_frame_cache(const OakEngineNode *self); Q_DECLARE_OPAQUE_POINTER(OakEngineNode *) Q_DECLARE_OPAQUE_POINTER(OakEngineKeyframe *) Q_DECLARE_OPAQUE_POINTER(OakEngineNodeDragger *) -Q_DECLARE_OPAQUE_POINTER(OakEngineFrameCache *) -Q_DECLARE_OPAQUE_POINTER(OakEngineThumbnailCache *) -Q_DECLARE_OPAQUE_POINTER(OakEngineWaveformCache *) #endif #endif /* OAKENGINE_NODE_H */ diff --git a/engine/include/oakengine/playback.h b/engine/include/oakengine/playback.h index 9cc06a23c..2b3131280 100644 --- a/engine/include/oakengine/playback.h +++ b/engine/include/oakengine/playback.h @@ -213,6 +213,7 @@ OAKENGINE_API int oakengine_playback_last_error( #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEnginePlayback *) #endif diff --git a/engine/include/oakengine/preview.h b/engine/include/oakengine/preview.h index 7005fb81d..344f831ed 100644 --- a/engine/include/oakengine/preview.h +++ b/engine/include/oakengine/preview.h @@ -246,6 +246,7 @@ OAKENGINE_API void oakengine_preview_request_free( #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEnginePreviewRequest *) #endif diff --git a/engine/include/oakengine/project.h b/engine/include/oakengine/project.h index b3066680e..b411a8ce7 100644 --- a/engine/include/oakengine/project.h +++ b/engine/include/oakengine/project.h @@ -339,8 +339,7 @@ OAKENGINE_API int oakengine_project_set_color_reference_space( #ifdef __cplusplus } -Q_DECLARE_OPAQUE_POINTER(OakEngineNode *) -Q_DECLARE_OPAQUE_POINTER(OakEnginePlaybackCache *) +#include Q_DECLARE_OPAQUE_POINTER(OakEngineProject *) Q_DECLARE_OPAQUE_POINTER(OakEngineSequence *) #endif diff --git a/engine/include/oakengine/renderer.h b/engine/include/oakengine/renderer.h index e9f47dc12..7ca68fbb3 100644 --- a/engine/include/oakengine/renderer.h +++ b/engine/include/oakengine/renderer.h @@ -245,6 +245,7 @@ OAKENGINE_API void oakengine_audio_free(OakEngineAudioBuffer *self); #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEngineRenderer *) Q_DECLARE_OPAQUE_POINTER(OakEngineFrame *) Q_DECLARE_OPAQUE_POINTER(OakEngineAudioBuffer *) diff --git a/engine/include/oakengine/serializer.h b/engine/include/oakengine/serializer.h index 632ceca22..df8a71a9a 100644 --- a/engine/include/oakengine/serializer.h +++ b/engine/include/oakengine/serializer.h @@ -249,6 +249,7 @@ OAKENGINE_API int oakengine_clipboard_foreach_connection( #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEngineClipboard *) Q_DECLARE_OPAQUE_POINTER(OakEngineMarker *) #endif diff --git a/engine/include/oakengine/task.h b/engine/include/oakengine/task.h index 4b870bd7b..bcd5be1b7 100644 --- a/engine/include/oakengine/task.h +++ b/engine/include/oakengine/task.h @@ -288,6 +288,7 @@ oakengine_task_save_get_project(OakEngineTask *task); #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEngineTask *) #endif diff --git a/engine/include/oakengine/timeline.h b/engine/include/oakengine/timeline.h index ecc732434..046a47101 100644 --- a/engine/include/oakengine/timeline.h +++ b/engine/include/oakengine/timeline.h @@ -1312,10 +1312,10 @@ oakengine_clip_get_connected_viewer(const OakEngineBlock *clip); // Qt6 on some toolchains requires complete types in meta-type instantiations // (e.g. QList in TimelinePanel signals); declare the handles // opaque instead of pulling the engine definitions into the public header. +#include Q_DECLARE_OPAQUE_POINTER(OakEngineBlock *) Q_DECLARE_OPAQUE_POINTER(OakEngineClip *) Q_DECLARE_OPAQUE_POINTER(OakEngineMarkerList *) -Q_DECLARE_OPAQUE_POINTER(OakEngineMarker *) Q_DECLARE_OPAQUE_POINTER(OakEngineWorkarea *) Q_DECLARE_OPAQUE_POINTER(OakEngineTrack *) Q_DECLARE_OPAQUE_POINTER(OakEngineTrackList *) diff --git a/engine/include/oakengine/traverse.h b/engine/include/oakengine/traverse.h index 189971f45..3a1b695f3 100644 --- a/engine/include/oakengine/traverse.h +++ b/engine/include/oakengine/traverse.h @@ -162,6 +162,7 @@ OAKENGINE_API int oakengine_traverse_transform( #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEngineTraverseDb *) #endif diff --git a/engine/include/oakengine/viewer.h b/engine/include/oakengine/viewer.h index a801447b8..2c6a4534b 100644 --- a/engine/include/oakengine/viewer.h +++ b/engine/include/oakengine/viewer.h @@ -440,6 +440,7 @@ OAKENGINE_API int oakengine_waveform_cache_get_summary( #ifdef __cplusplus } +#include Q_DECLARE_OPAQUE_POINTER(OakEnginePlaybackCache *) Q_DECLARE_OPAQUE_POINTER(OakEngineFrameCache *) Q_DECLARE_OPAQUE_POINTER(OakEngineThumbnailCache *)