190 Commits

Author SHA1 Message Date
David Herrmann
55d4132931 console: add header protection
The header was missing a #ifndef to protect against multiple inclusions.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 18:08:10 +01:00
David Herrmann
f63eaffc95 pty: remove unneeded variable in setup_child
We can use "ret" instead of "saved_errno" here.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 17:43:26 +01:00
David Herrmann
d8d0e24a22 pty: move fork_pty_child to setup_child
The name fork_pty_child was misleading. It doesn't fork at all but
instead sets up the child's environment.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 17:39:20 +01:00
David Herrmann
31fc374065 pty: avoid FIONREAD ioctl
This ioctl is really not needed and performs needles kernel context
switches. We can simply read into our buffer without checking how many
data is available.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 17:23:49 +01:00
David Herrmann
229b4bfde2 pty: buffer data between pty and child
If the child returns EWOULDBLOCK on write we need to save the input in a
buffer to avoid loosing data. We need to work in non-blocking mode to
avoid UI hangs so we simply use the new ring-buffer object to store
data.

This also changes the callback behavior. The pty is no longer closed
implicitely so the owner must call pty_close now even if the close
callback is called. This avoids circular callbacks.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 17:17:20 +01:00
David Herrmann
2c8622d468 Add ring buffer object
The new ring buffer object will be used to buffer a byte-stream between
two sockets.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 17:16:37 +01:00
David Herrmann
ecb7ddbc29 pty: merge input and close callbacks
There is no reason to keep two callbacks as the caller always registers
both. Hence, we can use a shared callback. Reading length 0 means closed
like reading from an fd.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 14:03:52 +01:00
David Herrmann
da0623c260 terminal, pty: pass eloop reference on obj creation
There is no reason to pass the eloop reference late at terminal/pty
open. If we pass it early on object creation we will always have a valid
reference and can remove several code paths.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 13:56:13 +01:00
David Herrmann
9b4c6c5542 pty: move output_cb to input_cb
The output_cb handles output from the pty but it actually makes more
sense to call it input_cb as we are handling input to our console here.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 13:45:06 +01:00
David Herrmann
cda62d3e60 pty: move pty_input to pty_write
pty_write actually makes more sense as we are writing to the other end
and not reading input.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 13:44:25 +01:00
David Herrmann
c3d2ea3eb2 pty: fix style issue
Fix small indentation style issue.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 13:43:09 +01:00
David Herrmann
57bb28b1b4 pty: merge fork_pty and pty_spawn
pty_spawn was just a short wrapper so we can merge both into one
function.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 13:22:44 +01:00
Ran Benita
d480ec1030 pty: unblock all signals before exec'ing the child
When we register signals in the eloop we also block them in our signal
mask. The signal mask is inherited by the child. Therefore, if the child
does not reset its mask (e.g. bash and most normal processes), it will
not receive any of the signals that we handle. So for example C-c
(SIGINT) does nothing in the child process.

We now unblock all signals before we exec the child.

It's also worth noting that if we _ignore_ a signal -
sigaction(SIG_IGN) - this is also inherited and we must reset it to
default. However, we do not ignore signals so this is unneeded.

Here is some more discussion on signalfd and this problem:
https://lwn.net/Articles/415684/

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 12:54:22 +01:00
David Herrmann
beb4301830 kbd-dumb: fix log_warning -> log_warn
We recently moved log_warning to log_warn and I forgot to fix it when
merging the kbd-dumb backend. Fix this now.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 12:38:11 +01:00
Ran Benita
647d666da3 build: fix out-of-tree build and distcheck
The paths can be off when building out of tree, so have make put them in
for us instead. This requires turning the straight genshader.c file to a
template.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 12:29:49 +01:00
Ran Benita
510e53376a kbd: add a new "dumb" keyboard backend
This commit adds a very simple keyboard backend which does basic keycode
interpretation. It is used as a fallback when xkbcommon is unavailable
or is not required.

