Commit Graph

1771 Commits

Author SHA1 Message Date
Tomeu Vizoso
0f0a6ffc2e Remove dependency on <GLES2/gl2.h> by replacing GLfloat with float 2013-11-27 22:49:31 -08:00
Emilio Pozuelo Monfort
eed9344430 exposay: properly go away when the modifier is pressed
We no longer receive an exposay_binding() call while exposay
is in-flight as we have grabbed the keyboard, so we need to
listen on the modifiers callback for the modifier press and
release.
2013-11-27 22:49:31 -08:00
Emilio Pozuelo Monfort
1539ea2f74 input: don't run modifier bindings when the kbd is grabbed
We don't want bindings to be run while the keyboard is grabbed.
Otherwise the binding handler may grab the keyboard too, making
the old grab go away without even being cancelled.
2013-11-27 22:49:31 -08:00
Pekka Paalanen
d5fbfb2e35 rpi: avoid vc_dispmanx_set_wl_buffer_in_use without EGL
The symbol is needed only for the EGL buffer path. If --disable-egl is
given to ./configure, there is no need for it, so fix it to actually not
look for that symbol needlessly.

This should fix the runtime error:

	Failed to load module: .../rpi-backend.so: undefined symbol:
	vc_dispmanx_set_wl_buffer_in_use

when you use --disable-egl and do not have a recent enough
libraspberrypi package (/opt/vc, a.k.a userland.git) that would provide
vc_dispmanx_set_wl_buffer_in_use. Apparently no released version of
userland yet provides this.

The calls are organized into two helper functions to avoid a boolean
argument, and put the #ifdefs away from the main parts of the code.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Cc: Tomeu Vizoso <tomeu@tomeuvizoso.net>
2013-11-27 22:49:31 -08:00
Emilio Pozuelo Monfort
234c5242ab exposay: provide a cancel func to the ptr grab iface
Fixes a crash when cancel is called while exposay is in progress.
2013-11-27 22:49:31 -08:00
Xiong Zhang
fd51e7bb57 src/data_device.c: add dnd support for touch screen
Adding the drag and drop grab interface for touch screen in
src/data-device.c, so the server can handle touch screen
drag and drop operation.

Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.com>
Reviewed-by: Kristian Hogsberg <hoegsberg@gmail.com>
2013-11-25 16:32:00 -08:00
Kristian Høgsberg
24fc228044 Makefile.am: The wayland rpi doesn't libsession-helper.la 2013-11-25 13:54:30 -08:00
Marco Barisione
12e750bbc4 Makefile.am: The rpi backend needs libsession-helper.la
Signed-off-by: Marco Barisione <marco.barisione@collabora.co.uk>
2013-11-25 11:38:50 -08:00
Xiong Zhang
e955525f1a src/Makefile.am: correct compile failure for launcher-util.c
The following error message is generated during compile
In file included from launcher-util.c:43:0:
compositor.h:35:28: fatal error: wayland-server.h: No such file or directory
 #include <wayland-server.h>

Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.com>
2013-11-25 10:59:01 -08:00
Kristian Høgsberg
989e9d582c Makefile.am: Move launcher helpers in to libsession-helper.la library 2013-11-24 15:16:23 -08:00
Kristian Høgsberg
d2c9d8af50 configure.ac: Make libdrm optional in weston-launch
If libdrm is available, weston-launch and launcer-util.c will support
getting the drm device and setting and dropping drm master, otherwise
we'll only support getting input devices.
2013-11-24 15:16:23 -08:00
Kristian Høgsberg
ebd5fd4753 input: Cancel pointer grabs when compositor loses kb focus
This makes sure we pop down popups when the X backend loses keyboard
focus or when the kms backend vt-switches away.
2013-11-22 21:12:19 -08:00
Emilio Pozuelo Monfort
3d0fc76dd5 shell: don't crash if a pointer's focus is null
It's possible for a pointer's focus to be null, e.g. because
the focus surface has been bestroyed. Prevent a crash when
that happens and a client takes too long to respond to a ping.

Signed-off-by: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
2013-11-22 13:31:55 -08:00
Giulio Camuffo
0d379744d3 compositor: set weston_surface:resource to NULL when destroyed
with the previous patch the resource isn't used inside weston_surface_destroy()
anymore (aside sending events unuseful for a closing client), so we can safely
reset it.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Bryce Harrington <b.harrington@samsung.com>
2013-11-21 22:00:17 -08:00
Emilio Pozuelo Monfort
46ce798d28 shell: add a client config entry 2013-11-21 21:35:17 -08:00
David Herrmann
fcb6bf43a4 logind: change to -1+errno
Set errno and return -1 in public API calls like all other weston code
does. Most systemd+dbus calls return negative error-codes instead of -1
and setting errno. Thus, we need to explicitly set errno before returning.

Also note that we must set errno _after_ the cleanup path. Calling
functions like close() in the cleanup path might overwrite errno (which is
not what we want). So protect errno until the final return -1;
2013-11-21 16:28:08 -08:00
Kristian Høgsberg
f86c39058a logind: Use dbus_bool_t for bool types in dbus calls
The gcc built-in 'bool' type is not the same size as dbus_bool_t, which is
an uint32_t.  Passing a pointer to bool where dbus expects a uint32_t *
doesn't work.

Reviewed-by: David Herrmann <dh.herrmann@gmail.com>
2013-11-21 10:45:41 -08:00
Giulio Camuffo
576fe2af4b input: set the focus to NULL when the focus's resource is destroyed
with the surface ref-count feature a surface may live on after its
resource was destroyed. so listen for the resource destroy signal
and set the focus to NULL.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-20 16:59:00 -08:00
Jason Ekstrand
3ec57f5d69 compositor-drm: Release the correct buffer in drm_output_release_fb 2013-11-19 13:25:10 -08:00
Jason Ekstrand
42133d47d3 input: Fix a segfault in focus checking
Without this, weston will segfault whenever the focus is a non-client
surface such as the black surface in fullscreen.
2013-11-19 13:23:40 -08:00
Ander Conselvan de Oliveira
895b1fdcb2 gl-renderer: Attach buffer during surface state creation if possible
When a renderer switch happens, it is possible that when the surface
state is created, a buffer for the given surface is already available.
In that case, run the attach routine so that the pixel contents are
properly set. Otherwise, it would only be set when a new attach request
is made for that surface.

Also, change the drm backend so that it keeps the buffer reference in
the weston_surface when running with the pixman renderer. The pixman
renderer keeps a reference to it anyway, so it is never released
early.

This makes the renderer transition seamless, without leaving a black
screen as before.
2013-11-19 13:11:25 -08:00
Ander Conselvan de Oliveira
65796816b9 compositor-drm: Add key binding to switch from pixman to GL renderer
When running with the pixman renderer, the debug binding 'W'
(mod-shift-space W) will cause the compositor to load gl-renderer.so
and start using it instead of the pixman renderer.
2013-11-19 13:11:20 -08:00
Pekka Paalanen
b188e912c3 compositor: fix sub-surface view stacking order
If you opened a window with sub-surfaces, and then raised another window
on top of that, the underlaying window's main surface was stacked
properly, but the sub-surfaces remained on top of the raised window.
IOW, the raised window was in between the other window and its
sub-surfaces.

This got broken in a7af70436b, "Split the
geometry information from weston_surface out into weston_view".

Fix the issues:

In view_list_add_subsurface_view(), the views need to be added to the
end of the list, not to the head. This alone fixes the above problem,
but causes the sub-surface views to be stacked irrespective of their
surface stacking order. The stacking order in this test case is fixed by
the changes to view_list_add(), but for sub-sub-surfaces a similar
change is needed in view_list_add_subsurface_view() too.

