forked from 12to11/12to11

* 12to11.c (XLMain): Initialize pointer constraints. * 12to11.conf: Add Emacs local variables section. * 12to11.man: Document new protocol. * Imakefile (SRCS): Add pointer_constraints.c. (OBJS): Add pointer_constraints.o. (pointer-constraints-unstable-v1): New scanner target. * README: Update accordingly. * compositor.h (enum _ClientDataType): Add PointerConfinementData. * dmabuf.c (struct _BufferParams): Rearrange for alignment. (struct _Buffer): Rearrange for alignment. * dnd.c (struct _DndState, struct _DragState) (struct _WindowCacheEntry): * seat.c (struct _SeatCursor, struct _ScrollValuator) (struct _SeatClientInfo, struct _Seat): Rearrange for alignment. (SendMotion): Do not send pointer motion to locked seats. (CheckPointerBarrier): New function. (EnteredSurface, DispatchMotion): Check for pointer confinement changes. (XLSeatGetPointerDevice): New function. (XLPointerGetSeat, XLSeatGetMouseData, XLSeatLockPointer) (XLSeatUnlockPointer): New functions. * shm.c (HandleResourceDestroy, CreatePool, HandleBind): Remove redundant `all_shms' field. * subcompositor.c (struct _View): New function `maybe_resized'. (ViewAfterSizeUpdate): Call it if necessary. (ViewAttachBuffer): Update a comment. (ViewSetMaybeResizedFunction): New function. * subsurface.c (MoveFractional): * surface.c (ApplyInputRegion, HandleScaleChanged, MaybeResized) (XLCreateSurface, XLWindowFromSurface): Update pointer constraints. * xdata.c (struct _ReadTargetsData, struct _ConversionTransferInfo) (struct _TargetMappingTable): Rearrange for alignment. (XLInitXData): Require fixes 1.5. * xdg_surface.c (struct _XdgRole): Rearrange fr alignment. (AckConfigure): Fix serial monotonicity checking. (NoteConfigure): Update pointer constraints. * xdg_toplevel.c (struct _XdgToplevel): Rearrange for alignment.
111 lines
4.2 KiB
Text
111 lines
4.2 KiB
Text
This is a tool for running Wayland applications on an X server,
|
|
preferably with a compositing manager running.
|
|
|
|
It is not yet complete. What is not yet implemented includes support
|
|
for touchscreens, and device switching in dmabuf feedback.
|
|
|
|
It is not portable to systems other than recent versions of GNU/Linux
|
|
running the X.Org server 1.20 or later, and has not been tested on
|
|
window (and compositing) managers other than GNOME Shell.
|
|
|
|
It will not work very well unless the compositing manager supports the
|
|
EWMH frame synchronization protocol.
|
|
|
|
Building and running this tool requires the following X protocol
|
|
extensions:
|
|
|
|
Nonrectangular Window Shape Extension, version 1.1 or later
|
|
MIT Shared Memory Extension, version 1.2 or later
|
|
X Resize, Rotate and Reflect Extension, version 1.3 or later
|
|
X Synchronization Extension, version 1.0 or later
|
|
X Rendering Extension, version 1.2 or later
|
|
X Input Extension, version 2.3 or later
|
|
Direct Rendering Interface 3, version 1.2 or later
|
|
X Fixes Extension, version 1.5 or later
|
|
X Presentation Extension, version 1.0 or later
|
|
|
|
In addition, it requires Xlib to be built with the XCB transport, and
|
|
the XCB bindings for MIT-SHM and DRI3 to be available.
|
|
|
|
Sometimes, it might be desirable to build with EGL, and use OpenGL ES
|
|
2.0 for i.e. YUV video format support. To do so, uncomment the block
|
|
of code for EGL support in 12to11.conf before running `xmkmf'. This
|
|
will additionally require the EGL and GLESv2 development files, and
|
|
for the following EGL and GLES extensions to be present at runtime:
|
|
|
|
EGL_EXT_platform_base
|
|
EGL_EXT_device_query
|
|
EGL_KHR_image_base
|
|
EGL_EXT_image_dma_buf_import_modifiers
|
|
EGL_EXT_image_dma_buf_import
|
|
EGL_EXT_buffer_age
|
|
|
|
GL_OES_EGL_image
|
|
GL_OES_EGL_image_external
|
|
GL_EXT_read_format_bgra
|
|
GL_EXT_unpack_subimage
|
|
|
|
After building with EGL support, the renderer must be enabled by
|
|
setting the environment variable "RENDERER" to "egl", or by setting
|
|
the "renderer" resource (class "Renderer") to "egl".
|
|
|
|
The following Wayland protocols are implemented to a more-or-less
|
|
complete degree:
|
|
|
|
'wl_output', version: 2
|
|
'wl_compositor', version: 5
|
|
'wl_shm', version: 1
|
|
'xdg_wm_base', version: 5
|
|
'wl_subcompositor', version: 1
|
|
'wl_seat', version: 7
|
|
'wl_data_device_manager', version: 3
|
|
'zwp_linux_dmabuf_v1', version: 4
|
|
'zwp_primary_selection_device_manager_v1', version: 1
|
|
'wp_viewporter', version: 1
|
|
'zxdg_decoration_manager_v1', version: 1
|
|
'zwp_text_input_manager_v3', version: 1
|
|
'wp_single_pixel_buffer_manager_v1', version: 1
|
|
'zwp_pointer_constraints_v1', version: 1
|
|
|
|
When built with EGL, the following Wayland protocol is also supported:
|
|
|
|
'zwp_linux_explicit_synchronization_v1', version: 2
|
|
|
|
When the X server supports version 1.6 or later of the X Resize,
|
|
Rotate and Reflect Extension, the following Wayland protocol is also
|
|
supported:
|
|
|
|
'wp_drm_lease_device_v1', version: 1
|
|
|
|
With the main caveat being that zwp_linux_dmabuf_v1 has no real
|
|
support for multiple-provider setups (help wanted).
|
|
|
|
Window decorations are also not supported, even though they fit in
|
|
nicely with X window management.
|
|
|
|
It would also be nice to have pinch gesture support.
|
|
|
|
This directory is organized as follows:
|
|
|
|
Imakefile - the top level Makefile template
|
|
12to11.conf - configuration
|
|
*.xml - Wayland protocol definition source
|
|
*.c, *.h - C source code
|
|
*.awk - scripts used to generate headers
|
|
*.txt - text data used to generate some headers, i.e.
|
|
those containing MIME types or shaders
|
|
|
|
Building the source code is simple, provided that you have the
|
|
necessary libwayland-server library, pixman, XCB, DRM, and X extension
|
|
libraries installed:
|
|
|
|
xmkmf # to generate the Makefile
|
|
make # to build the binary
|
|
|
|
wayland-scanner is also required when building from the repository.
|
|
|
|
Running the binary should be simple as well:
|
|
|
|
./12to11
|
|
|
|
Wayland programs will then run as regular X windows.
|