platform/upstream/kmscon.git
12 years agovte: trivial: fix switch indentation
David Herrmann [Tue, 29 May 2012 11:59:19 +0000 (13:59 +0200)]
vte: trivial: fix switch indentation

We use kernel-style switch-case indentation.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: support designating charsets
David Herrmann [Tue, 29 May 2012 11:52:23 +0000 (13:52 +0200)]
vte: support designating charsets

With ESC {int} {final} you can designate G0-G3. If no {int} is given, we
fall back to the default escape sequences that replace the C1 set.
However, the user might designate other sets manually so we ignore all
escape sequences that have intermediates set.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: collect csi flags +, ( and )
David Herrmann [Tue, 29 May 2012 11:31:33 +0000 (13:31 +0200)]
vte: collect csi flags +, ( and )

All three flags are most often used with basic escape sequences and not
with CSI sequences, however, we treat them generic here to avoid more
complexity.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: support temporary charsets and g0-g3
David Herrmann [Tue, 29 May 2012 11:23:22 +0000 (13:23 +0200)]
vte: support temporary charsets and g0-g3

Temporary charsets are only used for the next graphics character that is
displayed. After that, the VTE returns to the previous charset. On
soft-reset we also reset these temporary slots.

This also adds the g0-g3 backend slots that can be set by the client and
allow mapping of arbitrary other charsets into gl/gr/glr/grt.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: always perform soft reset on DECSCL
David Herrmann [Tue, 29 May 2012 11:18:14 +0000 (13:18 +0200)]
vte: always perform soft reset on DECSCL

All DECSCL modes automatically perform a soft reset.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: add support for GL/GR mappings
David Herrmann [Tue, 29 May 2012 11:09:38 +0000 (13:09 +0200)]
vte: add support for GL/GR mappings

This allows mapping different charsets into GL/GR.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: perform soft reset on initialization
David Herrmann [Tue, 29 May 2012 11:06:56 +0000 (13:06 +0200)]
vte: perform soft reset on initialization

Instead of copying all that initialization stuff around, we simply perform
a soft reset on initialization.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: handle XK_Find and XK_Select
David Herrmann [Tue, 29 May 2012 10:46:09 +0000 (12:46 +0200)]
vte: handle XK_Find and XK_Select

Even though modern keyboard often do not include such keys, we should
handle them correctly, anyway. For the sake of backwards-compatibility.

This also comes in handy if you define these keys separately. The
functions that are implemented by many applications with these keys are
handy, indeed.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: move long csi-handlers into separate function
David Herrmann [Tue, 29 May 2012 10:43:58 +0000 (12:43 +0200)]
vte: move long csi-handlers into separate function

Avoid making do_csi() too big. So put long csi-handlers into separate
functions.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: implement DECSTR / soft-reset
David Herrmann [Tue, 29 May 2012 10:40:01 +0000 (12:40 +0200)]
vte: implement DECSTR / soft-reset

On soft-reset, all internal state is reset but the screen data is kept
alive.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: corectly implement DECSCL
David Herrmann [Tue, 29 May 2012 10:37:18 +0000 (12:37 +0200)]
vte: corectly implement DECSCL

We now select the 8bit/7bit modes if the client sends an DECSCL requesting
a conformance level.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: select CSI flags
David Herrmann [Tue, 29 May 2012 10:30:17 +0000 (12:30 +0200)]
vte: select CSI flags

Correctly select CSI flags like ?, !, > or $ and more. We actually don't
care about the position of these flags as other CSI parameters are just
digits.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: add kmscon_vte_reset()
David Herrmann [Tue, 29 May 2012 10:16:18 +0000 (12:16 +0200)]
vte: add kmscon_vte_reset()

This performs a soft reset of the VTE state machine. It does not affect
the console that is bound to the VTE, though.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: support 7bit and 8bit modes
David Herrmann [Tue, 29 May 2012 10:01:23 +0000 (12:01 +0200)]
vte: support 7bit and 8bit modes

