windowmaker-wl/WINGs
Window Maker a4eb10b2b5 wrlib: split X11 image-conversion path; --disable-x11-wraster
Phase θ — wrlib's X11 image-conversion path (RConvertImage,
RPutXImage, the X11 RCreateContext, libXpm-based RLoadXPM) is now
opt-out via --disable-x11-wraster, mirroring the WINGs phase η work.

Result: with --disable-x11-backend --disable-x11-wraster the WINGs
runtime libraries have ZERO libX11 transitive deps:

  $ ldd WINGs/.libs/libWINGs.so | grep X11
  (empty)
  $ ldd wrlib/.libs/libwraster.so | grep X11
  (empty)

That was the last libX11 transitive dep coming through WINGs — the
goal of the API surgery is now achieved at the library level.

configure.ac:
- New --enable-x11-wraster (default = same as --enable-x11-backend),
  AM_CONDITIONAL([USE_X11_WRASTER]), AC_DEFINE([USE_X11_WRASTER]).
  Forcing --disable-x11-wraster while --enable-x11-backend is rejected
  (X11 backend depends on the X11 conversion path).
- WRASTER_GFXLIBS_NO_XPM: GFXLIBS with -lXpm filtered (libXpm pulls
  libX11; load_xpm_normalized.c is the X11-free XPM loader used in
  the disabled-X11 build).
- WINGS_PANGO_LIBS_NO_XFT: PANGO_LIBS with -lpangoxft-* and -lXft
  filtered (PangoXft depends on libXft -> libX11; pangoft2 path is
  the X11-free Pango variant).

wrlib/Makefile.am:
- Split source list: shared / X11-only / Wayland-only.
- X11 sources (context.c, convert.c, convert_x11.c, xpixmap.c,
  xutil.c, load_xpm.c) only built when USE_X11_WRASTER.
- New context_wl.c (always built) — Wayland-mode RCreateContextWayland
  extracted from context.c.
- New wstubs_no_x11.c (only built when !USE_X11_WRASTER) — empty
  stubs for the public wraster API symbols normally exported from
  the X11 path (RCreateContext, RDestroyContext, RConvertImage,
  RConvertImageMask, RGetClosestXColor, RCreateImageFromDrawable,
  RCreateImageFromXImage, RCreateXImage, RGetXImage, RDestroyXImage,
  RPutXImage, RGetImageFromXPMData, RLoadXPM).
- @XLIBS@/@LIBXMU@ only added to libwraster_la_LIBADD when
  USE_X11_WRASTER; load_xpm.c only built when (USE_XPM and
  USE_X11_WRASTER).
- Added --filter USE_X11_WRASTER to the wraster.h generation rule
  so the @!USE_X11_WRASTER@ lines (forcing WRASTER_NO_XLIB) are
  retained when X11 is disabled.

wrlib/wraster.h.in:
- When USE_X11_WRASTER is undefined at config time, force
  WRASTER_NO_XLIB so consumers see only forward-decl'd opaque types
  (Display/Visual/XImage/etc.) and never <X11/Xlib.h>.
- Added True/False/None defines to the WRASTER_NO_XLIB block (raster.c
  uses them; previously got via Xlib.h).

wrlib/context.c — RCreateContextWayland moved out to context_wl.c.
wrlib/wstubs_no_x11.c — new (157 lines).
wrlib/context_wl.c — new (extracted Wayland branch).

WINGs/Makefile.am:
- libWINGs_la_LIBADD now uses WINGS_PANGO_LIBS, which is @PANGO_LIBS@
  when X11 backend enabled, @WINGS_PANGO_LIBS_NO_XFT@ otherwise.

WINGs/widgets.c — WMCreateScreen + WMCreateSimpleApplicationScreen
moved to widgets_x11.c (they use DefaultScreen() and RCreateContext()
which are X11-only).  Stubs added in WINGs/wstubs_no_x11.c.
WINGs shared rootWin assignment now reads context->drawable instead
of calling X11 RootWindow() macro directly.