In view_list_add(), build the view list in the sub-surface stacking
order, instead of pulling the parent surface always on top. Also handle
the case, when the subsurface_list is completely empty: the parent
surface's view must still be added.

Reported-by: Julien Isorce <julien.isorce@collabora.com>
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Cc: Jason Ekstrand <jason@jlekstrand.net>
2013-11-19 12:57:24 -08:00
Emilio Pozuelo Monfort
17467d602d exposay: move the pointer in our motion handler
This is necessary since commit 1959ab.
2013-11-19 11:52:12 -08:00
Emilio Pozuelo Monfort
da64426685 shell: Set output on the focus_surfaces' view
Otherwise we crash when animating the view.

Signed-off-by: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
2013-11-19 11:51:51 -08:00
Emilio Pozuelo Monfort
5c22ce652d exposay: Activate a surface when hovering it
This causes the surface to get the keyboard focus, which in turn
causes focus-animation to nicely work with exposay, making the
not focused surfaces to be dimmed.

Signed-off-by: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
2013-11-19 11:51:44 -08:00
Emilio Pozuelo Monfort
8224309f14 exposay: add cancel impl to the kbd grab iface
Otherwise we'll crash when cancel is called.

Signed-off-by: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
2013-11-19 11:51:26 -08:00
Emilio Pozuelo Monfort
03251b6a7a shell: Implement alt-tab switcher
Signed-off-by: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
2013-11-19 11:51:18 -08:00
Emilio Pozuelo Monfort
aa7a4761f6 input: Don't send leave events to destroyed views
If a view which has focus is destroyed, we would send a leave
event while changing focus, causing a segfault. Prevent this
by listening to the view's destroy signal and removing it from
the pointer focus.

Signed-off-by: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
2013-11-19 11:49:40 -08:00
Daniel Stone
df8133b725 Add Exposay
Exposay provides window overview functions which, when a key which
produces the binding modifier is pressed on its own, scales all
currently-open windows down to be shown overlaid on the desktop,
providing keyboard and mouse navigation to be able to switch window
focus.

[pochu: rebased, ported to weston_view]
2013-11-19 11:49:33 -08:00
Daniel Stone
a67e6b9818 Add move/scale animation
Add an animation which moves a surface to a new location, at the same
time as also rescaling it to a different size from the origin, rather
than the existing scale animation which resizes from the centre.

[pochu: rebased, ported to weston_view]
2013-11-19 11:49:28 -08:00
Daniel Stone
96d47c0ef7 Add modifier-only binding
Add the ability to bind to modifiers; the binding is armed when a key
which sets the requested modifier is pressed, and triggered if the key
is released with no other keys having been pressed in the meantime, as
well as mouse buttons or scroll axes.

This only works for direct modifiers (e.g. Shift and Alt), not modifiers
which latch or lock.

[pochu: rebased]
2013-11-19 11:49:25 -08:00
Louis-Francis Ratté-Boulianne
b482dbd7eb animation, shell: add kbd focus change animation
When enabled, this will make all but the keyboard-focused window dim.
Also the background gets dimmed, if there are any windows open. The
panel is not dimmed.

When the keyboard focus changes, the change in dimming is animated.

The dimming is implemented with transparent solid-color surfaces, two at
most. The net effect of two overlapping dim surfaces is kept constant
during animations (stable fade animation).

There is a new weston.ini option "focus-animation", that defaults to
none, and can be set to "dim-layer" to enable the focus change
animation.

[pq: Sliced, squashed, and rebased the patch series. Fixed surface alpha
interaction with the switcher. Wrote the commit message.]

[pochu: rebased, ported to weston_view]
2013-11-19 11:49:20 -08:00
Axel Davy
dd8b88d102 Wayland backend: set the opaque region when starting fullscreen
The opaque region is not set when we start the nested
compositor fullscreen. This patch fixes this.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
2013-11-19 11:44:51 -08:00
Pekka Paalanen
a662206e71 protocol: move sub-surfaces to Wayland
This reverts commit 2396aec684.

This exact version of the sub-surface protocol has been copied into
Wayland core. Therefore it must be removed from here to avoid build
conflicts and useless duplication.

No other changes to sub-surface protocol consumers are needed, the
identical API is now offered by libwayland-client and libwayland-server.

The commit adding sub-surfaces to Wayland is:
Author: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

    protocol: add sub-surfaces to the core

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2013-11-15 16:23:17 -08:00
Lubomir Rintel
ba44c6bf2e Add [core] backend option
This allows specifying a particular backend to load in a manner similar to
modules.

Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
2013-11-15 16:17:51 -08:00
Giulio Camuffo
cdb4d29096 compositor: add a way to override the default pointer grab 2013-11-15 16:17:51 -08:00
Giulio Camuffo
1959ab8d22 input: let the pointer motion handlers move the pointer
this allows to implement pointer barriers by using a custom handler
2013-11-15 16:17:51 -08:00
Giulio Camuffo
412b024be8 zoom: use the new pointer motion signal to move the zoom frame. 2013-11-15 16:17:51 -08:00
Giulio Camuffo
6fcb378c01 input: add a motion signal to weston_pointer
The signal will be emitted after the pointer is moved. A shell plugin
can listen to the signal and activate certain effects when the pointer
touches the screen corners, for instance.
2013-11-15 16:17:51 -08:00
Kristian Høgsberg
a3a784adae compositor: Schedule a repaint in weston_view_damage_below()
We always want a repaint if the view was damaged or changed.  In
particular, we want weston_view_update_transform() to schedule a
repaint for the old and new position if we change the view transform.
2013-11-13 21:33:43 -08:00
Neil Roberts
e505171a32 Add calls to wl_shm_buffer_begin/end_access
This wraps all accesses to an SHM buffer between wl_shm_buffer_begin
and end so that wayland-shm can install a handler for SIGBUS and catch
attempts to pass the compositor a buffer that is too small.
2013-11-13 16:32:58 -08:00
Jonas Ådahl
f707e8145b filter: Remove unused variable
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-11-12 16:20:34 -08:00
Jonas Ådahl
e82f8e4b0f evdev: Synchronize keys only if seat is keyboard capable
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-11-12 16:20:19 -08:00
Jason Ekstrand
5ea048014d compositor-wayland: Add fullscreen support
This adds fullscreen support to the wayland backend.  You can make any
output fullscreen by the shortcut CTRL+ALT+F.  You can also run weston with
the --fullscreen option which causes it to create a single fullscreen
output.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-11 13:38:02 -08:00
Jason Ekstrand
12c6dd965b compositor-wayland: Add a --scale option
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-11 13:37:19 -08:00
Jason Ekstrand
0cf39351bb compositor-wayland: Move config parsing into backend_init
This cleans up the configuration and command parsing and separates it from
compositor/output initialization.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-11 13:37:08 -08:00
Jason Ekstrand
584fb62437 compositor-wayland: Fix cursor coordinate transforms so it works on translated outputs
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-11 13:36:45 -08:00
Jason Ekstrand
06ced80f93 compositor-wayland: rename wayland_compositor.inputs to input_list
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-11 13:36:32 -08:00
Jason Ekstrand
4d615a7aa1 compositor-wayland: Remove unused output handling code
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-11 13:36:22 -08:00
Jason Ekstrand
48ce42177f compositor-wayland: Parse [output] config sections and more options
This commit makes the wayland backend search through the config for
[output] sections with names starting with "WL" and create outputs
accordingly.  Outputs created due to the config file support mode, scale,
and transform parameters.  It also listens for the --output-count
command-line option.