In 7bit and 8bit modes we treat incoming characters as single-byte
characters and map them directly to the corresponding value instead of
using the UTF8 state-machine.

This allows using old non-utf8 applications with this VT. However, default
value is still UTF8-mode and you must explicitely request a conformance
level to change that. If you selected such a mode once, you can only
return to UTF8-mode by performing a soft/hard-reset.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoconsole: add kmscon_console_reset() dummy
David Herrmann [Tue, 29 May 2012 09:39:07 +0000 (11:39 +0200)]
console: add kmscon_console_reset() dummy

This dummy is supposed to hard-reset the console. As the console is far
from finished, we keep it as dummy and implement this later.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agounicode: introduce kmscon_utf8_mach_reset()
David Herrmann [Tue, 29 May 2012 09:13:49 +0000 (11:13 +0200)]
unicode: introduce kmscon_utf8_mach_reset()

Sometimes we need to reset the UTF8 state-machine, for instance when
resetting the VTE. This function simply resets the internal state to
KMSCON_UTF8_START so we start all over on the next input character.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agobuild: define KMSCON_ENABLE_DEBUG on --enable-debug
David Herrmann [Tue, 29 May 2012 09:12:21 +0000 (11:12 +0200)]
build: define KMSCON_ENABLE_DEBUG on --enable-debug

We build several internal libraries and to keep the namespaces apart we
also need different debug constants. Therefore, introduce the new
KMSCON_ENABLE_DEBUG constant which is for every debug object in base
kmscon code.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: add special character sets
David Herrmann [Tue, 29 May 2012 08:27:46 +0000 (10:27 +0200)]
vte: add special character sets

Since vt100 (and extended with vt220) you can load different character
sets into GL and GR. As we use UTF-8 as base encoding, we actually do not
need them but have to support it for backwards compatibility. For further
information, see the comments in vte_charsets.c.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: implement DECSCL 'p' CSI
David Herrmann [Mon, 28 May 2012 16:09:12 +0000 (18:09 +0200)]
vte: implement DECSCL 'p' CSI

DECSCL is used to select compatibility modes. We do not support the VT100
compatibility mode explicitely or the VT220 mode, however, we always send
7-bit control characters and support escape sequences from both series so
we can safely ignore DECSCL.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: implement NEL
David Herrmann [Mon, 28 May 2012 15:58:46 +0000 (17:58 +0200)]
vte: implement NEL

NEL is a shortcut for newline independent of the line-feed/new-line mode.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: implement IND and RI
David Herrmann [Mon, 28 May 2012 15:56:44 +0000 (17:56 +0200)]
vte: implement IND and RI

IND and RI both either move one row up or down and perform scroll up/down
if required.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: explicitely ignore DEL
David Herrmann [Mon, 28 May 2012 15:51:51 +0000 (17:51 +0200)]
vte: explicitely ignore DEL

Add dummy to do_execute() which explicitely ignores the DEL input.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: show reversed question mark on SUB
David Herrmann [Mon, 28 May 2012 15:47:51 +0000 (17:47 +0200)]
vte: show reversed question mark on SUB

When receiving SUB we now correctly write a reversed question mark into
the buffer. We still cancel the ongoing escape sequence, this worked even
without this patch.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: remove kmscon_console_backspace()
David Herrmann [Mon, 28 May 2012 14:49:56 +0000 (16:49 +0200)]
vte: remove kmscon_console_backspace()

This function is not needed at all. Instead, we should simply move one
character to the left on incoming backspace. There is no need to handle
auto-wrap on backspace.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: answer with ACK to an ENQ enquiry
David Herrmann [Mon, 28 May 2012 14:48:08 +0000 (16:48 +0200)]
vte: answer with ACK to an ENQ enquiry

