windowmaker-wl/wrlib
Window Maker ef06f5ad8e wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers
Major architectural milestone: WINGs Wayland-only files now have ZERO
transitive X11 header dependency at the preprocessor level (verified by
gcc -E grep: 0 mentions of X11/Xlib.h after preprocessing).

Changes:

  1. WUtil.h, WINGs.h: stop including <X11/Xlib.h>.  wnative.h provides
     forward declarations for Display, GC, XftDraw, XftFont; opaque
     pointer-only typedefs that don't conflict with Xlib.h's actual
     definitions when the X11 backend later includes it.

  2. WINGsP.h.in: stop including <X11/Xlib.h>, <X11/Xutil.h>.  Drop or
     re-route every X11-typed prototype:
       - W_HandleDNDClientMessage / W_DragSourceStateHandler /
         W_DragDestinationStoreEnterMsgInfo / etc.
         → moved to new private header WINGs/WINGsX11.h
       - W_HandleSelectionEvent → moved
       - W_LookupString / W_KeycodeToKeysym → moved
       - W_DndState typedef → moved (renamed to W_X11DndState)
       - XClientMessageEvent / XEvent / XKeyPressedEvent in prototypes
         → use void * in shared protos, cast in WINGsX11.h

  3. W_View struct: replaces XSetWindowAttributes by-value field with a
     small backend-neutral 'attribs' struct holding only the fields
     wmaker/WPrefs actually use (background_pixmap, background_pixel,
     border_pixel, colormap, cursor, override_redirect, save_under,
     event_mask, do_not_propagate_mask).  The X11 view backend
     translates to XSetWindowAttributes when calling XCreateWindow.
     XIC xic field replaced with void *xic.

  4. W_Color struct: replaces XColor by-value with a same-layout
     anonymous struct (pixel/red/green/blue/flags/pad).  X11 backend
     uses memcpy to populate from XColor.

  5. WINGs/WINGsX11.h (new): private header for X11 backend.  Includes
     <X11/Xlib.h>, declares X11-typed internal prototypes used by drag*,
     selection, IME, x11_backend, KeyboardShortcuts.  Required by every
     *_x11.c file plus a handful of cross-component callers
     (KeyboardShortcuts.c, MouseSettings.c, xmodifier.c, wmiv.c,
     x11_backend.c).

  6. wraster.h.in: gain a WRASTER_NO_XLIB compile-time switch.  When
     defined the header skips <X11/Xlib.h> and provides forward decls
     for Display/Visual/XImage/GC/XftFont/etc.  All Wayland-only WINGs
     files (wclient_wl.c, w*_wl.c) define WRASTER_NO_XLIB on line 1.

  7. wfont.c: adds W_ParseXLFDToFcPattern (a hand-written XLFD parser)
     replacing XftXlfdParse.  Removes <X11/Xft/Xft.h> include from the
     shared font dispatcher (and from wfontpanel.c too).

Verification:

  $ for f in WINGs/.libs/{*_wl.o,wclient_wl.o}; do
        nm $f | awk '$1=="U"{print $2}' | grep -cE '^X[A-Z][a-z]'
    done
  0 for every Wayland file

  $ for f in WINGs/.libs/*.o; do
        case $f in *_x11.o|*_wl.o|wclient_wl.o) continue;; esac
        c=$(nm $f | awk '$1=="U"{print $2}' | grep -cE '^X[A-Z][a-z]')
        [ $c -gt 0 ] && echo "$c $f"
    done
  (empty — no shared file leaks an X11 symbol either)

  $ gcc -E ... wclient_wl.c | grep -c X11/Xlib.h
  0 (no transitive Xlib include)

The library still pulls libX11 through the *_x11.c files when those are
linked in.  A future configure flag --disable-x11-backend will exclude
*_x11.c entirely; at that point libWINGs will be a pure-Wayland library
with zero libX11 dependency.
2026-05-24 11:37:18 +02:00
..
po gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
tests gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
AUTHORS WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
COPYING WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
ChangeLog WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
INSTALL WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
Makefile.am complete F.2-5 2026-05-16 13:54:44 +02:00
NEWS WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
README WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
TODO WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
alpha_combine.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
color.c F.1: remove gratuitous Xlib.h includes from pure files 2026-05-16 12:30:12 +02:00
context.c wrlib: split RConvertImage into X11/Wayland backends 2026-05-14 16:41:15 +02:00
convert.c wrlib: split RConvertImage into X11/Wayland backends 2026-05-14 16:41:15 +02:00
convert.h wrlib: split RConvertImage into X11/Wayland backends 2026-05-14 16:41:15 +02:00
convert_funcs.h wrlib: split RConvertImage into X11/Wayland backends 2026-05-14 16:41:15 +02:00
convert_wl.c wrlib: split RConvertImage into X11/Wayland backends 2026-05-14 16:41:15 +02:00
convert_x11.c wrlib: split RConvertImage into X11/Wayland backends 2026-05-14 16:41:15 +02:00
convolve.c F.1: remove gratuitous Xlib.h includes from pure files 2026-05-16 12:30:12 +02:00
draw.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
flip.c F.1: remove gratuitous Xlib.h includes from pure files 2026-05-16 12:30:12 +02:00
gradient.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
imgformat.h complete F.2-5 2026-05-16 13:54:44 +02:00
load.c complete F.2-5 2026-05-16 13:54:44 +02:00
load_gif.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
load_jpeg.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
load_magick.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
load_png.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
load_ppm.c F.1: remove gratuitous Xlib.h includes from pure files 2026-05-16 12:30:12 +02:00
load_tiff.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
load_webp.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
load_xpm.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
load_xpm_normalized.c complete F.2-5 2026-05-16 13:54:44 +02:00
misc.c F.1: remove gratuitous Xlib.h includes from pure files 2026-05-16 12:30:12 +02:00
raster.c F.1: remove gratuitous Xlib.h includes from pure files 2026-05-16 12:30:12 +02:00
rotate.c F.1: remove gratuitous Xlib.h includes from pure files 2026-05-16 12:30:12 +02:00
rotate.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
save.c F.1: remove gratuitous Xlib.h includes from pure files 2026-05-16 12:30:12 +02:00
save_jpeg.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
save_png.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
save_xpm.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
scale.c F.1: remove gratuitous Xlib.h includes from pure files 2026-05-16 12:30:12 +02:00
scale.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wr_i18n.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wraster.h.in wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
xpixmap.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
xutil.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
xutil.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00

README

WindowMaker raster graphics library

This library is used to manipulate images and convert them to
a format that can be displayed through the X window system.
Read the wraster.h header for an idea of what is available


This Library is LGPL and
Copyright (c) Alfredo K. Kojima <kojima@inf.ufrgs.br>


The following environment variables control some parameters:

RIMAGE_CACHE <integer>

Is the maximum number of images to store in the internal cache.
Default is 8

RIMAGE_CACHE_SIZE <integer>

Is the size of the biggest image to store in the cache.
Default is 4k (64x64)



Porting
=======

It should be fairly easy to port it to other environments
(svgalib, libggi etc), probably only requiring wraster.h,
context.c and convert.c to be changed. Note that the X specific
code should be disabled in that case, including support for libXpm.