Save and restore the state when doing decorations

The idea that swapBuffers() randomly changes the state is ridiculous and
breaks even Qt's own OpenGL examples. An application, that has full control
over its context and rendering, is not necessarily prepared for random state
changes in its context.

To overcome this, save and restore all the interesting state. This is fragile
and applications can break it in different ways by setting all sorts of
exotic state, esp. when using modern OpenGL. For GLES2 level stuff it should
be sufficient, though.

Change-Id: I52e7ba4072b241eb92f5f04b81d707ad5bc68f6d
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Do not crash when querying transientParent() and there's none

Change-Id: I47cddffd7859df2548dacb6aee13beb15a222451
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Fix typo

Change-Id: Idd4351b2650e8869d0e6038d11be5da37f4bdbb1
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
compositor: Do not access members after deleting an instance

Change-Id: I4edb73d0b4476492db8e6993e06cd6402cd55180
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Explicitly define the interface versions

Currently a global is bound with the version the interface has in the xml
file. This is a problem for apps that explicitly link to libwayland-client
because they may link to a newer libwayland, so the version of some interface
may be higher than the one that it is actually implemented.

Change-Id: Id0dbe6c0f1e05fe91954b9d8d9472d42d2053cdc
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Fix build with desktop OpenGL

Change-Id: I6a21f447f31e9eeeafed81275c33b0c2c79e1c8a
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Fix return type conflict with libhybris

The return type in 'PFNEGLHYBRISGETNATIVEBUFFERINFOPROC' and
'PFNEGLHYBRISSERIALIZENATIVEBUFFERPROC' conflict with hybris_native.h,
it is void while it should be EGLBoolean.

Change-Id: Ia23ab4da59b3a904eb5b2884398ab5dd207f415b
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Reviewed-by: Yen-Chin Lee <coldnew.tw@gmail.com>
Support RasterGLSurface windows

In an attempt to make QOpenGLWidget and QQuickWidget working on Wayland.

Since Qt 5.3 all widget windows are of type RasterGLSurface (given that
the plugin reports this capability which wayland will, with this patch).
Such a window can behave either like a raster or an OpenGL window.

This concept maps badly to platform plugins that have a rigid separation
between raster and OpenGL platform window implementations. From now on,
the OpenGL window implementation, that is used pretty much always,
except for raw RasterSurface windows, must be prepared to behave like
a raster window too, which involves having a backingstore.

Change-Id: I0226704b8d5893843fcae68059c5fe9ad2f5e761
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Indicate from the client buffer integration if decorations are supported

Custom client buffer integrations may not care about window decorations.
Setting QT_WAYLAND_DISABLE_WINDOWDECORATION is tedious and error-prone.
And it cannot be omitted since things like input events will be off if the
common client code thinks decorations are in use but the client buffer
integration does not render them at all.

Therefore add a supportsWindowDecoration() virtual in addition to the
environment variable.

Change-Id: If8f621182d5c230f4d8d679c050f5d27aed6c2fb
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Returns false for window decoration support in xcomposite and brcm

Change-Id: Ibc8eae85219da044812d22967c46b4bebb5e27bf
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
Remove the unused context parameter from lock/unlock

Nothing relies on it and we are anyway passing null.

Change-Id: I2543650441c7f97d23b52bc7a4caa555b0777676
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
build: If building the compositor API, build plugins after the compositor library.

Some plugins require the compositor library, so it must be finished first.

Change-Id: I60d2932cdd0e777a0ad0dd866246c59b9a1f47fc
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Warn when EGLContext could not be created.

Change-Id: Id840ace3d762e47c0076745301e8012755077770
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
qwindow-compositor: Rename QOpenGLWindow

That's a public class in Qt 5.4. Use the more appropriate CompositorWindow.

Change-Id: Id7de20c7e2d5b373f8ef9fe9a836188dc864479e
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>