The QWindowSystemInterface API changed, make it build again

Change-Id: Ic00a820ebac7727a8d71d62ce191fe29de52aac0
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Don't give bogus values for a screen physical size

If we don't have a valid physical size for a screen, i.e. (0x0),
return the default value from the base class.

Change-Id: Ia7b6f90ee73e07014ab752ceb165426812c49415
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Fix retrieving the selection/dnd data

Installing a roudtrip on the custom event queue in the wl_data_offer.offer
handler is broken because that triggers a wl_data_device.selection event,
which emits the QClipboard changed signal, so code listening to it may end
up trying to retrieve the clipboard data before the roundtrip ends.
Additionally, we're calling wl_data_offer.receive for each mime type, even
if then we never read from the fd, making the source client do work for no
reason. Instead, call wl_data_offer.receive retrieveData_sys, that is when
actually retreiving the data.

We don't need to install a roundtrip after that, just flushing out the
requests is enough, because we wait up to one second for the source client
to write into the fd.

Change-Id: I180779e375ebd5a22af7084458505a41107fab19
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Ignore negative screen physical size

Weston can send in some cases a negative physical size in the wl_output.geometry
event. While it is not clear whether that is legal go the extra mile and catch
it.

Change-Id: Ie2fbab84e653ad77732a72b6ca61509eb7849895
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Don't send the wrong physical size to clients

A 0x0 size means the compositor doesn't know what the real size is.

Change-Id: I79cac0482839399d4a53e9556bb999592af555a5
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Add or remove popup grabber when the surface is mapped

When the surface is mapped add or remove the popup grab
as expected.

Change-Id: I807753393ef2753bc96c698f766523186ee88fd2
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Rename QWaylandDecoration => QWaylandAbstractDecoration

This is in preparation for decoration plugins.

Change-Id: Idb322a7a5cbc2eb5bf2cce019073f9f4fb46297f
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
QtWaylandClient: Pluginize window decorations.

Convert to a D-pointer, split between abstract base class and an implementation.

Also move implementation of the current built-in decoration to the "bradient"
plugin, named in glorious memory of the programmer-designed blue gradient that
will forever sear our eyeballs.

The decoration plugin may be specified using the environment variable
QT_WAYLAND_DECORATION.

Change-Id: Idc99ab06ae138ad299bad2b62b9595379bd007ab
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
decorations: Remove strange set dance between QWaylandWindow & QWaylandAbstractDecoration.

This makes absolutely no sense. Just do things inline.

Change-Id: Ic6d4e62bc9b3c0a4533f63740f2608a0be201047
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Use the screen resolution to determine whether a screen is portrait

We were using the screen physical size to determine if a screen is
portrait or landscape, but we may not always get a valid size.
Instead use the screen resolution.
The orientation is then calculated in the wl_output.done handler,
since we don't know the resolution yet when receiving the first
wl_output.geometry event.

Change-Id: I3554f916e54db829f49fa3d1ea24f7ce1ff24e7c
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Send also repeat key release events

We were sending only key press events for the key autorepeat, going
out of sync with the release events. Xorg sends both relase and press
auto repeat events, do so here too.

Change-Id: I41a9bfaff50afea779a7572220f6a01b507e95ac
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Support the creation of >= 3.x OpenGL contexts

Use the EGL_KHR_create_context extension if available to create modern gl
contexts. We disable window decorations on core profiles because that
mandates a VAO to be used.

Change-Id: Id6044e64f6736244ae9d593af4d68c4000a31de6
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Call ::exit() from the gui thread only

::exit() is not thread safe, so make sure to not call it more than one
time, once from the gui thread and once from the wayland event thread.

Change-Id: I80905c6d996cb827a5101ae6d6c9bc12a267ba71
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Fix shm windows sometimes not showing after being hidden

QWaylandShmBackingStore installs a frame callback on flush, and subsequent
flushes will not attach a new buffer until the callback is fired.
If the window is hidden while we're waiting for the callback, we attach
a NULL buffer, so the compositor will not redraw the surface and will not
fire the frame callback. When showing the window again the backing store's
flush() will wait indefinitely for the frame callback to attach its buffer.
To fix it destroy the frame callback when the window is hidden.

This was easily noticeable when fast switching between popup menus.

Change-Id: Ic0c71ed79e2fab9faf452f63b05bc4576ea9a3ba
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Remove duplicate size property declaration

Change-Id: I9700c15066c030436dbe2f9a09b0851b7f4350ae
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Fix the compositor's wayland versioning

We cannot just assume all clients implement the same version of the
various interfaces as the compositor does. Keep track of them, and
react accordingly when creating a resource or sending an event.

Change-Id: I9792433a14d49c5c4df0c892fc1349ce0dfb0d43
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Pass the relevant serial when setting the selection

This fixes copying in Weston.

Change-Id: Icbdb81078e8df4575bbe440321773131ba27ebbf
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Move examples into wayland subdirectory.

Conforming to the Qt project directory structure.
Change-Id: I452867fabc88e9594fa26f944b5d3e1ca4ffc720
Reviewed-by: Topi Reiniö <topi.reinio@digia.com>
Be compatible with older compositors

When binding globals take care of the version the compositor provides
and don't call requests that the compositor doesn't implement.

Change-Id: Iea0c534fb9e005720857e2778e380b6a9c22a6f3
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Fix -no-opengl builds

Task-number: QTBUG-41677
Change-Id: I039ec581e960eb70eb04aed6e65add70c563ba77
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>