This brings the wayland backend almost up to par, in terms of functionality
with the X11 backend.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-07 16:35:01 -08:00
Jason Ekstrand
33ff636812 Move region transformation code to weston_transformed_region
Both the Pixman renderer and the X11 backend contained effectively the same
region transformation code.  This commit adds a weston_transformed_region
function and changes pixman-renderer and compositor-x11 to use it.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-07 16:34:59 -08:00
Jason Ekstrand
b6a3cc7f17 Make weston_output_transform_coordinate more sane
The output is renamed "output" from "x11_output" and the input coordinates
are changed to wl_fixed_t from int.  This way it is useable in
compositor-wayland as well as compositor-x11 and evdev.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-07 16:34:57 -08:00
Jason Ekstrand
00b842854b Remove the concept of a border from weston_output.
The only user for this was the wayland backend with the GL renderer.  It is
not needed in the Pixman renderer because you can easily create subimages.
All of the fancy output matrix calculations can be replaced by a single
glViewport call.  Also, it didn't work with outputs located anywhere but
(0, 0) and I'm pretty sure output transformed outputs would break it too.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-07 16:34:54 -08:00
Jason Ekstrand
ff2fd46e9c compositor-wayland: Add pixman/SHM fallback mode
This also adds a --use-pixman command-line option to enable the pixman
renderer explicitly.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-07 16:34:47 -08:00
Jason Ekstrand
310382fb2f gl-renderer: Remove the renderer-global border support
This was only ever used by the wayland backend and is no longer used there.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-07 16:34:13 -08:00
Jason Ekstrand
7744f71550 compositor-wayland: Add an actual frame around the compositor window
This adds a window frame with a close button.  Similar to the X11 backend,
The window supports dragging but not resizing.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-07 16:34:10 -08:00
Jason Ekstrand
0b61bf444b gl-renderer: Add support for per-output multi-texture borders.
The first advantage of this new API is that it is per-output instead of
global to the gl_renderer instance.  This means that different windows can
have different titles, different button states, etc.  The new api also uses
four textures (one for each side) instead of one.  This allows you to draw
real borders with text and buttons in them instead of a simple image that
gets streached.

Images will be scaled as needed, so the right and left can be one pixel
tall if desired.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-07 16:34:08 -08:00
Jason Ekstrand
8f89fcb22b compositor-wayland: Rename structure members and make things more consistant
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-11-07 16:34:04 -08:00
Kristian Høgsberg
1d75c7d3a2 xwm: Set input region for fullscreen surfaces correctly
The logic here broke at some point so that we would only update the
input region for non-fullscreen windows.  Thus, a fullscreen window would
be stuck with whatever size the most recent non-fullscreen size was.

https://bugs.freedesktop.org/show_bug.cgi?id=69219
2013-10-30 23:46:08 -07:00
Jason Ekstrand
286ff6817b compositor-wayland: Flush the display on commit
This fixes the problem where animations will wait to play until input is
received.  In general, it also makes the backend far more responsive.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>

https://bugs.freedesktop.org/show_bug.cgi?id=68221
2013-10-30 23:31:46 -07:00
Kristian Høgsberg
453de7a7e5 compositor-wayland: Handle HUP or ERR from event loop
Otherwise we end up in a busy loop instead of exiting nicely.
2013-10-30 23:15:44 -07:00
Kristian Høgsberg
a28ba55b56 launcher: Make sure we drop drm master before we allow VT switches
On shutdown, we can risk having a pending vt switch that we normally
handle in the vt signal handler.  However as we put the vt back in VT_AUTO
mode, the pending VT switch will go through and if we haven't dropped
drm master at that point, we could switch to another display server
without dropping drm master.  That will typically crash the other server,
so let's try to make sure we don't do that.

https://bugs.freedesktop.org/show_bug.cgi?id=70877
2013-10-30 16:27:16 -07:00
Kristian Høgsberg
aa2ee8bdf6 shell: Create view for lock surface
Nothing created the view for the lock surface and weston would crash
when trying to display it.

https://bugs.freedesktop.org/show_bug.cgi?id=70873
2013-10-30 15:49:45 -07:00
Kristian Høgsberg
529a81a898 logind: Return proper error value when tty or seat doesn't match
If the seat or tty doesn't match we return with r == 0, which looks like
success to weston_launcher_connect(), which then fails to fall back
to the legacy path.

https://bugs.freedesktop.org/show_bug.cgi?id=70876
2013-10-30 13:53:01 -07:00
Kristian Høgsberg
90dfb11428 animation.c: Schedule a repaint when the animation is done
Otherwise we don't repaint with the final state of the surface and
we're stuck with the second-to-last frame of the animation until
something else (moving the mouse or such) triggers a redraw.

https://bugs.freedesktop.org/show_bug.cgi?id=70930
2013-10-30 09:07:04 -07:00
Kristian Høgsberg
912e0a117a Fall back to ANIMATION_NONE if startup-animation is zoom
get_animation_type() parses "none", "zoom" and "fade" but for the
startup animation, we only support "none" and "fade".  If we get "zoom"
just fall back to "none" like we do for all unrecognized strings.

https://bugs.freedesktop.org/show_bug.cgi?id=71006
2013-10-30 08:59:55 -07:00
Kristian Høgsberg
b27901c5a7 input.c: Rename default grab functions to be consistent
Jonas recent patches made the inconsistency obvious, this patch fixes it.
2013-10-28 15:32:02 -07:00
Jonas Ådahl
1ea343e1be Add cancel function to grab interfaces
A grab can potentially allocate memory and would normally end the grab
itself, freeing the allocated memory in the process. However at in some
situations the compositor may want to abort a grab. The grab owner still
needs to free some memory and abort the grab properly. To do this a new
function 'cancel' is introduced in all the grab interfaces instructing
the grabs owner to abort the grab.

This patch also hooks up grab cancelling to seat device releasing and
when the compositor looses focus, which would potentially leak memory
before.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-10-28 14:44:06 -07:00
Jonas Ådahl
1c6e63e880 shell: Don't leak weston_touch_move_grab structs
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-10-28 14:39:18 -07:00
Jonas Ådahl
b18018867b input: Remove unused variable
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-10-28 14:38:38 -07:00
Jonas Ådahl
f88571fdef compositor-x11: Hide update_xkb_keymap behind #ifdef HAVE_XCB_XKB
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-10-28 14:38:27 -07:00
Tomeu Vizoso
96dc9e4f1f rpi: Remove create_view and destroy_view implementations
And also remove the vfunc definitions from the compositor as they
are unused now.
2013-10-28 14:36:26 -07:00
Kristian Høgsberg
0eee0a28ba weston-launch: Revoke and close input fds when we vt switch away
We used to leak the input fds, as weston would reopen all fds on vt
enter.  We could just close them after sending the open fd through the
socket, but this patch also adds support for the new EVIOCREVOKE evdev
ioctl, that revokes the fd in question (including the copy that we
sent to the compositor).

https://bugs.freedesktop.org/show_bug.cgi?id=70849
2013-10-25 13:34:58 -07:00
Ander Conselvan de Oliveira
adda00e72f pixman-renderer, gl-renderer: Destroy surface state with the renderer
Previously the renderers destroy function assumed they are only called
when the compositor is shutting down and that the compositor had
already destroyed all the surfaces. However, if a runtime renderer
switch would be done, the surface state would be leaked.

This patch adds a destroy_signal to the pixman and gl renderers. The
surface state objects will listen for that signal and destroy
themselves if needed.

This is a step towards runtime switchable renderers.
2013-10-25 12:21:51 -07:00
Ander Conselvan de Oliveira
aa398ae1f3 compositor: Let renderers create and destroy surface state on their own
Remove create_surface() and destroy_surface() from the renderer
interface and change the renderers to create surface state on demand
and destroy it using the weston_surface's destroy signal.