See the file header for what is supported.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 12:28:19 +01:00
Ran Benita
83dd9a6cfa build: depend on xproto explicitly
Currently it's required by xkbcommon. However, we will need it for other
backends as well, even with xkbcommon support disabled.

xproto consisted only of static header files. We use the XK_ keysym
definitions. It is therefore only required during compilation and we
shouldn't needlessly duplicate it ourselves.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 12:20:04 +01:00
David Herrmann
5cc56b8e3c xkb: fix merge failure
Merging the big xkb cleanup reversed the previous modifier state change.
Fix this now.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-28 12:14:48 +01:00
David Herrmann
bd09f38a4d log: move log_warning to log_warn
log_warn is much shorter and we already use log_err instead of log_error
so this is more consistent now.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-24 15:29:55 +01:00
David Herrmann
8e6803ed0a context: use GL_RGBA when full OpenGL is used
GL_BGRA_EXT as internal format is not supported with full OpenGL so we
must use GL_RGBA as internal format.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-24 15:14:15 +01:00
David Herrmann
4d34890cde eloop: remove verbose debug messages
These dispatch debug messages are currently no longer needed and just
fill the log needlessly.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-24 15:10:16 +01:00
Ran Benita
5cc190d947 test_terminal: wait on children to avoid zombies
Unfortunately, there is no clean way I see to hook this up from the pty
object. We can (and will) have more than one pty object opened at a
time, but the semantics of signalfd make it impossible to deliver each
SIGCHLD to its rightful owner without complicating things.

[ From what I tested:
 - If you have two signalfd's listening to the same signal, they will be
   dispatched in some round-robin manner.
 - Also, if more than one child exits before we read signalfd (possibly
   beloging to different terminals), they will be compressed to one
    event. ]

We therefore need to do the reaping from a central location, and need to
remember to copy this snippet over to main.c in the future.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-24 15:06:51 +01:00
Ran Benita
6ebc7c1892 terminal: use new pty object
Add a new terminal_open/terminal_close methods to correspond to the pty
ones, and notify when the terminal is closed.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-24 15:04:06 +01:00
Ran Benita
c63a5f2b95 Add pseudo terminal support
This commit adds a new pty object.

The pty object takes care of all pseudo terminal handling, reading and
writing. It can be opened and closed, and notify through callbacks when
input arrives or the child process exits/dies. It can also receive input
and pass it along to the child process.

There is not yet any real VTE processing, so we display raw escape
codes and so on. However, this should provide immediate feedback for
any further vte development, as we start to act like a real terminal
emulator.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-23 14:02:43 +01:00
Ran Benita
582ee16d31 test_input: simplify and drop xkbcommon dependency
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-23 13:51:50 +01:00
Ran Benita
9b75aa0b9d input, xkb: port to new kbd object
This commit ports the XKB handling to the new kbd interface, and makes
the input subsystem use it without any direct knowledge of XKB.

Some code is moved around but there are no functional changes.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-23 13:49:41 +01:00
Ran Benita
7cf93b8930 Add skeleton for multiple keyboard handling backends
This defines the API the keyboard backends will need to implement. It is
based on what's in input_xkb.h but cleaned up and simplified.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-23 13:44:07 +01:00
David Herrmann
629221b060 font: add debug messages
Add debug messages to freetype font backend.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-22 22:49:33 +01:00
David Herrmann
5a3801386a font: rewrite font backend
We now properly draw fonts with OpenGL. We now use FreeType2 instead of
pango to avoid big dependencies.

