seat: add kmscon_seat_is_registered() helper

This helper allows API users to check whether a session object is still
registered to a seat.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
seat: add kmscon_session_is_active() helper

This helper allows to check whether a given session is currently the
active session on its registered seat.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
seat: add enable/disable logic to sessions

If we want to allow dummy sessions, we need some way to disable these so
they are never activated on a seat. This patch disables every session by
default and you need to explicitely enable them to be available for
activation.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
seat: rename WAKE_UP/SLEEP to ACTIVATE/DEACTIVATE

We use this naming-scheme for all the session-helpers so we should also
use it for the callback notifications.
Also rename all the callback-helpers to *_call_* so we have no
name-clashes.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
seat: fix activating only enabled seats during session-switch

If we deactivate a session, we must not activate the next session we find
but we need to look for an enabled session instead.
This also changes the session_deactivate() helper to allow deactivating
disabled sessions. This shouldn't be relyed on, but it is a safe fallback
if some session turns out to be disabled but still active.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
uterm: video: add display_fill/blit helpers

Instead of requiring to create uterm-screens, it is now possible to blit
and fill displays directly similar to fake-blends.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
uterm: video: add display callbacks

Users might be interested in vertical-blank events so we now allow them to
register event-callbacks on displays. The only event that we currently
pass is a page-flip event that is always sent as reaction to a swap. If
there is no hardware support for such events, we simply throw it from
within the swap() function.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
uterm: video: use generic timer if vblank events are not available

fbdev does not provide any vertical-blanks so this introduces a generic
framework for uterm-videos as replacement. We simply schedule a timer
event that fires after a fixed timeout. This allows other subsystems to
rely on the page-flip event to occur either at the next real page-flip or
at a fixed timeout. As this is what we want in most places, we just
implement it inside of uterm. So relying on page-flips no longer hogs the
CPU because swap() generates the right away.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
uterm: video: fbdev: fix setting current-mode on activation

We must not recreate a video-mode if we re-activate an fbdev display after
wake-up. Otherwise, the "current" pointer changes and users might get
confused. We guarantee that the "current" pointer stays the same during
operation as we currently do not support changing display size without
reactiating the display.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
conf: allow multiple grabs and keysyms per grab-option

We allow users to specify grabs on the command-line or in config-options.
We sometimes want multiple grabs to do the same. Therefore, this changes
the grab-parser and handlers to allow this.

Furthermore, this adds support for keysyms that are assembled of multiple
syms. This isn't needed by any keymap, yet, but might be used in the
future.

Last but not least, you can also specify modifiers only now. This might be
used by subsystems to use the default keysyms but let the user specify
what modifiers should be used.
However, be careful when specifying modifiers-only for normal grabs as
this means the grab is executed everytime the modifier is reported with
_any_ key.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
shl: dlist: add *_but_one() loops

The *_but_one() variants of dlist-loops start from within a loop instead
of at the head and iterate over all elements except the start-element. The
start element is skipped as we would need a temporary variable to include
it and in most times you want to skip the start-element, anyway.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
seat: allow session-switching with keyboard

This adds two new grabs to switch sessions within kmscon. They are set to
ctrl+alt+Left/Right by default.

To improve debugging, we also add some log-messages to session management.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
kmscon: add wayland-session support

This adds a wayland compositor which registers sessions for each top-level
window within kmscon. This means, you can run any arbitrary
wayland-application on kmscon. Each top-level window that is registered by
the applications is put into a separate session and you can switch between
the sessions with the previously introduced session-shortcuts.

The compositor is still very basic. It doesn't support input devices at
all (not even talking about DnD). The only thing it does is surface
management (and even that is not fully implemented).

However, this shows the direction that kmscon will go. You can run the
Wayland "simple-shm" and "simple-egl" demos on kmscon to see how it works.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>