windowmaker-wl/WINGs
Levi Neely a486329b52 Wayland backend abstraction: WMBackend vtable (Phases 0–30)
Introduce a display-system-agnostic WMBackend vtable that routes all
display operations through function pointers, making the WM policy
layer independent of X11.  The X11 implementation is preserved in
src/backend/x11/ and behaviour is unchanged.

Key structural changes
──────────────────────
• src/backend/backend_types.h — backend-neutral type definitions:
    WNativeWindow, WKeyCode, WContextKey, WBackendScreen,
    WBackendEvent (+typed fields), WNormalHints, WWMHints,
    WNETWindowType, WHeadGeometry, WClientAttributes, WClientVisual,
    WSegment, WPoint, WM_KEY_* keysym constants, WA_* atom IDs,
    WKB_GROUP*_INDEX, WCUR_NONE

• src/backend/backend.h — WMBackend vtable (~100 function-pointer
    slots) covering: frame/context lifecycle, stacking, focus, grabs,
    pointer, keyboard, overlays, properties, ICCCM, EWMH/NETWM,
    monitors, screen setup, cursors, extensions, error handlers.
    No <X11/> headers remain in this file after Phase 30.

• src/backend/x11/ — X11 backend implementation:
    x11_backend.c  full vtable; all display calls confined here
    x11_props.c    WM_NORMAL_HINTS / WM_HINTS translation
    x11_event.c    XEvent → WBackendEvent translation
    x11_monitor.c  Xinerama / RandR monitor query

Policy files cleaned
────────────────────
All 47 files in WM_POLICY_CLEAN_FILES pass check-no-x11-policy
(no direct #include <X11/> anywhere).  X11 types that still appear
in policy structs (Visual*, Colormap, Window, Atom …) arrive only
transitively via WINGs.h; the vtable boundary itself is X11-free.

Tests
─────
• tests/smoke-test.sh — full Xvfb lifecycle test (PASS)
• tests/test_geom.c   — geometry / constraint unit tests
• tests/test_x11_event.c — WBackendEvent field extraction tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 19:20:00 +01:00
..
Documentation Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
Examples Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
Extras Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
Resources Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
Tests Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
WINGs Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01:00
po Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01: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 WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
Makefile.in Wayland backend abstraction: WMBackend vtable (Phases 0–30) 2026-03-27 19:20:00 +01: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 WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
data.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
dragcommon.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
dragdestination.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
dragsource.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
error.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
error.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
findfile.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01: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 WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
menuparser.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
menuparser.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
menuparser_macros.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
misc.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01: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.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01: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 WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01: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.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wballoon.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wbox.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wbrowser.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wbutton.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wcolor.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wcolorpanel.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wcolorwell.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wconfig.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wevent.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wfilepanel.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wfont.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wfontpanel.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wframe.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
widgets.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
winputmethod.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wlabel.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wlist.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wmenuitem.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wmisc.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wpanel.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wpixmap.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wpopupbutton.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wprogressindicator.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wruler.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wscroller.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wscrollview.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wslider.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wsplitview.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wtabview.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wtext.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wtextfield.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wutil.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wview.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wwindow.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01: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).