| 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 practically |
| 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. |
| |
| ----------------------------------------------------------------------- |