Also make sure the surfaces' renderer state is reset to NULL on
destruction.

This is a step towards runtime switchable renderers.

(rpi-renderer changes are only compile-tested)
2013-10-25 12:21:51 -07:00
Ander Conselvan de Oliveira
6b16214fb9 pixman-renderer, gl-renderer: Destroy debug bindings on clean up
Also make sure backends destroy the renderers before shutting down the
compositor to avoid a double call to weston_binding_destroy().

This is a step towards making renderers switchable during runtime.
2013-10-25 12:17:51 -07:00
Ander Conselvan de Oliveira
c68b1085ed pixman-renderer: Initialize pixman-renderer struct with zeros
Othrewise a crash may happen because of an unitialized value of the
create_view field.
2013-10-25 11:09:10 -07:00
Tomeu Vizoso
7498758525 rpi: Protect in-use DispmanX resources from premature deletion
The compositor will check if the client destroyed the wl_buffer
while it was in use in a display update, and delete the resource
itself once the update has finished.
2013-10-25 11:05:45 -07:00
Tomeu Vizoso
34dad7d69b rpi: Remove dangling reference to weston_view
This also marks the rpir_view for destroy in rpi_renderer_finish_frame()
2013-10-25 11:05:03 -07:00
Tomeu Vizoso
e3df6f1bbc rpi: Only check for prematurely destroyed wl_buffers in the EGL case 2013-10-25 11:03:57 -07:00
Tomeu Vizoso
4424774782 rpi: EGL surfaces need to be swapped always that we have an incoming back buffer 2013-10-25 11:03:47 -07:00
Tomeu Vizoso
15767813c2 rpi: Fix logging of buffer swaps for the EGL case 2013-10-25 11:03:25 -07:00
Tomeu Vizoso
5c3ea3b71a rpi: Initialize surface's list of views 2013-10-25 11:03:18 -07:00
Tomeu Vizoso
1d7ad62768 rpi: Link with EGL if ENABLE_EGL 2013-10-25 11:03:06 -07:00
Kristian Høgsberg
c85f1d4595 shell.c: Prevent moving a window from more than one source
It was possible to start a move or resize with a pointer and then
start another move for the same surface with touch or a pointer from
another seat, which would make the window flicker around.  With this
commit, we now reject any attempts to move or resize a surface that is
currently grabbed.
2013-10-24 16:52:00 -07:00
Kristian Høgsberg
0d94f41b44 shell.c: Don't overwrite focus surface argument in activate_binding()
We need either the pointer or touch focus, which is passed in to
activate_binding().  Don't overwrite this with the pointer focus.
2013-10-24 16:29:51 -07:00
Kristian Høgsberg
7ab139ce16 shell: Don't cast weston_view to surface when we just need view->surface
Most of the shell.c bindings take effect on the current pointer or
touch focus.  That's now a view, but we need a surface in these cases.
Just get the surface from view->surface instead of trying to cast a
view to a surface.
2013-10-24 16:21:39 -07:00
Kristian Høgsberg
aa2700dcc8 compositor: Remove two unused variables 2013-10-24 15:54:49 -07:00
Kristian Høgsberg
48588f8696 shell: Create a view for the grab_surface
Without the view, we can't set pointer and touch focus to the grab_surface
and touch moving fails.
2013-10-24 15:51:35 -07:00
Kristian Høgsberg
c3244d7abc input: Properly handle setting touch focus to NULL
This happens on TOUCH_UP, and we unconditionally dereference view->surface.
2013-10-24 14:21:53 -07:00
Kristian Høgsberg
b5a4f986d4 compositor-x11: Use the fullscreen size provided by the configure event
Make sure we initialize the x11 shm state using the right window size.

https://bugs.freedesktop.org/show_bug.cgi?id=70590
2013-10-23 23:38:50 -07:00
Kristian Høgsberg
a3a0e1867e shell: Add the right output object to the shell output_list
Error on my part while renaming the shell_output variable.
2013-10-23 23:36:04 -07:00
Xiong Zhang
6b48142f8a shell: register output->destroy_signal handler
setup_output_destroy_handler() deal with output created at
drm backend initialize time.
handle_output_create() deal with output created by hot plug handler
output_destroy_handler is removed when output was unplugged or
shell is destroyed.

Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.com>
2013-10-23 23:17:15 -07:00
Xiong Zhang
971165368d compositor: set surface->plane from destroyed plane to NULL
In drm backend, the cursor_surface->plane point to
drm_output->cursor_plane.when this output is removed,
drm_output->cursor_plane is destroyed, butcursor_surface->plane
still point to destroyed plane. So once mouse move to this
cursor_surface and system will repaint this cursor_surface,
segment fault will generate in weston_surface_damage_below() function.

V2:
-set surface->plane to NULL whose plane point to unplugged output,
 then change weston_surface_damage_below() to do nothing if
 surface->plane is NULL (Kristian)
-set surface->plane to NULL in weston_surface_unmap(),
 so that all surfaces that have a non-NULL plane pointer wil be
 on compositor->surface_list (Kristian).

bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=69777

Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.com>
2013-10-23 22:23:28 -07:00
Rui Matos
0c194ced57 compositor-wayland: Handle keymap changes 2013-10-22 15:25:01 -07:00
Rui Matos
c6c2f8e655 compositor-x11: Update keymap when XKB keymap changes 2013-10-22 15:24:58 -07:00
Rui Matos
65196bc0b9 input: Add core API to update the keymap
How and when to update the keymap is left to each backend.

The new keymap only becomes effective when no keys are pressed and we
keep latched and locked modifiers from the previous state.
2013-10-22 15:24:55 -07:00
Jason Ekstrand
a7af70436b Split the geometry information from weston_surface out into weston_view
The weston_surface structure is split into two structures:

 * The weston_surface structure storres everything required for a
   client-side or server-side surface.  This includes buffers; callbacks;
   backend private data; input, damage, and opaque regions; and a few other
   bookkeeping bits.

 * The weston_view structure represents an entity in the scenegraph and
   storres all of the geometry information.  This includes clip region,
   alpha, position, and the transformation list as well as all of the
   temporary information derived from the geometry state.  Because a view,
   and not a surface, is a scenegraph element, the view is what is placed
   in layers and planes.

There are a few things worth noting about the surface/view split:

 1. This is *not* a modification to the protocol.  It is, instead, a
    modification to Weston's internal scenegraph to allow a single surface
    to exist in multiple places at a time.  Clients are completely unaware
    of how many views to a particular surface exist.

 2. A view is considered a direct child of a surface and is destroyed when
    the surface is destroyed.  Because of this, the view.surface pointer is
    always valid and non-null.

 3. The compositor's surface_list is replaced with a view_list.  Due to
    subsurfaces, building the view list is a little more complicated than
    it used to be and involves building a tree of views on the fly whenever
    subsurfaces are used.  However, this means that backends can remain
    completely subsurface-agnostic.

 4. Surfaces and views both keep track of which outputs they are on.

 5. The weston_surface structure now has width and height fields.  These
    are populated when a new buffer is attached before surface.configure
    is called.  This is because there are many surface-based operations
    that really require the width and height and digging through the views
    didn't work well.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-10-22 13:34:11 -07:00