Other emulators might ignore this. However, the easiest way to answer to
an enquiry is probably ACK.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: use callback for outgoing messages
David Herrmann [Mon, 28 May 2012 14:38:56 +0000 (16:38 +0200)]
vte: use callback for outgoing messages

VTE now requires a new callback that is called when we want to send
messages to the pty etc. This is needed if we want to send messages as
responses to incoming data. Otherwise, we would have way too much overhead
assembling composed messages.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: add ctrl+0-9 shortcuts
David Herrmann [Mon, 28 May 2012 13:39:25 +0000 (15:39 +0200)]
vte: add ctrl+0-9 shortcuts

The VT220 defines some additional shortcuts to send escape codes with
ctrl+<num>. Implement these as aliases to the same well-defined shortcuts.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: handle F1-F20 correctly
David Herrmann [Mon, 28 May 2012 13:30:17 +0000 (15:30 +0200)]
vte: handle F1-F20 correctly

F1-F4 are mapped to the keypad keys as these keys were not available on
VT220. F5 is special mapped and F6-F20 correspond to the same keys on the
keyboards for VT220.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: handle KeyPad/NumPad keys
David Herrmann [Mon, 28 May 2012 13:18:45 +0000 (15:18 +0200)]
vte: handle KeyPad/NumPad keys

This adds handlers for all the special keys on numpads/keypads.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: add line-feed/new-line mode
David Herrmann [Mon, 28 May 2012 13:12:10 +0000 (15:12 +0200)]
vte: add line-feed/new-line mode

In line-feed/new-line mode the NL/.. codes generate a CR *and* a NL.
Otherwise, they only generate CRs.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: implement cursor keys
David Herrmann [Mon, 28 May 2012 12:12:30 +0000 (14:12 +0200)]
vte: implement cursor keys

In cursor-key-mode reset we send the normal CSI sequences, again encoded
with C0 codes as C1 codes are nonsense in UTF8. In cursor-key-mode set we
use the SS3 codes instead.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: implement editing keys
David Herrmann [Mon, 28 May 2012 12:01:22 +0000 (14:01 +0200)]
vte: implement editing keys

Implement the basic editing keys that are used by several applications. We
use the 7bit CSI sequence to avoid UTF8 issues. Otherwise, we would have
to encode the C1 CSI 0x9b as UTF8 character which is also a 2 byte
sequence.

Besides INSERT, DELETE, PAGEUP and PAGEDOWN an VT220 also had SELECT and
FIND keys which we do not implement as they are not present on modern
keyboards.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte/font/console: support basic character attributes
David Herrmann [Mon, 28 May 2012 10:37:12 +0000 (12:37 +0200)]
vte/font/console: support basic character attributes

This adds support for colored and bold characters. This also adds the
infrastrucure for background colors and underlined characters, however,
these are not properly implemented, yet.

The color codes are similar to xterm and optimized on black backgrounds.
So they are not too bright or shiny.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: send correct escape characters on ctrl+KEY input
David Herrmann [Sun, 27 May 2012 14:45:27 +0000 (16:45 +0200)]
vte: send correct escape characters on ctrl+KEY input

This adds support for the ctrl+KEY inputs to send escape sequences to the
child process.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_input: introduce UTERM_INPUT_HAS_MODS()
David Herrmann [Sun, 27 May 2012 14:43:26 +0000 (16:43 +0200)]
uterm_input: introduce UTERM_INPUT_HAS_MODS()

This is a convenient macro to check whether a given set of modifiers is
enabled on the given input event.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_input: always print keysym
David Herrmann [Sun, 27 May 2012 14:41:19 +0000 (16:41 +0200)]
test_input: always print keysym

Print keysym even if we have a UCS4 representation. This makes debugging
keyboard issues much easier. Also increase buffer size to 32 as there are
many symbols longer than 16 characters.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: print debug message on unknown CSI parameters
David Herrmann [Sun, 27 May 2012 13:21:32 +0000 (15:21 +0200)]
vte: print debug message on unknown CSI parameters

