[dev] swc: A small Wayland compositor

From: Michael Forney <mforney_AT_mforney.org>
Date: Thu, 23 Jan 2014 23:43:53 +0000

Hi suckless,

As discussed in the previous thread (swc library to implement dwm under
Wayland), I've been working on a Wayland compositor library, and after
several redesigns, I'm pretty happy with where it is now.

You can find the source here: https://github.com/michaelforney/swc

There is still some more work to be done, in particular moving/resizing
windows with the mouse, and more careful handling of special window
states (for example transient and fullscreen). However, for basic usage
it should work fine.

Here is the current output of sloccount:

SLOC Directory SLOC-by-Language (Sorted)
5801 libswc ansic=5801
533 launch ansic=533
409 cursor ansic=409

launch/ contains code for swc-launch, a privileged launcher that handles
VTs, managing DRM master, and opening/revoking input devices. cursor/
contains a program taken from wayland to extract cursors from the X
server cursor font.

As far as dependencies go, currently you need wayland, libdrm, libevdev,
libxkbcommon, pixman, and wld[0]. wld contains the buffer management and
rendering code used by swc and Wayland versions of st and dmenu.

Optionally, you can use libudev for input hotplugging. This is the only
way I know to accomplish this, and I am open to suggestions for
alternatives (I'd still like to remain compatible with systems running
udevd though).

I'd also like suggestions for how to deal with configuration for things
like what settings to use for XKB (keyboard layout, etc). This is a
per-user setting, so I don't think setting it in a config.h would be

I have not begun any process of porting/rewriting dwm to use swc. I
figured I'd see where people want to go from here. One potential
obstacle that might show up is the status bar. Since with swc the window
manager is in the same process as the compositor, currently the status
bar would have to go in to a separate process. I accomplished this in
the video below by adding a protocol extension which can notify clients
when certain things happen in the window manager (like workspace or
focus change). I'm not sure if this is the best approach though.

I made a demo video showing some of swc's features (as well as Wayland
st and dmenu) here: http://www.youtube.com/watch?v=5thcLnLHkjs&hd=1

The window manager used in the video is one that I started quite a while
ago, which I hacked up to use swc instead. It suits my needs for
developing swc, but I'd like to see what others can come up with! The
public API is available in swc.h[1].

Comments, questions, and criticism are welcome! You can find me on
freenode or OFTC under the nick tridactyla.

[0]: https://github.com/michaelforney/wld
[1]: https://github.com/michaelforney/swc/blob/master/libswc/swc.h

Michael Forney <mforney_AT_mforney.org>
Received on Fri Jan 24 2014 - 00:43:53 CET

This archive was generated by hypermail 2.3.0 : Fri Jan 24 2014 - 00:48:06 CET