Kristian Høgsberg
d4c1cd77c3 logind: Remove missing 'else'
Only fall through to cleaning up weston-launch or standalone state
if we didn't use logind.
2013-10-22 13:19:23 -07:00
Kristian Høgsberg
10ddd97ecf compositor: Remove redundant and not well-defined focus field
It was never clear what this field really did.
2013-10-22 12:40:54 -07:00
Kristian Høgsberg
2e611264a3 compositor-drm: Don't call drop/set master anymore
This is done by either laucnher-util.c directly, weston-launch or
logind, depending on how we're launched.
2013-10-22 12:27:46 -07:00
David Herrmann
1edf44ce26 compositor: finish frame if redraw fails
If we are about to finish a frame, but a redraw is pending and we let the
compositor redraw, we need to check for errors. If the redraw fails and
the backend cannot schedule a page-flip, we need to finish the frame,
anyway.

All backends except DRM use a timer to schedule frames. Hence, they cannot
fail. But for DRM, we need to be able to handle drmModePageFlip() failures
in case access got revoked.

This fixes a bug where logind+drm caused keyboard input to be missed as we
didn't reenable it after a failed page-flip during deactivation.
2013-10-22 12:24:56 -07:00
David Herrmann
3c688c5e33 compositor-drm: finish frame if initial page-flip fails
If the initial page-flip fails, immediately finish the frame to avoid
being stuck in the given frame. We already do this if we have no fbo
available. Now we do the same if the page-flip fails.
2013-10-22 12:24:53 -07:00
David Herrmann
cc5b2ed2b8 launcher: add logind backend
Instead of connecting to weston-launch from launcher-util, we now try to
connect to logind first. If logind provides session-devices, we use them.
If not, we fall back to the old weston-launch facility.
2013-10-21 16:23:58 -07:00
David Herrmann
e461f85385 launcher: add weston_launcher_close() dummy
If you request a device via weston_launcher_open(), you should now release
it via weston_launcher_close() instead of close(). This is currently not
needed but will be required for logind devices.
2013-10-21 16:07:45 -07:00
David Herrmann
814d49f0b4 dbus: add dbus-match helpers
These helpers simplify adding dbus-matches by allowing var-arg arguments
to assemble the matching rules.
2013-10-21 16:07:10 -07:00
David Herrmann
59ab90049f Add optional dbus helpers
This adds optional libdbus integration for weston. If libdbus is available
and not disabled via --disable-dbus during weston build, we now provide
basic DBusConnection main-loop integration for weston.

The dbus.c file provides a new helper to integrate any DBusConnection
object into a wl_event_loop object. This avoids any glib/qt/..
dependencies but instead only uses the low-level libdbus library.

Note that we do not provide dummy fallbacks for dbus helpers in case
dbus-support is disabled. The reason for that is that you need dbus/dbus.h
for nearly any operation you want to do via dbus. Therefore, only the most
basic helpers which can be used independently provide a "static inline"
dummy fallback to avoid #ifdef all over the code.
2013-10-21 16:06:22 -07:00
Kristian Høgsberg
fb08e4bdaa weston-launch: Use /bin/sh for launching weston
https://bugs.freedesktop.org/show_bug.cgi?id=68739
2013-10-21 15:14:44 -07:00
Jonas Ådahl
3042ffe011 udev-seat: Repick seat after a new device was added
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-10-21 13:47:05 -07:00
Jonas Ådahl
a493274442 input: Unmap pointer sprite when no more pointer devices are connected
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-10-21 13:46:44 -07:00
Jonas Ådahl
630bae8672 input: Unset focus of seat device when releasing last reference
When the last input device with a certain capability is removed, unset
the focus of the seat device associated with the capability.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-10-21 13:46:33 -07:00
Jonas Ådahl
d6e1c34405 evdev: Reference count input device's seat capabilities
When the only input device of a certain seat capability is unplugged,
stop advertising the capability.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2013-10-21 13:45:03 -07:00
Kristian Høgsberg
8e6f376ef0 compositor-drm: Support configuring the framebuffer format from weston.ini
This patch adds a new weston.ini key, gbm-format, to the [core] section.
This new key can be rgb565, xrgb8888 or xrgb2101010, and makes the
compositor use the corresponding GBM format for the framebuffer.
2013-10-16 16:31:42 -07:00
Kristian Høgsberg
d8e9833017 compositor-drm: Use a param struct for initialization like other backends 2013-10-16 16:15:11 -07:00
Kristian Høgsberg
3f97b345dd compositor-drm: Make drm_output_check_scanout_format() work for all formats
This used to work only for ARGB8888 and XRGB8888 buffers, but this lets
us support pageflipping to any client buffer as long as it matches the
framebuffer format.
2013-10-16 16:09:23 -07:00
Kristian Høgsberg
724c8d9e7c shell: Add a new weston.ini to control the startup animation
The new key startup-animation in the [shell] section lets you
control the startup animation.  Default is fade, but with this patch
we can also do none, which just show the desktop as fast as possible.
2013-10-16 11:38:24 -07:00
Kristian Høgsberg
991810c1b3 compositor: Stop the repaint loop if the compositor went to sleep
We check the state when we schedule a repaint, but we will still repaint
in weston_output_finish_frame() if a repaint is needed.  Now we check
whether we went to sleep while waiting for the page flip and stop repainting
in that case.

https://bugs.freedesktop.org/show_bug.cgi?id=65802
2013-10-16 11:10:12 -07:00
David Herrmann
1641d14b82 fbdev: open launcher only once
We currently call launcher_connect() twice, which is redundant and
amazingly works (ugh?). Fix this and connect only once to the launcher.
2013-10-15 09:12:55 -07:00
David Herrmann
e05a0cd92c evdev: release devices on read() error
If read() fails without EAGAIN/EINTR, the device is very likely dead.
However, we must not remove the device as it might be muted/revoked. So we
simply remove the event-source to avoid polling the device and simply wait
for the udev-remove signal now.

Note that we cannot call evdev_device_destroy() as the caller created the
FD and might need custom code to close it (like weston_launcher_close()).
2013-10-15 09:12:30 -07:00
Kristian Høgsberg
c133fc4836 evdev: Clear touch capability if we see a mouse-type button
If an input device has BTN_LEFT (typically) it's not a touch screen but
a touch pad.
2013-10-14 15:46:13 -07:00
Kristian Høgsberg
9df41e153c evdev: Only init a pointer if the evdev device has a button
We used to test for abs | rel | button,  which inits a pointer device for
a device with just rel or abs capabilities.  We now make sure we have either
rel or abs as well as button.
2013-10-14 15:32:08 -07:00
Kristian Høgsberg
7073f6ffa1 evdev: Stop looking for pointer buttons when we get to BTN_JOYSTICK
We don't want to mark a touchscreen as a button device just because it
exposes the BTN_TOUCH and BTN_TOOL buttons.
2013-10-14 15:28:01 -07:00
Ander Conselvan de Oliveira
97f2952bca gl-renderer: Build as a loadable module
The time spent loading EGL and GLES libraries from disk can be a
considerable hit in some embedded use cases. If Weston is compiled
with EGL support, the binary will depend on those libraries, even if
a software renderer is in use.

This patch splits the GL renderer into a separate loadable module,
and moves the dependency on EGL and GLES to it. The backends still
need the EGL headers for the native types and EGLint. The function
load_module() is renamed to weston_load_module() and exported, so
that it can be used by the backends.

The gl renderer interface is changed so that there is only one symbol
that needs to be dlsym()'d. This symbol contains pointers to all the
functions and data necessary to interact with the renderer. As a side
effect, this change simplifies gl-renderer.h a great deal.
2013-10-14 15:02:20 -07:00
Kristian Høgsberg
891a16ddee launcher: Drop unecessary checks for drm_fd == -1
We never get into this case, and if we do, we just want to pass the invalid
fd through to the underlying ioctl and get the error that way."
2013-10-14 14:00:03 -07:00
Kristian Høgsberg
876c75f1fa launcher: Fix reverted sense of drm_check_master() wrapper
Also rename to drm_is_master() to make it clearer what we're checking.

