Chris Cannam | 16 Nov 22:22 2014

wmx-8 released

There have been a few changes (and five years) since wmx-7, so I thought
it might be time for a new release.

This one has the clock and a few other fixes. See and


Chris Cannam | 29 Jun 13:06 2011

new feature: a clock!

A real bit of frippery.  The wmx code in SVN now has a built-in clock.
 Though it's optional and off by default.

Define CONFIG_CLOCK to True to have wmx display a clock permanently in
the background at the top-left of screen 0, using the same style of
digits as used for channel numbers but a more muted colour.


Bernhard R. Link | 3 Jan 16:38 2010

[PATCH] wm2: separate preprocessor and linker flags

Use INCS when compiling, LDFLAGS when linking.
Thus changing those variables by giving make arguments
is easier, as they have less side effects.

--- a/Makefile
+++ b/Makefile
 <at>  <at>  -4,20 +4,21  <at>  <at>  INCS	= -I/usr/X11R6/include

 CC	= gcc
 CCC	= g++
-CFLAGS	= -O2 -Wall $(INCS)
+CFLAGS	= -O2 -Wall
 OBJECTS	= Border.o Buttons.o Client.o Events.o Main.o Manager.o Rotated.o

-	$(CC) -c $(CFLAGS) $<
+	$(CC) -c $(CFLAGS) $(INCS) $<

-	$(CCC) -c $(CFLAGS) $<
+	$(CCC) -c $(CFLAGS) $(INCS) $<

 wm2:	$(OBJECTS)
-	$(CCC) -o wm2 $(OBJECTS) $(LIBS)
+	$(CCC) -o wm2 $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS)

-	makedepend -- $(CFLAGS) -- *.C
(Continue reading)

Bernhard R. Link | 3 Jan 16:36 2010

[PATCH] wm2: allow user to specify CONFIG_NEW_WINDOW_COMMAND at compile time

Do not set CONFIG_NEW_WINDOW_COMMAND if already defined.
This allows changing it's value using -D without patching the source.

--- a/Config.h
+++ b/Config.h
 <at>  <at>  -7,7 +7,9  <at>  <at> 
 #define CONFIG_NASTY_FONT	  "fixed"


 // You can't have CLICK_TO_FOCUS without RAISE_ON_FOCUS but the other

Bernhard R. Link | 3 Jan 16:34 2010

[PATCH] fix char vs const char issues in wm2

String literals are const char, so everything reachable by those
should be const char, too, or modern compilers may complain.

--- a/Manager.C
+++ b/Manager.C
 <at>  <at>  -312,7 +312,7  <at>  <at>  void WindowManager::initialiseScreen()

-unsigned long WindowManager::allocateColour(char *name, char *desc)
+unsigned long WindowManager::allocateColour(const char *name, const char *desc)
     XColor nearest, ideal;

diff --git a/Manager.h b/Manager.h
index 0ea2ca5..6db2ac6 100644
--- a/Manager.h
+++ b/Manager.h
 <at>  <at>  -40,7 +40,7  <at>  <at>  public:
     void installCursor(RootCursor);
     void installCursorOnWindow(RootCursor, Window);
     void installColormap(Colormap);
-    unsigned long allocateColour(char *, char *);
+    unsigned long allocateColour(const char *, const char *);

     void considerFocusChange(Client *, Window, Time timestamp);
     void stopConsideringFocus();
diff --git a/Rotated.C b/Rotated.C
index 09fdfe2..e0f09ff 100644
(Continue reading)

Bernhard R. Link | 3 Jan 16:32 2010

[PATCH] make wm2 64bit clean

execl/execlp expects a 0 pointer as last argument.
Giving it only 0 causes a 0 int (32 bit) as variable argument,
while pointers are 64 bit on 64 bit architectures.

--- a/Manager.C
+++ b/Manager.C
 <at>  <at>  -551,16 +551,16  <at>  <at>  void WindowManager::spawn()

-		execl(m_shell, m_shell, "-c", CONFIG_NEW_WINDOW_COMMAND, 0);
+		execl(m_shell, m_shell, "-c", CONFIG_NEW_WINDOW_COMMAND, (char*)0);
 		fprintf(stderr, "wm2: exec %s", m_shell);
 		perror(" failed");

 	    fprintf(stderr, "wm2: exec %s", CONFIG_NEW_WINDOW_COMMAND);
 	    perror(" failed");

-	    execlp("xterm", "xterm", "-ut", 0);
+	    execlp("xterm", "xterm", "-ut", (char*)0);
 	    perror("wm2: exec xterm failed");

Kristjan Onu | 18 Jul 01:23 2009

Unable to access SVN

