This file is a collection of informal notes, with references to where
they were originally written. Each note should have a source and date
mentioned. Let's keep these in date order, newest first.



-----------------------------------------------------------------------
2015-04-14; Pekka Paalanen <ppaalanen@gmail.com>
http://lists.freedesktop.org/archives/wayland-devel/2015-April/021309.html

Never destroy weston_views or weston_surfaces from animation hooks.
Never destroy weston_views from weston_view signals.

Basically, never manipulate a list while transversing it.


-----------------------------------------------------------------------
2012-10-23; Pekka Paalanen <ppaalanen@gmail.com>
http://lists.freedesktop.org/archives/wayland-devel/2012-October/005969.html

For anyone wanting to port or write their own window manager to Wayland:

Most likely you have a desktop window manager. A quick way to get
started, is to fork Weston's desktop-shell plugin and start hacking it.
Qt could be another good choice, but I am not familiar with it.

You also need to understand some concepts. I'm repeating things I wrote
to the wayland-devel list earlier, a little rephrased.

We need to distinguish three different things here (towards Wayland
clients):

- compositors (servers)
	All Wayland compositors are indistinguishable by definition,
	since they are Wayland compositors. They only differ in the
	global interfaces they advertise, and for general purpose
	compositors, we should aim to support the same minimum set of
	globals everywhere. For instance, all desktop compositors
	should implement wl_shell. In X, this component corresponds to
	the X server with a built-in compositing manager.

- shells
	This is a new concept compared to an X stack. A shell defines
	how a user and applications interact. The most familiar is a
	desktop (environment). If KDE, Gnome, and XFCE are desktop
	environments, they all fall under the *same* shell: the desktop
	shell. You can have applications in windows, several visible at
	the same time, you have keyboards and mice, etc.

	An example of something that is not a desktop shell
	could be a TV user interface. TV is profoundly different:
	usually no mouse, no keyboard, but you have a remote control
	with some buttons. Freely floating windows probably do not make
	sense. You may have picture-in-picture, but usually not several
	applications showing at once. Most importantly, trying to run
	desktop applications here does not work due to the
	incompatible application and user interface paradigms.

	On protocol level, a shell is the public shell interface(s),
	currently for desktop it is the wl_shell.

- "window managers"
	The X Window Managers correspond to different wl_shell
	implementations, not different shells, since they pratically
	all deal with a desktop environment. You also want all desktop
	applications to work with all window managers, so you need to
	implement wl_shell anyway.

I understand there could be special purpose X Window Managers, that
would better correspond to their own shells. These window managers
might not implement e.g. EWMH by the spec.

When you implement your own window manager, you want to keep the public
desktop shell interface (wl_shell). You can offer new public
interfaces, too, but keep in mind, that someone needs to make
applications use them.

In Weston, a shell implementation has two parts: a weston plugin, and a
special client. For desktop shell (wl_shell) these are src/shell.c and
clients/desktop-shell.c. The is also a private protocol extension that
these two can explicitly communicate with.

The plugin does window management, and the client does most of user
interaction: draw backgrounds, panels, buttons, lock screen dialog,
basically everything that is on screen.

-----------------------------------------------------------------------
