Go to file
Window Maker 23f0bb320e wm core: shared src/ is now X11-free at the source level
Audit: every "X11 in src/" hit outside src/backend/x11/ and
src/backend/wayland/ is now either:
  - a comment mentioning X11 by name, or
  - a backend-neutral macro/type alias (WM_STATE_*, CW*, P*, etc.)
    whose numeric value happens to match the X11 protocol value.

Zero <X11/...> includes in shared headers/sources.
Zero X11 type uses (XColor/XContext/XEvent/XFontStruct/XGCValues/
XWindowAttributes/XSetWindowAttributes/XErrorEvent etc.).
Zero X11 symbol references in compiled shared object files
(verified: `nm src/*.o | awk '$1=="U"' | grep '^X[A-Z][a-z]'`
returns empty).

Real architectural fixes:

src/backend/backend_types.h — added the missing backend-neutral
constants/types so shared code never names an X11 macro:
  - WM_STATE_WITHDRAWN/NORMAL/ICONIC (ICCCM values 0/1/3).
  - WContextID (typedef int) — XContext analogue.
  - WMColorRGB (XColor-layout-compatible struct).
  - CWX..CWStackMode (ConfigureWindow value-mask bits).
  - ForgetGravity..StaticGravity (ICCCM win_gravity values).
  - PMinSize..PWinGravity (XSizeHints flags) as WNH_* aliases.
  - NoSymbol, NoEventMask, ColormapInstalled/Uninstalled.
  - BitmapSuccess..BitmapNoMemory.
All guarded by #ifndef so the X11 backend's <X11/X.h> include
overrides them with the real X11 values when present.

src/screen.h — w_visual is now `void *` (was `Visual *`).  Added
w_visual_id / w_visual_class so dialog.c's crash panel can read
visual info without dereferencing a Visual struct.  tech_draw_font
is also `void *` with companion tech_draw_font_ascent/descent ints
populated by the backend (X11 from XFontStruct->ascent, Wayland
from a hard-coded bitmap-font metric).

src/WindowMaker.h — XContext fields → WContextID, X11 includes
removed, Time → WMNativeTime.

src/dialog.c — wShowCrashingDialogPanel now uses WMOpenScreen +
WMScreenWidth/Height instead of DefaultScreen()/ScreenOfDisplay()/
WidthOfScreen() so it works in either backend.

Dead-code cleanup found while auditing:

src/event.c — handleUnmapNotify and handleEnterNotify both built
an uninitialized `XEvent ev` and ran it through x11_translate_event
on a peeked queue event.  The translation always read stack garbage
(the local was never populated).  Replaced with the correct flow:
  - unmap handler: skip wUnmanageWindow if a Destroy is already
    queued, the Destroy handler will run it next iteration.
  - enter handler: skip if a Leave for the same window is queued,
    no need to inspect mode/detail (was always reading garbage).
Also dropped the now-unused x11_compat.h / x11_event.h includes
from event.c, dock.c, window.c.

src/misc.c — eatExpose's `XEvent event, foo` were never used; the
function delegates to wm_backend->event_flush_type(WME_EXPOSE).

src/wsmap.c — workspace_map_destroy built an XEvent ClientMessage
but never sent it; the actual notify path is switchpanel_send_enter.
Pass the real root_win argument (was passing literal 0) and drop
the dead XEvent.

src/icon.c — set_dockapp_in_icon's `XWindowAttributes attr` and
cycleColor's `XGCValues gcv` were unused.

src/window.c — windowLanguageClick had a function-signature
mismatch with framewin.h's on_click_language (XEvent* vs WMEvent*).
The framewin code passes a WMEvent.  Fixed the parameter type and
its single use of event->xbutton.button.

src/moveres.c — already-disabled `#if 0` block in showPosition
that called XDrawLine / XSetForeground on the root window: removed.
Replaced tech_draw_font->ascent/descent dereferences with the new
flat int fields.

src/xutil.h — removed declarations of FormatXError (moved to X11
backend long ago) and Request/GetSelection (never implemented).

Mass renames in shared src/:
  IconicState/NormalState/WithdrawnState → WM_STATE_ICONIC/NORMAL/
                                            WITHDRAWN
  IconWindowHint/InputHint/StateHint/IconPixmapHint/IconMaskHint/
  IconPositionHint/WindowGroupHint/UrgencyHint
                                          → WMH_*_HINT
  XColor (in struct fields and locals)    → WMColorRGB
  XContext (in screen.context.{...})      → WContextID
  XPoint                                  → WMShortPoint
  XRectangle                              → WMShortRect
  XFontStruct *                           → void *

