From 784e896fad649dab508033d55f28bcde333a2178 Mon Sep 17 00:00:00 2001 From: Stu Black Date: Sat, 18 Apr 2026 19:54:08 -0400 Subject: [PATCH] Generate a distinct FFI module for constants in WINGs C headers. --- .gitignore | 2 ++ WINGs/wings-rs/Makefile.am | 21 ++++++++++++++++----- WINGs/wings-rs/patch_WINGsP.sed | 2 +- WINGs/wings-rs/src/defines.h | 16 ++++++++++++++++ 4 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 WINGs/wings-rs/src/defines.h diff --git a/.gitignore b/.gitignore index 82592007..eb0d3d85 100644 --- a/.gitignore +++ b/.gitignore @@ -155,6 +155,8 @@ WPrefs.app/WPrefs.desktop WINGs/wings-rs-tests/Cargo.lock WINGs/wings-rs/Cargo.lock WINGs/wings-rs/src/WINGsP.rs +WINGs/wings-rs/src/WINGsP/constants.rs +WINGs/wings-rs/src/WINGsP/mod.rs wmaker-rs/Cargo.lock wrlib-rs/src/ffi.rs wrlib-rs/Cargo.lock diff --git a/WINGs/wings-rs/Makefile.am b/WINGs/wings-rs/Makefile.am index f3fd5fc2..0464597c 100644 --- a/WINGs/wings-rs/Makefile.am +++ b/WINGs/wings-rs/Makefile.am @@ -1,7 +1,8 @@ AUTOMAKE_OPTIONS = RUST_SRC = \ - src/WINGsP.rs \ + src/WINGsP/constants.rs \ + src/WINGsP/mod.rs \ src/button.rs \ src/color.rs \ src/configuration.rs \ @@ -18,8 +19,9 @@ RUST_EXTRA = \ Cargo.lock \ Cargo.toml -src/WINGsP.rs: ../WINGs/WINGsP.h ../../wrlib/wraster.h ../WINGs/WINGs.h ../WINGs/WUtil.h Makefile patch_WINGsP.sed - $(BINDGEN) ../WINGs/WINGsP.h \ +src/WINGsP/mod.rs: ../WINGs/WINGsP.h ../../wrlib/wraster.h ../WINGs/WINGs.h ../WINGs/WUtil.h Makefile patch_WINGsP.sed + mkdir -p src/WINGsP \ + && $(BINDGEN) ../WINGs/WINGsP.h \ --no-recursive-allowlist \ --allowlist-type "^W_.+|^WM(View|Array|DragOperationType|Point|Data|OpenPanel|SavePanel|HashTable|DraggingInfo|SelectionProcs|Rect|EventProc|Widget|Size|Pixmap|FilePanel|List|ListItem)" \ --allowlist-type "^WM(FontPanel|Screen|Button)" \ @@ -52,11 +54,18 @@ src/WINGsP.rs: ../WINGs/WINGsP.h ../../wrlib/wraster.h ../WINGs/WINGs.h ../WINGs --allowlist-item "^WMAlignment" \ --allowlist-item "^WMReliefType" \ --allowlist-function "^WM(Create|Release|Draw)Pixmap|^WMCreate(|Blended|ScaledBlended)PixmapFromFile|^WMCreate(|Blended)PixmapFromRImage" \ - -o src/WINGsP.rs -- \ + -o src/WINGsP/mod.rs -- \ @PANGO_CFLAGS@ \ -I../../wrlib \ -I.. \ - && sed -i -r -f patch_WINGsP.sed src/WINGsP.rs + && sed -i -r -f patch_WINGsP.sed src/WINGsP/mod.rs + +src/WINGsP/constants.rs: src/WINGsP src/defines.h ../WINGs/WINGs.h Makefile + $(BINDGEN) src/defines.h \ + --allowlist-type WSystemIcon \ + -o src/WINGsP/constants.rs -- \ + -I../../wrlib \ + -I.. Cargo.lock: $(CARGO) build @@ -70,5 +79,7 @@ check-local: clean-local: $(CARGO) clean rm -f src/WINGsP.rs + rm -f src/WINGsP/constants.rs + rm -f src/WINGsP/mod.rs all: target/debug/libwings_rs.so diff --git a/WINGs/wings-rs/patch_WINGsP.sed b/WINGs/wings-rs/patch_WINGsP.sed index 56b8a149..939d6a15 100755 --- a/WINGs/wings-rs/patch_WINGsP.sed +++ b/WINGs/wings-rs/patch_WINGsP.sed @@ -4,7 +4,7 @@ # - The opaque type names _XftDraw and _XftFont are replaced with void*. # - Pango bindings aren't yet pulled into our Rust code, so PangoLayout is also demoted to void*. -1s/^/use wrlib_rs::ffi::*;\nuse wutil_rs::range::ffi::*;\nuse x11::xlib::*;\nuse crate::ffi::*;\n\n/ +1s/^/use wrlib_rs::ffi::*;\nuse wutil_rs::range::ffi::*;\nuse x11::xlib::*;\nuse crate::ffi::*;\n\npub mod constants;\n\n/ s/_XftDraw/::std::ffi::c_void/g s/_XftFont/::std::ffi::c_void/g s/PangoLayout/::std::ffi::c_void/g diff --git a/WINGs/wings-rs/src/defines.h b/WINGs/wings-rs/src/defines.h new file mode 100644 index 00000000..b10728f2 --- /dev/null +++ b/WINGs/wings-rs/src/defines.h @@ -0,0 +1,16 @@ +#include "../../WINGs/WINGs.h" + +typedef enum { + ReturnArrow = WSIReturnArrow, + HighlightedReturnArrow = WSIHighlightedReturnArrow, + ScrollerDimple = WSIScrollerDimple, + ArrowLeft = WSIArrowLeft, + HighlightedArrowLeft = WSIHighlightedArrowLeft, + ArrowRight = WSIArrowRight, + HighlightedArrowRight = WSIHighlightedArrowRight, + ArrowUp = WSIArrowUp, + HighlightedArrowUp = WSIHighlightedArrowUp, + ArrowDown = WSIArrowDown, + HighlightedArrowDown = WSIHighlightedArrowDown, + CheckMark = WSICheckMark, +} WSystemIcon;