Print a debug message if the CSI-K/J parameters are unknown.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovte: remove kmscon_vte_bind()
David Herrmann [Sun, 27 May 2012 12:47:11 +0000 (14:47 +0200)]
vte: remove kmscon_vte_bind()

Bind the console at vte creation instead of dynamically during runtime.
There is no need to rebind a console so remove this complexity.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomain: start ui on each seat
David Herrmann [Sun, 27 May 2012 10:08:49 +0000 (12:08 +0200)]
main: start ui on each seat

We now have a video device for each seat so we only need to launch the UI
when the video device is registered.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_input: fix increasing refcnt
David Herrmann [Sun, 27 May 2012 10:04:48 +0000 (12:04 +0200)]
uterm_input: fix increasing refcnt

We need to correctly increase the refcnt. We currently increase it only
when it was 0 before due to a very subtle bug as we missed the "return".

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoxkb: add a TODO note to kbd_dev_reset stub
Ran Benita [Sun, 20 May 2012 14:35:10 +0000 (17:35 +0300)]
xkb: add a TODO note to kbd_dev_reset stub

This is a small regression whereby starting kmscon with e.g. Caps Lock
already on, will not be reflected in the modifier mask. It's not
currently possible with xkbcommon.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoxkb: produce key events
Ran Benita [Sun, 20 May 2012 14:26:10 +0000 (17:26 +0300)]
xkb: produce key events

Use the new API in kbd_dev_process_key.
This introduces a regression whereby repeating key events are sent for
modifier keys. This is a currently a limitation in xkbcommon.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoxkb: initialize the xkb objects
Ran Benita [Sun, 20 May 2012 13:29:43 +0000 (16:29 +0300)]
xkb: initialize the xkb objects

The new xkb types correspond quite closely to our own types, which now
become thin wrappers.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoxkb: remove old xkb code and add stubs
Ran Benita [Sun, 20 May 2012 08:53:26 +0000 (11:53 +0300)]
xkb: remove old xkb code and add stubs

The libxkbcommon API as been revamped completely, making all of the
current code redundant and non-working. This commit removes all of the
old xkb_desc handling before using the new API.

After this commit, kmscon will no longer link to against the old
lixkbcommon; please update to a new package or compile from the
"master" branch from:
git://anongit.freedesktop.org/xorg/lib/libxkbcommon

[ This commit also adds a missing kbd_desc_new, which was declared but
not copied over from the old files. ]

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoinput: remove old input subsystem
David Herrmann [Sat, 26 May 2012 12:58:53 +0000 (14:58 +0200)]
input: remove old input subsystem

We are no longer using the old subsystem, so remove it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoReplace old input subsystem with new uterm input
David Herrmann [Sat, 26 May 2012 12:57:08 +0000 (14:57 +0200)]
Replace old input subsystem with new uterm input

Use the new subsystem now throughout the whole code.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agokbd: remove "dev" from kbd_dev_keysym_to_string
Ran Benita [Sun, 20 May 2012 15:15:54 +0000 (18:15 +0300)]
kbd: remove "dev" from kbd_dev_keysym_to_string

Both dumb and xkb don't actually need the kbd_dev for that. The dumb
backend already omits the "dev".

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomonitor: fix small memory leak
Ran Benita [Sun, 20 May 2012 15:26:51 +0000 (18:26 +0300)]
monitor: fix small memory leak

The members of the array returned from get_all_seats are strdup'd as
well.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomain: remove old session code
David Herrmann [Sat, 26 May 2012 12:39:25 +0000 (14:39 +0200)]
main: remove old session code

We now run a session on each registered seat so we no longer need the old
session code.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomain: allocate one VT per seat
David Herrmann [Sat, 26 May 2012 12:34:46 +0000 (14:34 +0200)]
main: allocate one VT per seat