Backends translate at the boundary:
  src/backend/x11/x11_backend.c keeps its native XColor/XContext/
  XFontStruct internally and casts to the backend-neutral types
  at the public-API surface (memcpy works because WMColorRGB has
  XColor's exact layout).
  src/backend/wayland/wl_backend.c populates the same fields
  directly without any X11 indirection.

Verified:
  Default build: `Window Maker 0.96.0` runs.
  Shared src/ object files: `nm | grep '^X[A-Z][a-z]'` is empty.
  All shared X11 macro names (CW*, P*, ICCCM hint flags) are
  defined locally in backend_types.h, no X11 dep needed.

Out of scope (separate refactor): wmaker compositor binary itself
still links libX11 because src/backend/x11/* and the XWayland
integration in src/backend/wayland/wl_backend.c need real X11
types.  Both are below the vtable, so shared code is unaffected.
2026-05-24 12:52:31 +02:00
.claude wayland: implement correct stacking model with scene-graph level trees 2026-05-15 09:11:46 +02:00
WINGs wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
WPrefs.app wings: revert accidental WNativeWindow rename in strings/comments 2026-05-24 11:42:37 +02:00
WindowMaker gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
doc gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
m4 wayland: migrate wlroots 0.16 API to 0.19 + animation overlay system 2026-05-10 18:51:05 +02:00
po gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
script WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
src wm core: shared src/ is now X11-free at the source level 2026-05-24 12:52:31 +02:00
test gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
tests wayland: implement alt-tab window cycling and switch panel (A5) 2026-05-16 00:49:29 +02:00
tools/wm-port complete F.2-5 2026-05-16 13:54:44 +02:00
util wings: phases δ + ε — drop X11/Xlib.h from public WINGs headers 2026-05-24 11:37:18 +02:00
wmlib gitignore: stop tracking all generated build outputs 2026-03-31 13:36:58 +02:00
wrlib wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
.gitignore gitignore: WINGs scanner-generated xdg-shell, drop stray +cmd 2026-05-24 10:20:42 +02:00
ACTION_PLAN.md docs: mark Phase D complete, add src/ audit results 2026-05-23 16:31:45 +02:00
ACTION_PLAN_PROMPTS.md wl impl planning 2026-05-16 12:28:44 +02:00
ARCHITECTURE.md wl impl planning 2026-05-16 12:28:44 +02:00
AUTHORS WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
BACKEND_ABSTRACTION.md wl impl planning 2026-05-16 12:28:44 +02:00
BUGFORM WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
BUGS 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
COPYING.WTFPL 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
FAQ WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
INSTALL-WMAKER 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
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
README.definable-cursor WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
README.i18n 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
The-perfect-Window-Maker-patch.txt WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
WAYLAND_ROADMAP.md docs: mark Phase D complete, add src/ audit results 2026-05-23 16:31:45 +02:00
X11_IMPLEMENTATION.md x11 doc 2026-05-23 11:10:25 +02:00
aclocal.m4 wayland: migrate wlroots 0.16 API to 0.19 + animation overlay system 2026-05-10 18:51:05 +02:00
autogen.sh WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
checkpatch.pl WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
configure.ac wrlib: split X11 image-conversion path; --disable-x11-wraster 2026-05-24 12:24:45 +02:00
core.177174 WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
core.877872 WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
email-clients.txt WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
out.txt Fix: set global dpy=NULL in Wayland mode 2026-05-13 07:23:02 +02:00
stderr WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
update-changelog.pl WindowMaker 0.96.0 upstream source 2026-03-26 15:38:49 +01:00
wm_stderr.txt WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00
wm_stdout.txt WIP: Wayland backend - fix atoms, OR surface compositing, frame/window ops 2026-05-13 07:05:22 +02:00

README



		       		GNU Window Maker
		       	       X11 Window Manager

			    <http://windowmaker.org>

				     by

		      	     Alfredo K. Kojima

			 	 Dan Pascu



			       Web/FTP Master

			       Phillip Smith



		Congratulations! You have purchased an extremely fine
	device that would give you thousands of years of trouble-free
	service, except	that you undoubtedly will destroy it via some
	typical bonehead consumer maneuver. Which is why we ask you
	to PLEASE FOR GOD'S SAKE READ THIS OWNER'S MANUAL CAREFULLY
	BEFORE YOU UNPACK THE DEVICE. YOU ALREADY UNPACKED IT, DIDN'T
	YOU? YOU UNPACKED IT AND PLUGGED IT IN AND TURNED IT ON AND
	FIDDLED WITH THE KNOBS, AND NOW YOUR CHILD, THE	SAME CHILD WHO
	ONCE SHOVED A POLISH SAUSAGE INTO YOUR VIDEOCASSETTE RECORDER
	AND SET IT ON "FAST FORWARD", THIS CHILD ALSO IS FIDDLING
	WITH THE KNOBS, RIGHT?  AND YOU'RE JUST NOW STARTING TO READ
	THE INSTRUCTIONS, RIGHT???  WE MIGHT AS WELL JUST BREAK THESE
	DEVICES	RIGHT AT THE FACTORY BEFORE WE SHIP THEM OUT, YOU
	KNOW THAT?
				-- Dave	Barry, "Read This First!"


Description
===========

Window Maker is the GNU window manager for the X Window System. It was designed
to emulate the look and feel of part of the NEXTSTEP(tm) GUI. It's supposed to
be relatively fast and small, feature rich, easy to configure and easy to use,
with a simple and elegant appearance borrowed from NEXTSTEP(tm).

Window Maker was designed keeping integration with GNUstep in mind and is the
"official" window manager for it. It is also part of the GNU project
(www.gnu.org) Read more about GNUstep further on this file.

Hints (information given by applications to integrate well with the window
manager) for Motif(tm) and NETWM are also supported (NETWM is used by KDE and
GNOME, so they are automatically supported as a result).  So you can replace any
of the window managers for these environments with Window Maker while keeping
most, if not all, of the native window manager functionality.

Window Maker was previously called WindowMaker.

Window Maker has no connection with Windowmaker, the software for making windows
and doors.


Documentation
=============

Read before asking.

* README files all over the source tree have info related to the stuff
in the directories.

* INSTALL has installation instructions and some troubleshooting tips.
You're meant to read it if you are compiling the sources.

* FAQ: Frequently Asked Questions. READ IT!!! FAQ.I18N is for
internationalization related questions.

* NEWS: list user visible changes from the previous version. Read it if
you are upgrading.

* BUGFORM: use it to send bug reports. Please do use it.

* ChangeLog: what changed from the previous version?

* BUGS: list of known bugs


*** User Guide

The Window Maker User's Guide can be downloaded from the official ftp
or web sites.

The User Guide explains how to use Window Maker, the configuration files
and options.


*** man pages

Type "man wmaker" in the shell prompt to get general help about Window Maker



Directories & Files in the Source Tree
======================================

* Install is a script for configuring and compiling Window Maker in a easy
  way (not that the normal way is difficult, but...).

* AUTHORS: the credits

* TODO: plans for the future

* util/ has various utility programs.

* WPrefs.app/ is the configuration program.

* src/wconfig.h has compile time options you can change to select some
  options/features and other stuff.

* WINGs/ NEXTSTEP lookalike widget library

* wrlib/ image processing library

* po/ has message catalogs which are the translated versions of the messages
  displayed by Window Maker.


HELP ME!!!
==========

There is a mailing list for discussing Window Maker at
wmaker-user@googlegroups.com.  To subscribe to it, visit
https://groups.google.com/forum/#!forum/wmaker-user

If you got a problem, ask there (after reading the docs, of course). The people
there is more likely to be able to answer your questions than we are.  For bug
reports use the BUGFORM.

If you have a problem with a precompiled version of Window Maker (rpm, deb etc),
first ask the person who made the package.

IMPORTANT NOTE: when asking for help (in the mailing list or to the developers,
directly) *always* send information about the system you are using. You can use
the system information section at the end of BUGFORM as a guideline. Another
thing: please don't send HTML mail.


There is also a #windowmaker IRC channel at freenode. To join there, connect
your irc client to irc.freenode.net. irc.windowmaker.org will direct you to the
correct IRC network.


GNUstep
=======

GNUstep is a complete object-oriented development system, based on the OpenStep
specification released by NeXT(tm) (now Apple(tm)) and Sun(tm). It will provide
everything one needs to produce cross-platform, object-oriented, graphical (and
non-graphical) applications; providing among other things, base system
libraries, a high-level GUI application framework that uses a Display
PostScript(tm)-like imaging model (DGS), objects for accessing relational
databases, distributed objects and a graphical development environment, with
tools like interface modeler, a project management system (project center) and
other tools.

The GNUstep development system will be used to create a user environment, with
everything needed for a complete graphical user interface, such as a file
viewer, text editors and other applications. Note that the user environment (or
"desktop environment") is only a small part of the whole GNUstep project and
therefore it does not "compete" with other projects like KDE or GNOME, simply
because they are completely different things.

For more information on the GNUstep project, visit: http://www.gnustep.org


Running multiple instances of Window Maker
==========================================

It is not a good idea to run more than one instance of Window Maker
from the same user (so that wmaker will use the same configuration files) at the
same time. You might get unexpected behavior when Window Maker updates its
configuration files.

If you really desire to do this, try running Window Maker with the command line
option --static so that it will not update or change any of the configuration
files.


Performance Tuning
==================

If you want to diminish Window Maker's memory usage and improve performance,
while keeping a nice appearance and good functionality, follow the items bellow:

- use solid textures for everything, mainly title bars and menus. If you want a
  nice looking desktop, use the Traditional style.
- turn NewStyle and Superfluous off
- do not bind many shortcuts in the menu and keep only the essential items in
  the menu
- turn on DisableClip
- edit wconfig.h and disable the NUMLOCK_HACK and the features you don't use
  anyway (keep in mind that some of the #defines might not work, as they are not
  fully supported). Make sure to always keep NumLock and ScrollLock turned off.
- turn on DisableAnimations. You can also specify --disable-animation at compile
  time to the configure script.
- strip down the default IconPath and PixmapPath entries to contain only
  the paths that you really have in your system.
- do not use large images in the root background
- remove support for image formats you don't use
- to reduce memory usage, disable the icon cache, by setting the RIMAGE_CACHE
  environment variable to 0. If you want to increase performance at the cost of
  memory usage, set its value to a value like the number of different icons you
  use. Also, disable anti-aliased text support in ~/GNUstep/Defaults/WMGLOBAL.


Keyboard Mouse Control
======================

Many people ask about adding keyboard control of mouse, like in fvwm, but Window
Maker will not have such feature. The XKB extension supports mouse simulation
from the keyboard, in a much more powerful fashion than any simulation done by
a window manager.

To enable it, hit the Control+Shift+NumLock or Shift+NumLock key combination.
You should hear the speaker beeping. To disable it, do the same thing.

To control the mouse the numeric keypad is used as follows:
- 4 (left arrow), 7 (Home), 8 (up arrow), 9 (PgUp), 6 (right arrow),
3 (PgDn), 2 (down arrow) and 1 (End) move the mouse to the corresponding
direction;
- holding one of the above keys and then holding the 5 key will move the
pointer faster;
- / will select the first mouse button (left button);
- * will select the second mouse button (middle button);
- - will select the third mouse button (right button);
- 5 will do a click with the currently selected mouse button;
- + will do a double-click with the currently selected button;
- 0 (Ins) will click and hold the currently selected button;
- . (Del) will release the currently selected button that was previously
clicked with the 0 (Ins) key.


The above key values work in a XFree86 3.2 (X11R6.1) X server but your
mileage may vary.


How to make a gdb backtrace
===========================

Backtraces can help us fix bugs that make Window Maker crash. If you find a bug
that crashes Window Maker, please send a backtrace with your bug report.

To make a useful backtrace, you need a core file with debugging information
produced by Window Maker when it crashes. It should have been installed without
stripping too.

To compile wmaker with debugging information:

  ./configure --enable-debug
  make

If you get the dialog window telling you that wmaker crashed and asks you what
to do, tell it to "Abort and leave a core file".

  script
  cd src
  gdb .libs/wmaker path_to_the_core_file

Then, in the gdb prompt type "bt". Quit from gdb by typing "quit" and then, in
the shell prompt, type "exit".

The file named typescript will contain the backtrace.



Copyrights & Disclaimers
========================

Window Maker is copyrighted by Alfredo K. Kojima and is licensed through the GNU
General Public License. Read the COPYING file for the complete license.

The icons that are distributed with this program and were made by Marco van
Hylckama Vlieg, are licensed through the GNU General Public License. Read the
COPYING file for the complete license.

The icons listed in COPYING.WTFPL and are distributed in this program and were
made by Banlu Kemiyatorn (]d), are licensed through the "do What The Fuck you
want to Public License". Read the COPYING.WTFPL file for the complete license.

NeXT, OpenStep and NEXTSTEP are a trademarks of NeXT Computer, Inc.  All other
trademarks are property of their respective owners.

The authors reserve the right to make changes in the software without prior
notice.


Authors
=======

Alfredo K. Kojima <kojima@windowmaker.info>
Dan Pascu <dan@windowmaker.info>
]d <id@windowmaker.info>

Please don't ask us questions before reading the documentation (esp. the FAQ,
this file and INSTALL files) and about "cool" things you see in people's desktop
screenshots.


The AUTHORS file contains a list of the people who have contributed to the
project. The name of people who have helped with localization (translation) can
be found in po/README and Window Maker/README

If you have any comments, fixes and bug reports (filled BUGFORMs) send them
to wmaker-dev@googlegroups.com