According to the instructions on this page:, it should be possible to
access the wm2 SVN repository with the command: "svn co wm2". On my system (Debian
GNU/Linux squeeze/sid) however, that command shows the error:
svn: OPTIONS of '': could
not connect to server ( 

Are others able to access the SVN repository? I'm nearly certain I
have been able to access the repository in the past.

Chris Cannam | 19 Jan 20:19 2009

Composite extension

Is there no end to our new-fangledness?

I've had a lengthy period of growing increasingly irritated with recent video 
cards on which conventional window managers like wmx now seem to run much 
slower than compositing managers -- reaching a pinnacle with the latest ATI 
drivers which are both incredibly slow and glitchy for uncomposited use of the 
Shape extension.

Well, now I've just discovered that the solution is incredibly simple -- tell 
the X server to use compositing offscreen storage for all top-level windows, 
and suddenly it renders everything much faster without any further changes to 
the code.

So, I've committed a small change that does exactly that, if the Composite 
extension is found.  It makes wmx as fast as any other window manager on these 
particularly unhelpful video cards.  You can disable it in the config if 

Let me know if this causes anyone any real problems.


Chris Cannam | 9 Jan 21:09 2009


At this rate I'm thinking I'll never get around to finishing the
remaining NETWM desktop compliance details as well as I would like,
so I thought I ought to release something.  Hence: presenting wmx-7!
Now available from the usual place.

Major changes since wmx-6 are:

 * Much of the NETWM extended window manager hints protocol is now
supported, making wmx a pleasant window manager to use with a desktop
environment such as GNOME or KDE with all its fripperies.

 * Text in window frames can now be anti-aliased using Xft fonts.

 * You can move windows with Alt-drag anywhere on them (from Damion
Yates and Teemu Voipio back in 2003)

 * Windows will now meet resistance when bumped against each other,
not just against screen edges.

 * A few other changes and fixes from Glyn Faulkner and Zvezdan
Petkovic in particular.

Some things I had wanted to get done for this release, but didn't:

 * Finish up the NETWM extensions, at least for all the things I
routinely use -- the main omissions are full-screen window support and
struts (failure to support struts means that maximised windows
disappear behind taskbars and things).

(Continue reading)

Alexandros Diamantidis | 15 Jun 15:45 2008

Full-screen windows?

This is probably a known problem, but in case it isn't, I'd like to
report that full-screen windows don't work very well with (current SVN)
wmx. Here are some examples:

First of all, docks and panels appear above full-screen windows. For
example, running gkrellm (with "Set window type to be a dock or panel"
and "Set sticky state" enabled) and kicker, and then running mplayer in
full-screen mode, mplayer is indeed full-screen but gkrellm and kicker
appear over its window, obscuring its edges.

Other programs don't even turn properly full-screen. For example,
pressing F11 in firefox resizes the window to be full-screen, but it
still has decorations and isn't positioned exactly inside the screen.
Moving it with the mouse seems to fix it, though. Virtualbox exhibits
the same behaviour.

When pressing F11 in eog, the full-screen toolbar appears at the top of
the screen, but the actual image window isn't resized.

Pressing F in xine, the window decorations disappear and the window is
resized to be almost full screen, but not quite - it's a few pixels

The only program I found that appears perfectly in full-screen mode is
qiv. Even panels and docks are hidden.


(Continue reading)

Ben Stern | 20 Mar 06:48 2008

A possible fix for the focus problem when switching channels

As mentioned in, when switching to an
empty channel (or at least to a channel where nothing is focused) and away
from a Gtk2 app such as firefox, keyboard commands to switch channels stop

As far as I can tell, this is caused by the old active client not getting

The attached patch should fix it.  I also cleaned up a little
parenthesizing, to make sure that that wasn't the problem, but effectively
the fix seems to be deactiving the client and resetting the focus to the
root if the active client is on the wrong channel.


Ben Stern             UNIX & Networks Monkey             bstern@...
This post does not represent FTI, even if I claim it does.  Neener neener.
UM Linux Users' Group     Electromagnetic Networks      Microbrew Software
diff -rub wmx-6/Channel.C wmx-6pl1/Channel.C
--- wmx-6/Channel.C	2000-05-24 11:46:14.000000000 -0400
+++ wmx-6pl1/Channel.C	2008-03-20 01:30:07.000000000 -0400
 <at>  <at>  -158,12 +158,14  <at>  <at> 

     for (i = 0; i < considering.count(); ++i) {
 	considering.item(i)->flipChannel(False, m_currentChannel);
-	if (considering.item(i)->channel() == m_channels &&
+	if ((considering.item(i)->channel() == m_channels) &&
 	    !considering.item(i)->isSticky()) createNewChannel();
(Continue reading)