Each session needs a virtual terminal where it operates. Therefore,
allocate one VT per seat so we can react on events on that seat.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovt: fix calling wrong callbacks
David Herrmann [Sat, 26 May 2012 12:30:38 +0000 (14:30 +0200)]
vt: fix calling wrong callbacks

If we allocate multiple VTs in a single process, then we share the same
signals which are used to acknowledge VT switches. Instead of blindly
calling the user-callbacks, we need to check first which VT is currently
active to forward the signal only if we are the active VT.
Otherwise, all VTs we allocate share a single logical VT.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomain: poll video devices on hotplug
David Herrmann [Sat, 26 May 2012 11:47:23 +0000 (13:47 +0200)]
main: poll video devices on hotplug

When the monitor notifies us about an hoptplug event, then we need to poll
the current video device. Otherwise, we might miss hotplugged monitors.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomain: add input device to each seat
David Herrmann [Sat, 26 May 2012 11:44:36 +0000 (13:44 +0200)]
main: add input device to each seat

Each seat now collects all input devices that are associated to that seat.
When multi-session support is added, then we can even share them between
the sessions.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomain: collect one DRM device per seat
David Herrmann [Sat, 26 May 2012 11:38:23 +0000 (13:38 +0200)]
main: collect one DRM device per seat

We need a single graphics card on a seat to run kmscon. Therefore, wait
for the first DRM device that appears and make it the current graphics
device for the seat. We do not support multiple graphics cards per seat
but this may be added in the future.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomain: create vt master object
David Herrmann [Sat, 26 May 2012 11:16:23 +0000 (13:16 +0200)]
main: create vt master object

When running multiple sessions on multiple seats, we need to allocate
multiple VTs, too. Therefore, we now create a VT master connection in the
main application which we can later use to allocate new VTs for each
session.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomain: listen for new seats
David Herrmann [Sat, 26 May 2012 11:14:20 +0000 (13:14 +0200)]
main: listen for new seats

Allocate new seat objects when a new seat occurs and remove them when a
seat goes away.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agomain: use uterm_monitor objects
David Herrmann [Sat, 26 May 2012 11:02:05 +0000 (13:02 +0200)]
main: use uterm_monitor objects

Create a global uterm_monitor object to monitor the system for new seats
and devices.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_vt: fix correctly passing vt data to callbacks
David Herrmann [Sat, 26 May 2012 05:33:34 +0000 (07:33 +0200)]
uterm_vt: fix correctly passing vt data to callbacks

When emulating the VT layer we need to pass our own data to the internal
callbacks. We currently pass the user data which is really useless here.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_vt: use new uterm vt master
David Herrmann [Sat, 26 May 2012 05:24:47 +0000 (07:24 +0200)]
test_vt: use new uterm vt master

Use uterm vt master to allocate an VT on seat0 for testing purposes.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm: add VT API
David Herrmann [Fri, 25 May 2012 07:45:20 +0000 (09:45 +0200)]
uterm: add VT API

The uterm VT API is designed to support new user-space implementations of
vt-master APIs. If we are on seat0 and CONFIG_VT is enabled, we use the
kernel VT API. In all other cases we currently simply fall back to a
non-op but will implement in the future dbus based APIs or similar to
support VT switching, that is multi-session, on all seats.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agovt: add kmscon_vt_supported() function
David Herrmann [Thu, 24 May 2012 17:14:51 +0000 (19:14 +0200)]
vt: add kmscon_vt_supported() function

If the kernel has CONFIG_VT disabled we should avoid opening VTs and
instead rely on other mechanisms for virtual terminals.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: fix eloop object never being freed
David Herrmann [Sun, 20 May 2012 20:54:08 +0000 (22:54 +0200)]
eloop: fix eloop object never being freed