https://bugs.freedesktop.org/show_bug.cgi?id=70459
2013-10-14 13:57:44 -07:00
Neil Roberts
e14aa4f0a9 Don't remove the touch grab until the last touch point is removed
Previously if you move a window around and temporarily add a second
finger then it will cancel the grab even though the original finger is
still held on the screen. It seems more robust to avoid cancelling the
grab until all fingers have been removed.
2013-10-14 13:53:16 -07:00
Neil Roberts
306fe0838b Only update the touch grab position for the first finger
Previously if you add a second finger while moving a window with a
touch grab then the position will keep jumping between the position of
each finger as you move them around. This patch changes it so that it
keeps track of the first touch id that starts the grab and only
updates the grab position when that finger moves.
2013-10-14 13:53:14 -07:00
Neil Roberts
aba0f25cb0 Add a touch move binding
When holding the compositor super key the touch events can now be used
to move a window.
2013-10-14 13:53:08 -07:00
Neil Roberts
a28c69358c Add a touch binding to activate a surface
Adds a new binding type for touch events via the new function
weston_compositor_add_touch_binding. The binding can only be added for
a touch down with the first finger. The shell now uses this to install
a binding to activate the current surface.
2013-10-14 13:53:08 -07:00
Kristian Høgsberg
2cd6da1400 xwm: Fall back to xcb_kill_client() if window does support WM_DELETE_WINDOW 2013-10-14 12:27:55 -07:00
Jason Ekstrand
d14c4ca603 xwayland: Use decoration frame from cairo-util
In particular, this gives us a close button on xwayland windows.

Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2013-10-14 12:27:55 -07:00
Kristian Høgsberg
bcfd07b70a xwm: Redirect root window subwindows
xwayland no longer does this for us, we have to request it now
2013-10-11 16:48:19 -07:00
Kristian Høgsberg
9acd374822 fbdev: Fix compilation without EGL
We have to duplicate #defines and typedefs for the EGL types and constants
we use in gl-renderer.h so we can compile the fbdev backend without EGL.

https://bugs.freedesktop.org/show_bug.cgi?id=70392
2013-10-11 15:26:35 -07:00
Alexandru DAMIAN
be0ac5b147 compositor-drm: fix EGL format type
EGLInt is not always uint32_t so we need
to make sure we use the right int size for the format.

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
2013-10-11 13:35:16 -07:00
Stefan Schmidt
08921b85ce xwayland: Remove unused call weston_wm_handle_configure_notify.
We get the child position but never use this information here. Just remove it.
Spotted by Christopher Michael.

Signed-off-by: Stefan Schmidt <s.schmidt@samsung.com>
2013-10-11 13:30:15 -07:00
Xiong Zhang
abd5d47b3b compositor-drm: Avoid output_destroy happened before page_flip event
Currently there is no guarentee that output remove event always happend after
page_flip event on the same output. So if the following situation occur:

  first: unplug a output
  second: output remove event arrive, output_destrory called adn free output
  third: page_flip event arrive on the destroyed output

the segment fault will happpen in page_flip_handler().

This patch add a variable drm_compositor->destroy_pending, if page flip
event is pending when output remove event arrive, output_destroy will be
delayed until page flip finished.

Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.com>
2013-10-11 12:29:22 -07:00
Tomeu Vizoso
0b12db5f51 launcher: Wrap drmGetMagic and drmAuthMagic so we can build without libdrm 2013-10-10 16:51:37 -07:00
Tomeu Vizoso
a8e5f29ff9 rpi: Remove redundant cast 2013-10-10 16:51:33 -07:00
Kristian Høgsberg
a2e20c369b vaapi-recorder: Don't leak fd on thread error path
If we successfully open the file but fail to create the thread we
leak the fd.
2013-10-10 16:50:18 -07:00
Kristian Høgsberg
74b0d72817 launcher: Remove left-over debug logging 2013-10-10 16:50:18 -07:00
Kristian Høgsberg
af393dcc69 weston-launch: Only store drm fd if we successfully opened and stat'ed it 2013-10-10 16:50:18 -07:00
Kristian Høgsberg
4a74d5a4a4 launcher: Don't leak tty file descriptor on error 2013-10-10 16:50:18 -07:00
Kristian Høgsberg
325390e529 launcher: Don't leak tty file descriptor on launcher destroy 2013-10-10 16:50:18 -07:00
Kristian Høgsberg
8ac6a2da07 compositor-fbdev: Fix a fd leak in the fbdev backend
fbdev_frame_buffer_map() closes the fb fd, so we have to close it
manually in case we're using the hybris renderer (ie !pixman).
2013-10-10 16:50:18 -07:00
Kristian Høgsberg
cb406f1afd input: Don't send modifiers if client doesn't have a pointer resource
This fixes an uninitialized serial error, were we could send out the
modifier event even if the client didn't have a pointer resource.  We
send out the modifier event to let clients know the modifer mask when
they receive a pointer button event.  Thus, if the client doesn't have
a pointer we don't need to send the modifier event.

Additionally we would send out the modifier event with an
uninitialized serial number.

Finally, this commit restores the order of sending the modifier event
before the enter, like it used to be.  Not likely to be an issue,
since the client will always receive the modifier event before any
button event, but it's a little nicer to give the client the modifier
events before it receives any pointer events.
2013-10-09 15:01:18 -07:00
Tomeu Vizoso
b4659eb159 rpi: Add support for EGL buffers
The EGL implementation on the RPi allocates a front and a back
DispmanX resources for each EGLSurface, which we composite along
the others.
2013-10-08 11:19:25 -07:00
Kristian Høgsberg
e05f228a5f launcher: Print a more descriptive error message when we don't get a VT
weston-launch has two supported use cases now: either launch from
and VT login as a regular user (running within that session) or
from an init script (systemd or such) with the -u option to create
a session for the specified user.  Running from within X or ssh is
not possible.  It's still possible to run weston as root from X or ssh
but that's strictly a development/debug/test feature.

https://bugs.freedesktop.org/show_bug.cgi?id=69727
2013-10-02 13:06:02 -07:00
Kristian Høgsberg
6ff3ff57aa launcher: Add back support for specifying VT to run on
This is only available when running weston directly as root typically for
ssh logins.  It's a somewhat destructive option, as it will take over any
existing VT completely, unless there's already an display server running
there.

https://bugs.freedesktop.org/show_bug.cgi?id=69731
2013-10-02 11:47:28 -07:00
Kristian Høgsberg
1468e60647 launcher: Bail out if we can't be drm master
If we can't be drm master, we won't be able to do anything useful with
the drm device.
2013-10-02 10:49:05 -07:00
Kristian Høgsberg
57a10e4d13 launcher: Set make sure we're drm master when opening the drm device
In case we try to run on a tty where some other process is already
drm master, back off and exit with an error message.
2013-10-01 15:37:09 -07:00
Kristian Høgsberg
19ec77aef7 launcher: Fail weston_launcher_create() if tty setup fails 2013-10-01 12:54:55 -07:00
Neil Roberts
8b62e2043a Set new state before emitting wake signal in weston_compsitor_wake
The wake handler set up by the shell will try to unlock the screen
which works by setting up an animation which fades in the display. The
animation is started by first scheduling a repaint. Subsequent
repaints are scheduled whenever the previous frame is finished.
However in the case of the wake up signal the state is still
WESTON_COMPOSITOR_SLEEPING when the animation is started.
weston_output_schedule_repaint() ignores attempts to schedule a
repaint if the compositor is sleeping which means the animation never
gets run and will never complete.