We also add a DejaVu font so we currently don't have to deal with font
selection.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-22 22:44:12 +01:00
David Herrmann
0b320653d8 math: new helper backend for linear algebra
We use this to perform proper matrix transformations.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-22 22:42:53 +01:00
David Herrmann
e5f5c2729a font: require compositor reference
To avoid cairo dependencies we now take a compositor reference in the
font backend so fonts can be drawn with GL textures instead of cairo.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-22 13:51:23 +01:00
David Herrmann
0f6c75637f font: fix memleak in freetype backend
We didn't unref the symbol table correctly. Fix it.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-22 13:47:55 +01:00
David Herrmann
b860e485b4 context: add GLES2 support
OpenGL pulls in lot of X dependencies on linux. To avoid this we also
support OpenGLES2 now. This will also allow to run kmscon on
embedded/mobile platforms.
We still get X dependencies through EGL which we cannot avoid as EGL is
compiled with multiple backends on most systems. However, switching to
GLES2 reduces memory footprint by 30MB which is pretty good.

This also enables GLES2 as default in autogen.sh. However, default
behaviour of configure will still be GL.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 18:11:03 +01:00
David Herrmann
67d0b75640 context: use BGRA_EXT texture internally
Some GLES2 implementations do not support RGBA so use BGRA internally,
too.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 18:07:52 +01:00
David Herrmann
32e869b99f context: warn on shader creation error
If we cannot allocate a shader object we should write a message to the
log.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 17:15:18 +01:00
David Herrmann
fd390c6043 context: first initialize EGL then find functions
We should first create a GL context before we try to find GL functions
to avoid errors on some platforms.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 16:52:58 +01:00
David Herrmann
7085084b1d context: use GL_TRIANGLES instead of GL_QUADS
GL_QUADS may actually be not supported on some embedded platforms so we
use GL_TRIANGLES.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 16:11:30 +01:00
David Herrmann
a10af939fa context: use GL_BGRA_EXT to avoid undeclared exts
GL_BGRA is not declared on older systems so we use the extension
constant.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 16:01:30 +01:00
David Herrmann
2df4692df1 context: fix wrong GL func declaration
I copied the wrong declaration. This fixes this.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 15:58:50 +01:00
David Herrmann
c96b0ffac3 terminal: replace GL functions with new context subs
We should use the context of the compositor instead of directly calling
the GL functions to avoid direct dependencies.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 15:52:54 +01:00
Ran Benita
e0a1902616 xkb: don't fill events purely for modifiers
We have no use for Control_L or Alt_R by themselves, the information is
in the "mods" field.

Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 15:49:09 +01:00
Ran Benita
32e622f8f2 terminal: also unref the idle object
Signed-off-by: Ran Benita <ran234@gmail.com>
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 15:48:27 +01:00
David Herrmann
83cec439c6 console: use new drawing pipeline
Instead of drawing with fixed-function GL pipeline we now use our own
shader for texture drawing. This also fixes test_console to no longer
depend on GL.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 15:45:58 +01:00
David Herrmann
84f29458e5 console: avoid code duplication in cairo destruction code
We can use our destruction function to avoid code duplication.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 15:35:32 +01:00
David Herrmann
a422c9f370 context: enable blend by default
Enable blending by default.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-20 15:34:21 +01:00
David Herrmann
5e0789a15b output: use UniformMatrix4fv instead of ~2fv
We use a 4x4 matrix so we should use the correct uniform handler.
Otherwise we might get errors on some GL implementations.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-18 19:11:14 +01:00
David Herrmann
05a1747f00 console: take reference of compositor
To switch to the new drawing subsystem we need a reference to a valid
compositor object so we can retrieve the GL context.
This also applies to the terminal object.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-18 18:09:08 +01:00
David Herrmann
cabde245df test_output: use new drawing pipeline
This converts the output test function to use the new kmscon_context for
drawing operations so we no longer depend directly on GL.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-18 16:26:57 +01:00
David Herrmann
cb9ef04ec3 output: add function to draw colored vertices
The new function kmscon_context_draw_def() can draw colored quads to the
screen.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-18 16:26:42 +01:00
David Herrmann
f3c42dd0a3 output: add default shader
Besides the texture shader this also adds a second shader (def/default)
which is used to draw arbitrary colored vertices to the screen.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-01-18 15:52:45 +01:00