We must _never_ take a reference to ourself in a constructor. Otherwise,
the refcnt will be >1 which means if the user calls *_unref() the object
will not get freed.
Therefore, do not add the counter object used for idle sources directly to
the event loop. Instead, add it when the first idle source is registered
and remove it when the last source is removed. This will slightly slow
down performance of idle-sources. However, the whole eloop is not
optimized for speed, yet, so we don't care for now.

Reported-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: add initial gtk-doc comments
David Herrmann [Sat, 19 May 2012 15:58:08 +0000 (17:58 +0200)]
eloop: add initial gtk-doc comments

Add gtk-doc compatible comments to most of the functions in eloop.c.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: dynamically reallocate dispatch cache
David Herrmann [Sat, 19 May 2012 11:47:55 +0000 (13:47 +0200)]
eloop: dynamically reallocate dispatch cache

We do not maintain event caches so we must make sure that every event
source gets dispatched. If we call epoll_wait() and our buffer gets
filled everytime, then there might be an event source that does not get
dispatched because it is always above the buffer range. Therefore, we now
dynamically increase the cache size when it once gets filled up.

This gets critical if we handle thousands of clients or fds, however, our
use case is limited to some system resources and hence does not suffer
here.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: add more comments
David Herrmann [Sat, 19 May 2012 11:33:05 +0000 (13:33 +0200)]
eloop: add more comments

Add comments describing each source and the nesting features.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: use counter source for idle events
David Herrmann [Sat, 19 May 2012 11:07:12 +0000 (13:07 +0200)]
eloop: use counter source for idle events

epoll has the great feature that the poll object is an fd itself. However,
if we want to use idle-sources, we couldn't add them to the epoll set.
Now, we use a counter source for all idle sources so if we add a single
event-loop as source to another event loop, the idle sources will get
dispatched correctly. Furthermore, we now longer block after handling idle
sources but instead now correctly run idle sources every next round
without sleeping for fd events in between.
Unregister idle sources to avoid hogging the CPU.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: fix not returning new counter object
David Herrmann [Sat, 19 May 2012 11:05:49 +0000 (13:05 +0200)]
eloop: fix not returning new counter object

We forgot to actually store the pointer to the new counter object in the
\out variable. Fix this now.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: forward timer HUP and I/O errors to caller
David Herrmann [Sat, 19 May 2012 10:47:08 +0000 (12:47 +0200)]
eloop: forward timer HUP and I/O errors to caller

Similar to counter callbacks we now call timer callbacks with 0 as
argument on errors and disable the timer source.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: forward EOF and I/O errors of counters to caller
David Herrmann [Sat, 19 May 2012 10:30:05 +0000 (12:30 +0200)]
eloop: forward EOF and I/O errors of counters to caller

Instead of silently dropping read() errors we now disable the counter and
call the user-supplied callback with 0 as argument so they can react on
errors.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: allow enabling/disabling counter sources
David Herrmann [Sat, 19 May 2012 10:26:55 +0000 (12:26 +0200)]
eloop: allow enabling/disabling counter sources

Similar to fd and timer sources we now also support disabling counter
sources via similar functions.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: allow enabling/disabling timer sources
David Herrmann [Sat, 19 May 2012 10:24:28 +0000 (12:24 +0200)]
eloop: allow enabling/disabling timer sources

Similar to the fd_enable/disable functions we now also allow the same
operations on timer sources.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: correctly forward error codes
David Herrmann [Sat, 19 May 2012 10:15:51 +0000 (12:15 +0200)]
eloop: correctly forward error codes

Instead of ignoring epoll errors we should forward them to the caller. The
caller can then still decide to ignore errors.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: allow enabling/disabling fd sources
David Herrmann [Fri, 18 May 2012 15:35:18 +0000 (17:35 +0200)]
eloop: allow enabling/disabling fd sources

We sometimes want to be able to enable/disable an fd-source without
allocating memory (for a short period, for instance). Therefore, introduce
two new functions to enable and disable an fd source.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agofbdev: add few implementation hints
David Herrmann [Fri, 18 May 2012 14:39:23 +0000 (16:39 +0200)]
fbdev: add few implementation hints