The animation gets unstuck and continues if anything else schedules a
repaint after the state has been changed so the bug only gets hit in
certain conditions. The first wake up creates the lock surface which
causes a redraw when the first buffer is attached so the first wake up
is always ok. A redraw can be triggered in the subsequent wake ups
just by moving the mouse.

A good way to trigger the bug is to try to wake up the compositor by
pressing the shift key. If you let the compositor go back to sleep
after waking it up without unlocking it, the second press of the shift
key will not cause a redraw so the animation will not run and it won't
fade in.

https://bugs.freedesktop.org/show_bug.cgi?id=69719
2013-10-01 10:56:34 -07:00
Tomeu Vizoso
1b45e5edd1 weston-egl: Update weston-egl-ext.h: s/wl_buffer/wl_resource
As struct wl_buffer has been deprecated since 1.2.
2013-10-01 10:42:55 -07:00
Tomeu Vizoso
d7865b2f75 weston-launch: Only drop privileges if running as root 2013-10-01 10:41:59 -07:00
Aaron Faanes
9cefc647cc compositor: fix typo in error message 2013-10-01 10:32:02 -07:00
Adrian Negreanu
908e6d0b8f launcher-util: pull in drm only for compositor-drm
Add drm_set_master and drm_drop_master
as wrappers for drm(Set|Drop)Master, when building compositor-drm
or as empty functions otherwise.

Signed-off-by: Adrian Negreanu <adrian.m.negreanu@intel.com>
2013-09-30 15:38:15 -07:00
Alexandru DAMIAN
5f42930a41 config: Don't crash if we don't have a config file
Adding a check in weston_config_full_path so that
we don't crash if we started without a config file.

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
2013-09-26 16:24:33 -07:00
Alexandru DAMIAN
840a421a5e compositor: check if seteuid worked
Checking the return value from seteuid in
order to not launch clients with the wrong effective uid.

Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
2013-09-26 16:18:11 -07:00
Kristian Høgsberg
c3ea26c02d compositor-drm: Match the EGLConfig native visual ID if it has one
We'll add the GBM format code as the native visual ID for EGLConfigs
when running on GBM.  This patch lets the drm backend pass in the
format code it's using with KMS and make sure we get a confing that
matches.  In the future, mesa will add support for 10 bpc configs
which will match the "at least 8 color bits" requirement.  By also
matching the native visual ID, we avoid rendering XRGB2101010 into a
XRGB8888 KMS framebuffer.
2013-09-26 14:38:14 -07:00
Neil Roberts
be336c8918 evdev: Process touch up events of single-touch devices
Previously only the touch up key event was used for single-touch
devices and the touch down event was generated on the first motion
event. This was breaking if the touch up and down events were sent
without a motion in-between because the evdev driver wouldn't generate
a touch down event and Weston would lose track of the number of touch
points that are down. This patch changes it to track the up and down
key events as pending events similar to how it does for multi-touch
devices.

https://bugs.freedesktop.org/show_bug.cgi?id=69759
2013-09-24 16:22:43 -07:00
Neil Roberts
daf7d4774b evdev: Only track one pending event
Instead of having a mask of pending events there is now an enum with a
single value to represent the one pending event. The event gets
flushed explicitly as part of the handling code for each event type
rather than in the outer event reading loop. The pending event is used
so that we can combine multiple motion events into one and to make
sure that we have recieved the latest position before sending a touch
up or down event. This should fix the following problems with the old
approach:

• If you release a finger and press it down again quickly you could
  get the up and down events in the same batch. However the pending
  events were always processed in the order down then up so it would
  end up notifying two down events and then an up. The pending event
  is now always flushed when there is a new up or down event so they
  will always be in the right order.

• When it got a slot event it would immediately change the slot number
  and then set the pending event. Then when it flushed the events it
  would use the new slot number to flush the old pending event so the
  events could have the wrong finger. The pending event is now
  immediately flushed when a slot event is received so it will have
  the right finger.

• If you get more than 32 events in one read then it was resetting the
  pending events before processing the next batch in
  evdev_process_events. If four fingers were pressed down at once then
  it ended up with more than 32 events and the sync message would be
  in the second batch. The pending flag for the last finger was
  getting cleared so it never got emitted. In this patch the pending
  event is no longer reset after reading nor is it explicitly flushed.
  Instead it is flushed when we receive a EV_SYN event or a different
  pending event needs to replace it.

The touchpad handling code was trying to use the pending event
mechanism to notify the relative motion events. I'm not sure why it
was doing this because it looks the event would effectively get
emitted as soon as the touchpad_process function is finished anyway
and it wasn't accumulating the values. Instead I've just changed it to
emit the event directly.

https://bugs.freedesktop.org/show_bug.cgi?id=67563
2013-09-24 16:22:19 -07:00
Pier Luigi Fiorini
d0a7282876 version.h: Add version check macro
Make it easier to check for a Weston version.
2013-09-23 10:42:19 -07:00
Giulio Camuffo
0481054c58 input: check that the new focus surface has a valid resource
Here too we must make sure the surface has a valid resource, as
there are some (xwayland, surfaces created by the shell) that
don't have it.
Fix a Weston crash when setting a mpv window fullscreen on drm.
2013-09-23 10:09:37 -07:00
Kristian Høgsberg
03cc35405e Add vaapi-recorder.h to SOURCES to fix distcheck 2013-09-22 14:28:38 -07:00
Neil Roberts
f65c486090 evdev: Flush motion events when the slot changes, not just after sync
If two fingers are released almost simultaneously then evdev can send
the touch up events in one bunch without sending a sync event
in-between. However, the evdev_device struct only keeps track of one
pending touch up event so in this case the second touch up event would
override the first and it would be lost. This patch changes it to also
flush the events whenever the slot changes so that it will flush the
previous touch up event before trying to queue the next one.

https://bugs.freedesktop.org/show_bug.cgi?id=67563
2013-09-22 13:58:33 -07:00
Giulio Camuffo
4df790e505 compositor: when unmapping a surface remove it from the compositor's list
compositor.surface_list is recreated every redraw with the mapped
surfaces, but if a surface gets unmapped and then in the same frame
weston_compositor_pick_surface() is called we must make sure it
does not pick the unmapped surface, since it traverses the
surface_list to find one.
If after the unmap the surface gets also deleted it's even more
important, as it must not pick a destroyed surface.
2013-09-22 13:39:45 -07:00
Kristian Høgsberg
eeefc9e311 compositor: Log the full path of the config file we're using 2013-09-21 23:17:35 -07:00
Kristian Høgsberg
1abe0486bb config-parser: Make weston_config_parse() tkae a file name
Take a basename of the config file to parse instead of an fd.
2013-09-21 23:05:45 -07:00
Kristian Høgsberg
b12e35617c compositor: Unlink unmapped surface instead of rebuilding surface list
When unmap and destroy a surface we need to make sure we don't pick it
before we rebuild the new surface list.  Currently we ensure this
by rebuilding the surface list when destroying a surface, but just
removing the surface should be enough.
2013-09-21 21:26:05 -07:00
Giulio Camuffo
1cf329bff1 xwm: remove the destroy listener from the old surface signal 2013-09-21 20:58:53 -07:00
Neil Roberts
96d790e74b input: Emit events on all resources for a client
The Wayland protocol permits a client to request the pointer, keyboard
and touch multiple times from the seat global. This is very useful in a
component like Clutter-GTK where we are combining two libraries that use
Wayland together.

This change migrates the weston input handling code to emit the
events for all the resources for the client by using the newly added
wl_resource_for_each macro to iterate over the resources that are
associated with the focused surface's client.

We maintain a list of focused resources on the pointer and keyboard
which is updated when the focus changes. However since we can have
resources created after the focus has already been set we must add the
resources to the right list and also update any state.

