windowmaker-wl/WINGs
Window Maker da3bf4c096 wings(wayland-client): wl_pointer + wl_keyboard input dispatch
Task 5.

wclient_wl.c subscribes to wl_seat.capabilities.  On POINTER capability
it binds wl_pointer with a listener that translates enter/leave/motion/
button events into WMEvent (WME_ENTER, WME_LEAVE, WME_MOTION,
WME_BUTTON_PRESS/RELEASE).  Linux evdev button codes (BTN_LEFT, etc.)
map to X-style numbers (1, 2, 3, 8, 9).  Pointer focus is tracked per
wl_surface and resolved to a top-level W_View via wlc_top_for_surface.

On KEYBOARD capability it binds wl_keyboard.  The keymap event mmaps
the fd, compiles via xkb_keymap_new_from_string, and stashes the result
in WLClientCtx (xkb_keymap + xkb_state).  Subsequent key events use
xkb_state_key_get_one_sym for the keysym and xkb_state_key_get_utf8 for
text — these populate WMEKey.{keycode, keysym, utf8, utf8_len}.
Modifiers update xkb_state and a cached X-style mod mask
(ShiftMask, ControlMask, Mod1Mask, Mod4Mask) used in WMEKey.state and
WMEButton.state.

Focus enter/leave on the keyboard side dispatches WME_FOCUS_IN /
WME_FOCUS_OUT so WINGs widgets get focus tracking.

Events flow via W_WL_EnqueueEvent, the same ring buffer wevent_wl.c
already drains for the compositor side — no separate event-pump
required.  Axis (scroll) events are stubbed out for now and will be
synthesized as button 4/5 in a follow-up.
2026-05-24 10:27:56 +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 WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
Resources 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
WINGs wings(wayland-client): wl_shm buffers + xdg_toplevel surfaces 2026-05-24 10:25:29 +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 wings(wayland-client): build system + connection skeleton 2026-05-24 10:20:01 +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 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 WINGs: route DnD through view backend vtable 2026-05-23 15:02:30 +02: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 WINGs: implement Wayland selection fetch (middle-click paste) 2026-05-23 16:37:58 +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 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 WINGs: add Phase D vtable slots, port wballoon.c 2026-05-23 15:13:38 +02:00
wbox.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wbrowser.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wbutton.c WINGs: move updateDisabledMask to render backend vtable 2026-05-14 17:58:33 +02:00
wclient_wl.c wings(wayland-client): wl_pointer + wl_keyboard input dispatch 2026-05-24 10:27:56 +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 Phase 80: eliminate all 43 if(!dpy) return guards via vtable dispatch 2026-05-13 10:01:57 +02:00
wcolor_x11.c Phase 80: eliminate all 43 if(!dpy) return guards via vtable dispatch 2026-05-13 10:01:57 +02:00
wcolorpanel.c WINGs/wcolorpanel: gate magnifier via vtable callback dispatch 2026-05-23 16:15:03 +02:00
wcolorwell.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wconfig.h WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wevent.c WINGs/wevent: fix NULL toplevel crash on Wayland expose dispatch 2026-05-23 16:17:18 +02:00
wevent_wl.c fix: eliminate use-after-free crash on modal dialog close 2026-05-17 19:16:32 +02:00
wevent_x11.c arch: eliminate last _x11_raw escape from src/ (winspector) 2026-05-24 08:40:38 +02:00
wfilepanel.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wfont.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wfont_wl.c WINGs/wfont_wl: remove stale text comparison in wl_text_width 2026-05-23 16:41:44 +02:00
wfont_x11.c Implement keyboard input via font backend abstraction 2026-05-13 21:43:24 +02:00
wfontpanel.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wframe.c WINGs/wframe: remove X11 GC/region clipping from paintFrame 2026-05-14 16:44:29 +02:00
widgets.c wl_backend: fix unshade — re-enable and raise client surface and frame 2026-05-14 22:26:07 +02:00
winputmethod.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wlabel.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wlist.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wmenuitem.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wmisc.c WINGs: remove dead X11 code from wtext.c and wmisc.c 2026-05-23 16:19:48 +02:00
wpanel.c WINGs/wpanel: use WMEvent keysym instead of XLookupString 2026-05-14 16:47:07 +02:00
wpixmap.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wpopupbutton.c WINGs Phase D: port wballoon, wpopupbutton, wtext to vtable 2026-05-23 15:26:48 +02:00
wprogressindicator.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wrender_wl.c WINGs/wcolorpanel: gate magnifier via vtable callback dispatch 2026-05-23 16:15:03 +02:00
wrender_x11.c WINGs/wcolorpanel: gate magnifier via vtable callback dispatch 2026-05-23 16:15:03 +02:00
wruler.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wscroller.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wscrollview.c WINGs/wevent: remove _x11_raw from WMHandleEvent dispatch path 2026-05-14 20:24:05 +02:00
wslider.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wsplitview.c WINGs: route XOR drawing through vtable, remove X11 from wtextfield/wsplitview 2026-05-23 15:53:16 +02:00
wtabview.c WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wtext.c WINGs: remove dead X11 code from wtext.c and wmisc.c 2026-05-23 16:19:48 +02:00
wtextfield.c WINGs: route XOR drawing through vtable, remove X11 from wtextfield/wsplitview 2026-05-23 15:53:16 +02:00
wutil.c WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wview.c fix: eliminate use-after-free crash on modal dialog close 2026-05-17 19:16:32 +02:00
wview_wl.c wings(wayland-client): wl_shm buffers + xdg_toplevel surfaces 2026-05-24 10:25:29 +02:00
wview_x11.c WINGs: implement Wayland selection fetch (middle-click paste) 2026-05-23 16:37:58 +02:00
wwindow.c WINGs: port wwindow.c to vtable dispatch (Phase D) 2026-05-23 15:19:52 +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).