fbdev is still not ready but we add some hints so implmenting it later
will be easier.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: move callback declarations into correct order
David Herrmann [Fri, 18 May 2012 14:38:51 +0000 (16:38 +0200)]
eloop: move callback declarations into correct order

Use same order as the function definitions.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: convert idle sources to hooks
David Herrmann [Thu, 17 May 2012 16:35:00 +0000 (18:35 +0200)]
eloop: convert idle sources to hooks

Instead if implementing complex idle sources we now provide a hook so
other subsystems can register callbacks.

This simplifies the code a lot and doesn't drop any major functionality.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: move code
David Herrmann [Thu, 17 May 2012 16:17:52 +0000 (18:17 +0200)]
eloop: move code

Restructure eloop code. This puts stuff more closely together if it is
related.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: make timers create fd on initialization
David Herrmann [Thu, 17 May 2012 15:40:14 +0000 (17:40 +0200)]
eloop: make timers create fd on initialization

Similar to other event sources we now initialize internal data on timer
creation instead of when the source is added to the loop.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: take fd argument for fd-sources at initialization
David Herrmann [Thu, 17 May 2012 15:03:46 +0000 (17:03 +0200)]
eloop: take fd argument for fd-sources at initialization

When creating a new fd-source you must supply the file descriptor
directly. You cannot delay this to the time when you add the fd to the
event loop.

This simplifies the logic and allows much smoother handling in the event
loop core.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: add counter sources
David Herrmann [Thu, 17 May 2012 14:41:26 +0000 (16:41 +0200)]
eloop: add counter sources

Counter sources are based on the eventfd syscall of linux. Internally, is
uses a 64bit counter which is initialized to 0 and can be increased by the
caller. Whenever the value is non-zero, the fd is marked readable and we
call our callback. We read the 64bit integer (which resets it to 0) and
pass the current value to the callback.

This can be used to implement cross-process notification methods or to
have idle-sources as valid file-descriptors in an epoll set which could be
exported to other applications that are not compliant to our event loop.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agoeloop: add ev_fd_is_bound() helper
David Herrmann [Thu, 17 May 2012 14:33:47 +0000 (16:33 +0200)]
eloop: add ev_fd_is_bound() helper

This helper returns true if the fd is bound to an eloop object, otherwise
false is returned.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_output: explicitely activate GL context
David Herrmann [Thu, 17 May 2012 14:31:38 +0000 (16:31 +0200)]
test_output: explicitely activate GL context

We now support multiple GL contexts in uterm so we need to explicitely
enable them before using them.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agofont: fix trailing newline in debug message
David Herrmann [Thu, 17 May 2012 12:44:50 +0000 (14:44 +0200)]
font: fix trailing newline in debug message

log_* appends newline automatically so remove it from the debug message.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_output: fix build failure
David Herrmann [Sat, 5 May 2012 20:49:29 +0000 (22:49 +0200)]
test_output: fix build failure

Use new uterm_video constructor. This requires hard-coding the DRM card
but this is needed until we use the uterm_monitor interface.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agotest_input: use new input API
David Herrmann [Sat, 5 May 2012 20:48:15 +0000 (22:48 +0200)]
test_input: use new input API

Use new uterm_monitor and input API instead.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_monitor: correctly enumerate input devices
David Herrmann [Sat, 5 May 2012 20:41:23 +0000 (22:41 +0200)]
uterm_monitor: correctly enumerate input devices

We are actually not interested in the main input device but rather in the
evdev interface. However, the evdev interface is a child of the input
device and therefore has no seat values specifies. This patch removes the
scan-filter for seat tags and performs seat matching in user-space by
first finding the parent of the input device.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_monitor: refresh seats before scanning the system
David Herrmann [Sat, 5 May 2012 20:40:32 +0000 (22:40 +0200)]
uterm_monitor: refresh seats before scanning the system