WINGs/WINGs/wnative.h — added X11-numeric constants used by shared
WINGs widget code:
- Button1..Button5 (X.h pointer-button numbers)
- KeyPress..LASTEvent (X.h event-type constants)
- CWBackPixmap..CWCursor (X.h CreateWindow/ChangeWindowAttributes
  mask bits)
- WMShortRect (XRectangle layout-compatible struct)
All guarded by #ifndef so X11 headers can override on the X11 build.

WINGs/configuration.c — dropped unused <X11/Xlocale.h> include.
WINGs/wruler.c, wtabview.c, wtext.c — replaced raw XPoint/XRectangle
with WMShortPoint/WMShortRect; replaced lone XSetWindowAttributes
shim with direct view->attribs.cursor access.

src/WindowMaker.h — explicitly include <X11/Xlib.h>, <X11/Xutil.h>,
<X11/Xresource.h>, <X11/Xatom.h>.  The wmaker compositor uses these
extensively in its public headers; previously got them transitively
via WINGs.h.  After the WINGs surgery WINGs.h no longer pulls Xlib,
so the compositor must include them itself.

Verified:
  Default build (--enable-x11-backend, --enable-x11-wraster):
    Window Maker 0.96.0 boots, all features intact.
  Pure-Wayland build (--disable-x11-backend --disable-x11-wraster):
    libwraster.so / libWINGs.so build cleanly, no libX11 in ldd.
    (wmaker compositor binary still has X11 deps from src/* code;
     out of scope for this commit — that's a compositor-level
     refactor.)
2026-05-24 12:24:45 +02:00
..
Documentation gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
Examples gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
Extras wings: phase β — rename X11 typedefs in shared/Wayland code 2026-05-24 10:49:47 +02:00
Resources gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
Tests wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
WINGs wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
po gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
BUGS 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
Makefile.am wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +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
array.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
bagtree.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
configuration.c wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
data.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
dragcommon.c wings: phase γ (dragcommon) — split X11 XDND wire code into _x11 2026-05-24 10:58:22 +02:00
dragcommon_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
dragdestination_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
dragsource_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
error.c wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
error.h wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
findfile.c wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
handlers.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
hashtable.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
make-rgb WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
memory.c wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
menuparser.c wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
menuparser.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
menuparser_macros.c wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
misc.c wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
notification.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
proplist.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
rgb.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
selection_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
string.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
tree.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
userdefaults.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
userdefaults.h wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
usleep.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wapplication.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wappresource_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wballoon_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wbox.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
wbrowser.c wings: phase β — rename X11 typedefs in shared/Wayland code 2026-05-24 10:49:47 +02:00
wbutton.c wings: phase α.3 — rename X11 enum/macro values to WM_* 2026-05-24 10:47:37 +02:00
wclient_wl.c wings: phase ζ — formal W_PlatformBackend vtable for WMOpenScreen 2026-05-24 11:49:34 +02:00
wcolor.c Phase 80: eliminate all 43 if(!dpy) return guards via vtable dispatch 2026-05-13 10:01:57 +02:00
wcolor_wl.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wcolor_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wcolorpanel_x11.c wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
wcolorwell.c wings: phase β — rename X11 typedefs in shared/Wayland code 2026-05-24 10:49:47 +02:00
wconfig.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wevent.c wings: phase β — rename X11 typedefs in shared/Wayland code 2026-05-24 10:49:47 +02:00
wevent_wl.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wevent_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wfilepanel.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
wfont.c wings: drop libXft from wfont.c / wfontpanel.c 2026-05-24 11:09:39 +02:00
wfont_wl.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wfont_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wfontpanel.c wings: drop libXft from wfont.c / wfontpanel.c 2026-05-24 11:09:39 +02:00
wframe.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
widgets.c wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
widgets_x11.c wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
winputmethod_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wlabel.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
wlist.c wings: phase β — rename X11 typedefs in shared/Wayland code 2026-05-24 10:49:47 +02:00
wmenuitem.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wmisc.c wings: phase β — rename X11 typedefs in shared/Wayland code 2026-05-24 10:49:47 +02:00
wpanel.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
wpixmap.c wings: phase β — rename X11 typedefs in shared/Wayland code 2026-05-24 10:49:47 +02:00
wpopupbutton.c wings: phase β — rename X11 typedefs in shared/Wayland code 2026-05-24 10:49:47 +02:00
wprogressindicator.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
wrender_wl.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wrender_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wruler.c wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
wscroller.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
wscrollview.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
wslider.c wings: phase β — rename X11 typedefs in shared/Wayland code 2026-05-24 10:49:47 +02:00
wsplitview.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
wstubs_no_x11.c wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
wtabview.c wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
wtext.c wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
wtextfield.c wings: route wtextfield XInternAtom through W_NativeInternAtom 2026-05-24 11:13:11 +02:00
wutil.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wview.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wview_wl.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wview_x11.c wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wwindow.c wings: phase α.2 — rename X11 event masks to WM_EVMASK_* 2026-05-24 10:43:23 +02:00
wwindow_p.h WINGs: port wwindow.c to vtable dispatch (Phase D) 2026-05-23 15:19:52 +02:00

README

                      WINGs - WINGs Is Not GNUstep

                                   by

                          Alfredo Kengi Kojima

                          kojima@windowmaker.info


   WINGs is a small widget set with the N*XTSTEP look and feel. Its API
is inspired in OpenStep and its implementation borrows some ideas
from Tk. It has a reasonable set of widgets, sufficient for building
small applications (like a CDPlayer or hacking something like rxvt). It
also has other functions that are usefull for applications, like a
User Defaults alike configuration manager and a notification system.

   The library is limited and its design is a little sloppy,
so it's not intended to build large or complex applications, like
anything more complex than a CDPlayer. GNUstep should be used for such
applications.

   Since WINGs is written in C and is sort of low-level it is small
and faster than say, Motif or even Athena. Knowing Xlib will help you to
workaround some of its limitations, although you'll probably be able to
write something like a trivial tic-tac-toe game without knowing much Xlib.

   Some of its functions are designed to support the Window Maker window
manager (see http://windowmaker.info) In fact, its primary role is to
support Window Maker. All other uses of it are just an added bonus.

   It will help you to understand the API if you read the ApplicationKit
reference manual, distributed as a PDF by Apple. The function names,
structs and most of the intrinsics are very close to OpenStep classes.


Internationalization:
---------------------

    Change ~/GNUstep/Defaults/WMGLOBAL to set the desired font set and
set MultiByteText = YES; to enable support for multibyte text.


Widgets provided by WINGs:
--------------------------

- button (command button, radio, switch etc. - all buttons defined in OpenStep)
- label
- textfield
- frame
- window
- popup menu button
- scroller
- selection list
- browser
- slider
- scrollable view
- color well
- split view
- tabbed view
- progress indicator

- selection (make pasteboard like?)
- drag&drop

- input box
- file panel
- color panel
- alert panel
- font panel

If you think you can code the following, please do. They are needed by
WPrefs.app, but the number of other things I have to do is huge.

- input method support (XIM). I have no idea of how to code it. People who use
different characters than ASCII will have trouble editing menus without it...


Wish list: (I don't have the know-how or time to do them)
---------------------------------------------------------

- text (with support for RTF)
- matrix (like NSMatrix)
- font manager (like NSFontManager)
- finish other wigets
- optimize list scrolling (XCopyArea() the area that's already drawn)
- InterfaceMaker?
- use XSetWMName and XSetWMIconName for the window/icon title setting.
  This requires transforming the received text to a text property with
  the proper encoding.

Copyright
---------

WINGs is copyright (c) Alfredo K. Kojima and is licensed through the GNU
Library General Public License (LGPL).