Additionally when setting the pointer focus it will now send the
keyboard modifiers regardless of whether the focused client has a
pointer resource. This is important because otherwise if the client
gets the pointer later than you getting the keyboard then the
modifiers might not be up-to-date.

Co-author: Neil Roberts <neil@linux.intel.com>
2013-09-21 20:56:55 -07:00
Hardening
57388e44e5 Notify clients on mode_switch()
This patch implements the notification of clients during mode_switch.
As discussed on IRC, clients are notified of mode_switch only when the
"native" mode is changed and activated. That means that if the native
mode is changed and the compositor had activated a temporary mode for
a fullscreen surface, the clients will be notified only when the native
mode is restored.
The scaling factor is treated the same way as modes.
2013-09-21 11:40:21 -07:00
Hardening
ff39efa5c0 Rename current, origin, scale, origin_scale
This patch renames that fields to have consistent names.
2013-09-21 11:40:17 -07:00
Giulio Camuffo
a2df51c19f xwm: set the right cursor when hovering on the decoration borders
use the alternative cursor names used also in window.c, since the
names it used previously are not guaranteed to exist in all themes.
2013-09-21 11:35:37 -07:00
Giulio Camuffo
85739eab12 xwm: set the window's shsurf pointer to NULL on unmap handling
the unmap event will be followed by the deletion of the weston_surface,
so the shell_surface will also be deleted by the shell. Having removed
the surface_destroy_listener, the surface_destroy callback doesn't
get called, so reset the value of shsurf here.
2013-09-21 11:27:19 -07:00
Axel Davy
5e396ae9ae Restoring alpha after the shell effects.
After the fade or zoom effects, alpha could not have been 1.0, preventing
not redrawing behind opaque windows.

This patch add a reset function in weston_surface_animation to reset
some variables the effects affect.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
2013-09-21 11:26:46 -07:00
Stefan Schmidt
fda265268d input: Fix trailing whitspaces and indent.
Just some cosmetics to conform to the wayland coding style.

Signed-off-by: Stefan Schmidt <s.schmidt@samsung.com>
2013-09-21 11:18:45 -07:00
Kristian Høgsberg
3f4958755d launcher: Move rest of tty object into struct weston_launcher
The struct weston_launcher object will now either handle tty and vt switching
details in-process (when running weston directly as root) or talk to
the weston-launch process.
2013-09-18 23:00:17 -07:00
Kristian Høgsberg
6a7c8492cc weston-launch: Use fstat to make sure we stat the right fd
Instead of the racy stat+open, open first and then use fstat.  We want to
make sure we're stating the fd we'll be sending to weston and nothing else.
2013-09-18 22:14:09 -07:00
Kristian Høgsberg
81b4963949 launcher: Handle tty setup and teardown in launcher 2013-09-18 11:14:14 -07:00
Kristian Høgsberg
1eb482d814 launcher: Handle drm set/drop master and vt switch signals in launcher 2013-09-18 11:14:14 -07:00
Kristian Høgsberg
61741a293c compositor: Generalize VT switching as a session_signal
Instead of a callback from the tty module, we now have a compositor level
signal that fires when our session is activated or deactivated.
2013-09-18 11:14:14 -07:00
Kristian Høgsberg
05ad1e4e8a launcher: Collect launcher state in new struct weston_launcher
We're going to add a bit more launcher state, so start out by creating
a new struct weston_launcher we can track it in.
2013-09-18 11:14:14 -07:00
Kristian Høgsberg
bf3c374b1b weston-launch: Use SOCK_SEQPACKET for the launcher socket
This lets us detect hang-up when weston-launch dies and clean up properly.
2013-09-18 11:14:14 -07:00
Kristian Høgsberg
f45b1e8284 weston-launch: Pass the right CLOEXEC flag to fcntl
Passing O_CLOEXEC to fcntl is wrong, we need to pass FD_CLOEXEC.
2013-09-18 11:14:14 -07:00
Kristian Høgsberg
1ff5109b5f compositor: Open drm device through launcher 2013-09-17 14:05:47 -07:00
Sam Spilsbury
619859ce90 Split vertex clipping code out into vertex-clipping.c 2013-09-16 21:40:31 -07:00
Giulio Camuffo
62942ad3a6 xwm: set the shell_surface's title
add a new function pointer to the weston_shell_interface struct that
shells will set accordingly.
2013-09-11 13:50:54 -07:00
Giulio Camuffo
ca43f0942e xwm: place transient windows at the right position 2013-09-11 13:50:03 -07:00
Kristian Høgsberg
2e3c396ae3 shell: Use wl_resource_for_each() for sending out workspace status 2013-09-11 12:00:47 -07:00
Rob Bradford
6e737f590b input: Use new wl_resource_for_each for sending updated seat caps 2013-09-11 11:57:28 -07:00
Ander Conselvan de Oliveira
a62ef3e0b6 vaapi-recorder: Don't leak drm fd
Make vaapi_recorder take onwership of the fd and close it at destroy
time.
2013-09-11 11:55:32 -07:00
Ander Conselvan de Oliveira
b85ded0cb8 vaapi-recorder: Encode frames in a separate thread
Previously, vaapi_recorder_frame() would wait until the encoded
contents for a frame is written to the output file descriptor. This
delayed the repainting of the next frame, and affected frame rate
when capturing with high resolutions. Instead, wait only if there is
and attempted to encode two frames at the same time.

Increases framerate from 30 to 60 fps when capturing at 1920x1200 on
my SandryBridge system, although there are periodic slowdowns due to
disk writes.
2013-09-11 11:55:15 -07:00
Adrian Negreanu
4aa756dc7a add libhybris support
it uses the Android fbdev HAL[1] (through libhybris[2])
and the libhybris implementation of wayland-egl.

Configure flags:
 cairo:
   --enable-glesv2=yes  --enable-egl=yes
 weston:
   --with-cairo-glesv2 --enable-fbdev-compositor
 hybris:
   --enable-wayland --enable-arch=x86
   --with-android-headers=<android-headers> --enable-alinker=jb

The android headers are extracted from an AOSP tree,
using hybris/utils/extract-headers.sh

[1]:
https://github.com/android/platform_hardware_libhardware/blob/master/include/hardware/fb.h

[2]: https://github.com/libhybris/libhybris

Signed-off-by: Adrian Negreanu <adrian.m.negreanu@intel.com>
2013-09-11 11:54:11 -07:00
Andrew Wedgbury
a94dc8a51b compositor-x11: Copying xkb_info when creating a seat causes problems
Sorry, I missed updating use of xkb_info in compositor-x11.c.
I've updated the patch.
2013-09-11 11:20:35 -07:00
Marc Chalain
ffbddff89a fbdev: Support of TrueColor and Directcolor of video hardware
backend check the type of the framebuffer and accept DirectColor and TrueColor
I use a "switch case" to implement other cases in the future.
2013-09-11 11:20:26 -07:00
Stanislav Vorobiov
bfbb8e59fa gl_renderer: Use EGL_WAYLAND_Y_INVERTED_WL to query wl_buffer's orientation 2013-09-11 10:56:00 -07:00
Andrew Wedgbury
9a6f02a6b1 Copying xkb_info when creating a seat causes problems
Hi Kristian,

Here's a new patch for ref counting weston_xkb_info, as suggested.
So a seat created with a NULL keymap will now point to the global xkb_info.
2013-09-11 10:06:23 -07:00
Kristian Høgsberg
1702d4cfca input: Initialize data source to NULL
This way we do the right thing, when we get a NULL wl_resource for self-dnd.
2013-09-11 09:45:03 -07:00