We currently only scan devices in uterm_monitor_scan() but we should read
the initial seat values before even searching for devices.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_monitor: initialize list heads correctly
David Herrmann [Sat, 5 May 2012 20:40:01 +0000 (22:40 +0200)]
uterm_monitor: initialize list heads correctly

List heads must be initialized and cannot be set to NULL by default.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_monitor: add debug messages
David Herrmann [Sat, 5 May 2012 20:39:24 +0000 (22:39 +0200)]
uterm_monitor: add debug messages

Be more verbose about added and removed devices. Otherwise, debugging is
not as easy as it could be.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_input: fix initializing device list
David Herrmann [Sat, 5 May 2012 20:37:21 +0000 (22:37 +0200)]
uterm_input: fix initializing device list

kmscon_dlist heads must be initialized and cannot be set to NULL by
default!

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_input_xkb: fix typo
David Herrmann [Sat, 5 May 2012 20:36:23 +0000 (22:36 +0200)]
uterm_input_xkb: fix typo

We renamed kmscon_kbd to kbd_dev but forgot that single function.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_input: fix typo
David Herrmann [Sat, 5 May 2012 20:35:43 +0000 (22:35 +0200)]
uterm_input: fix typo

The header said *_is_asleep() instead of *_is_awake().

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_input: add xkb backend
David Herrmann [Sat, 5 May 2012 19:30:06 +0000 (21:30 +0200)]
uterm_input: add xkb backend

This mainly copies the kbd_xkb.c backend into the uterm library.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_input: use new kbd API
David Herrmann [Sat, 5 May 2012 19:15:57 +0000 (21:15 +0200)]
uterm_input: use new kbd API

Use the uterm internal kbd API instead of the kmscon kbd API.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_input: add kbd API
David Herrmann [Sat, 5 May 2012 19:14:38 +0000 (21:14 +0200)]
uterm_input: add kbd API

Internally, we use a new kbd API to handle keyboard related stuff in
uterm. It is a reimplementation of the old kbd_dumb.c backend.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_input: add input layer to uterm
David Herrmann [Sat, 5 May 2012 18:33:27 +0000 (20:33 +0200)]
uterm_input: add input layer to uterm

This is a rewrite of the input layer but integrated into uterm. It has the
same functionality but is tightly bound to the concepts behind uterm and
will soon supercede the old implementation.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_monitor: add input device support
David Herrmann [Sat, 5 May 2012 16:21:58 +0000 (18:21 +0200)]
uterm_monitor: add input device support

To allow moving all input handling to uterm, too, we need to detect input
devices in the uterm-monitor like all other devices, too.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_video: remove hotplug awareness
David Herrmann [Sat, 5 May 2012 15:39:46 +0000 (17:39 +0200)]
uterm_video: remove hotplug awareness

To introduce the new uterm-monitor object we need to remove all the udev
handling from uterm_video. To not break "git bisect" we now remove all the
udev code from uterm_video and uterm_video_drm and make kmscon use the
static /dev/dri/card0 interface for now.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_video_drm: include xf86drmMode.h again
David Herrmann [Sat, 5 May 2012 15:24:23 +0000 (17:24 +0200)]
uterm_video_drm: include xf86drmMode.h again

Upstream mesa fixed the missing header protection of xf86drmMode.h so we
can include it again.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
12 years agouterm_monitor: add system monitor for full seat support
David Herrmann [Sat, 5 May 2012 15:16:13 +0000 (17:16 +0200)]
uterm_monitor: add system monitor for full seat support

The new uterm_monitor watches the system for seat-changes and puts all
devices under the correct seat. This allows to run kmscon on multiple
seats in a single process. It now also correctly handles seat-changes,
that is, devices that are reattached to a different seat on runtime.

It is not integrated into the kmscon source, yet, but will soon be.

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