Provided by: python3-pywayland_0.4.18-4_amd64 bug

NAME

       pywayland - pywayland Documentation

       PyWayland  provides Python bindings to the Wayland library, using pure Python by making calls through the
       CFFI module.  PyWayland supports Python >=3.6, including sufficiently new versions of PyPy  3.   This  is
       currently  a highly experimental package, and the usage is likely to change between releases.  Check back
       as development continues, contributions are always welcome!

       Check out the different sections below for information on installing and  running  PyWayland.   There  is
       also  information on running and developing from source (feedback and contributions are always welcome on
       the issue tracker).  Finally, the module documentation is included.

DOCUMENTATION

   Installation
       To install PyWayland, you will need to have a base set of dependencies installed.  This should be all the
       configuration that is required to run the packaged version on PyPI.  The additional steps  to  build  and
       install from source are outlined below.

       If you have any problems with anything outlined here, feedback is greatly appreciated.

   External Dependencies
       In  order  to  run PyWayland, you will need to have installed the Wayland libraries and headers such that
       they can be found by CFFI.  This can be done with the libwayland-dev apt package; however, note  that  it
       is  probably best to use the most recent version of Wayland available from the Wayland releases site, and
       the pip package will try to track the most recent version.

       You will also need to have the Python headers installed and a version of GCC to compile the cffi library.
       The headers are typically available through the python-dev package.

       Optionally, you can have installed  the  wayland-protocols  package,  also  available  from  the  Wayland
       releases  page.  The package uploaded to PyPI will already have these protocols included, so this is only
       needed if you plan on installing from source.

   Installing with pip
       Once the external dependencies are in place you should just be able to run:

          $ pip install pywayland

       Any additional unfulfilled dependencies should be downloaded.

   Installing from Source
       You can download and run PyWayland from source, which will not only give you the latest improvements  and
       fixes,  but  will  let you build the protocol files against a different version than is available through
       pip (the version of Wayland the protocol is compiled against is listed on the top of the PyPI page).

   Getting the Source
       You can download the most recent version of PyWayland from the git repository, or  clone  the  repository
       as:

          $ git clone https://github.com/flacjacket/pywayland.git

   Python Dependencies
       PyWayland  depends on a minimal set of dependencies.  All Python version require cffi (to perform Wayland
       library calls), which can be pip installed for non-PyPy installations.  Note  that  PyPy  platforms  ship
       with cffi.

   Generating the Wayland Protocol
       At  this point, you have the base PyWayland module, which contains some core objects and objects specific
       to client and server implementations.  The client and server exchange messages  defined  in  the  Wayland
       protocol,  which  is an XML file that ships with Wayland.  The scanner parses this XML file and generates
       the relevant objects.

       If the Wayland protocol file is in the default location (/usr/share/wayland/wayland.xml) or can be  found
       with pkg-config, you should be able to build the protocol files without any problems:

          $ python -m pywayland.scanner

       This  will  output  the  protocol  files  to the directory ./pywayland/protocol/.  The input file and the
       output directory can be set from the command line options, see python -m pywayland.scanner  -h  for  more
       information.

   Running PyWayland inplace
       Once  the  protocol  files are created, you can generate the cffi module.  Note: this is only required if
       you want to run from the source in place.  If the libwayland header files are  correctly  installed,  you
       will just need to run:

          $ python pywayland/ffi_build.py

       At  this  point, you should be able to use the PyWayland library.  You can check that you have everything
       installed correctly by running the associated test-suite (note that you will also need pytest to run  the
       tests).  Simply run:

          $ pytest

       from the root directory.

   Installing PyWayland
       The package can be installed from source using typical setup.py mechanisms:

          $ python setup.py install

       Additional arguments can be used to automatically generate the Wayland protocols for the standard Wayland
       package  (which will fail if it cannot run) and the wayland-protocols package (which will be attempted by
       default, but will not raise an error if it fails).

       If you have any problems or have any feedback, please report back to the issue tracker,  contribution  is
       always welcome, see Contributing.

   Contributing
       Build Status Build Coverage

       Contributions of any form are always welcome, whether it is general feedback on the use of PyWayland, bug
       reports, or pull requests.  All development is done through GitHub.

       If  you wish to develop PyWayland, it is recommended that you follow the outline given in Installing from
       Source.  A few things to be aware of when writing code:

       • Continuous integration testing in done with Travis, and tests are  run  against  all  supported  Python
         versions  (currently 3.6+ and PyPy 3).  You can check that your changes pass locally by running py.test
         from the root directory (this requires installing pytest).  Currently, the tests also  run  with  nose,
         however, they may not always in the future.

       • Code  coverage  is  assessed using Coveralls.  Currently, coverage is fairly low, any work to help this
         would be greatly appreciated.

       • Code quality is assessed in the tests with ruff, be sure any new code meets Python standards.

       • Type annotations are included in much of the codebase and checked with mypy.  Additional  checks  using
         other type checkers are appreciated.

   PyWayland Scanner
       The  PyWayland  scanner  parses  the wayland.xml protocol definition file and outputs interfaces with the
       events, requests, and enums defined by the protocol.  See Scanner Modules  for  details  on  the  scanner
       implementation.

   Command-line Invocation
       If you have installed PyWayland, the scanner is placed in your path as pywayland-scanner.py.  By default,
       invoking  the  scanner reads in the XML file from /usr/share/wayland/wayland.xml and outputs the protocol
       definitions to ./protocol/.

       If you are running PyWayland from source, you can use the scanner  in  ./bin/pywayland-scanner.py.   This
       file  sets  the path to the current source directory and runs method used by the entry-point.  Otherwise,
       this functions the same as above.

   Script Invocation
       In addition to the command-line use, you can use the scanner from within Python scripts.  This  is  done,
       for  example,  when  installing or building the docs to ensure the protocol modules are included in both.
       For details on invoking the scanner module, see Scanner.

   Module Reference
   Client Modules
       The base set of objects used by Wayland clients.  Users should only  be  directly  creating  Display  and
       EventQueue objects.  The Proxy objects to interfaces should be returned by making request calls.

   Display
       class pywayland.client.Display(name_or_fd: int | str | None = None)
              Represents a connection to the compositor

              A  Display  object represents a client connection to a Wayland compositor.  The connection and the
              corresponding Wayland object are created with Display.connect().  The display  must  be  connected
              before it can be used.  A connection is terminated using Display.disconnect().

              A  Display  is also used as the Proxy for the pywayland.protocol.wayland.WlDisplay protocol object
              on the compositor side.

              A Display object handles all the data sent from and to the compositor.  When a  Proxy  marshals  a
              request,  it will write its wire representation to the display's write buffer. The data is sent to
              the compositor when the client calls flush().

              Incoming data is handled in two steps: queueing and dispatching.  In  the  queue  step,  the  data
              coming  from the display fd is interpreted and added to a queue. On the dispatch step, the handler
              for the incoming event set by the client on the corresponding Proxy is called.

              A Display has at least one event queue, called the default queue.  Clients can  create  additional
              event  queues  with  Display.create_queue()  and  assign  Proxy's  to  it.  Events  occurring in a
              particular proxy are always queued in its assigned queue.  A client  can  ensure  that  a  certain
              assumption,  such  as  holding  a  lock or running from a given thread, is true when a proxy event
              handler is called by assigning that proxy to an event queue and making sure  that  this  queue  is
              only dispatched when the assumption holds.

              The  default  queue  is  dispatched  by calling Display.dispatch().  This will dispatch any events
              queued on the default queue and attempt to read from the display fd if it's empty. Events read are
              then queued on the appropriate queues according to the proxy assignment.

              A user created queue is dispatched with Display.dispatch_queue().  This function  behaves  exactly
              the same as Display.dispatch() but it dispatches given queue instead of the default queue.

              A  real  world  example  of  event queue usage is Mesa's implementation of glSwapBuffers() for the
              Wayland platform. This function might need to block  until  a  frame  callback  is  received,  but
              dispatching  the  default  queue could cause an event handler on the client to start drawing gain.
              This problem is solved using another event queue, so that only the events handled by the EGL  code
              are dispatched during the block.

              Parameters
                     name_or_fd  (int or str) -- Either the name of the display to create or the file descriptor
                     to connect the display to.   If  not  specified,  then  use  the  default  name,  generally
                     wayland-0

              connect() -> None
                     Connect to a Wayland display

                     Connect  to the Wayland display by name of fd.  An int parameter opens the connection using
                     the file descriptor.  The Display takes ownership of the fd and  will  close  it  when  the
                     display  is  destroyed.  The fd will also be closed in case of failure.  A string will open
                     the display of the given name.  If name is None,  its  value  will  be  replaced  with  the
                     WAYLAND_DISPLAY  environment  variable  if it is set, otherwise display "wayland-0" will be
                     used.

              disconnect() -> None
                     Close a connection to a Wayland display

                     Close the connection to display and free all resources associated with it.

              dispatch(*, block: bool = False, queue: EventQueue | None = None) -> int
                     Process incoming events

                     If block is False, it does not attempt to read the display fd or  event  queue  and  simply
                     returns zero if the queue is empty.

                     If  the given queue is empty and block is True, this function blocks until there are events
                     to be read from the display fd. Events are read and queued on the appropriate event queues.
                     Finally, events on the default event queue are dispatched.

                     NOTE:
                        It is not possible to check if there are events on the queue or not.

              flush() -> int
                     Send all buffered requests on the display to the server

                     Send all buffered data on the client side to the server. Clients should call this  function
                     before  blocking.  On  success,  the  number  of  bytes  sent to the server is returned. On
                     failure, this function returns -1 and errno is set appropriately.

                     Display.flush() never blocks.  It will write as much data as  possible,  but  if  all  data
                     could  not be written, errno will be set to EAGAIN and -1 returned.  In that case, use poll
                     on the display file descriptor to wait for it to become writable again.

              get_fd() -> int
                     Get a display context's file descriptor

                     Return the file descriptor associated with a display so  it  can  be  integrated  into  the
                     client's main loop.

              read(*, queue: EventQueue | None = None) -> None
                     Read events from display file descriptor

                     Calling  this  function  will result in data available on the display file descriptor being
                     read and read events will be queued on their corresponding event queues.

                     Parameters
                            queue -- If specified, queue the events onto the given event  queue,  otherwise  the
                            default display queue will be used.

              roundtrip(*, queue: EventQueue | None = None) -> int
                     Block until all pending request are processed by the server

                     This  function  blocks  until  the  server  has  processed all currently issued requests by
                     sending a request to the display server and waiting for a reply before returning.

                     This function uses wl_display_dispatch_queue() internally. It is not allowed to  call  this
                     function  while  the thread is being prepared for reading events, and doing so will cause a
                     dead lock.

                     NOTE:
                        This function may dispatch other events being received on the default queue.

                     Parameters
                            queue (EventQueue) -- The queue on which to run the roundtrip, if  not  given,  uses
                            the default queue.

                     Returns
                            The number of dispatched events on success or -1 on failure

   EventQueue
       class pywayland.client.EventQueue(display: Display)
              A queue for wl_proxy object events.

              Event queues allows the events on a display to be handled in a thread-safe manner. See Display for
              details.

              Parameters
                     display (Display) -- The display object that the event queue is connected to.

              destroy() -> None
                     Destroy an event queue

                     Destroy the given event queue. Any pending event on that queue is discarded.

                     The  wl_display  object  used  to  create the queue should not be destroyed until all event
                     queues created with it are destroyed with this function.

              property destroyed: bool
                     Determine the state of the event queue

   Server Modules
       The base set of objects used by Wayland servers.

   Client
       class pywayland.server.Client(display: ~pywayland.server.display.Display | None = None, fd: int | None =
       None, ptr: <MagicMock name='mock.ffi.ClientCData.__or__()' id='140737181137280'> = None)
              Create a client for the given file descriptor

              Given a file descriptor corresponding to one end of a socket, create a client struct and  add  the
              new  client to the compositors client list.  At that point, the client is initialized and ready to
              run, as if the client had connected to the servers listening socket. Alternatively, pass a pointer
              to an existing client and use that instead of creating a new one.

              The other end of the socket can be passed to connect()  on  the  client  side  or  used  with  the
              WAYLAND_SOCKET environment variable on the client side.

              Parametersdisplay (Display) -- The display object

                     • fd (int) -- The file descriptor for the socket to the client

                     • ptr (ffi.ClientCData) -- A pointer to an existing wl_client

              add_destroy_listener(listener: Listener) -> None
                     Add a listener for the destroy signal

                     Parameters
                            listener (Listener) -- The listener object

              destroy() -> None
                     Destroy the client

              flush() -> None
                     Flush pending events to the client

                     Events  sent  to clients are queued in a buffer and written to the socket later - typically
                     when the compositor has handled all requests and goes back to  block  in  the  event  loop.
                     This function flushes all queued up events for a client immediately.

              classmethod from_resource(resource: <MagicMock name='mock.ffi.ResourceCData'
              id='140737181137280'>) -> Client
                     Look up the corresponding wl_client for a wl_resource

                     Parameters
                            resource (pywayland.protocol_core.Resource) -- The wl_resource

                     Returns
                            A Client instance.

              get_credentials() -> tuple[int, int, int]
                     Return Unix credentials for the client.

                     This  function  returns  the process ID, the user ID and the group ID for the given client.
                     The credentials come from getsockopt() with SO_PEERCRED, on the client socket fd.

              get_object(object_id: int) -> Any
                     Look up an object in the client name space

                     This looks up an object in the client object name space by its object ID.

                     Parameters
                            object_id (int) -- The object id

                     Returns
                            The object, or None if there is not object for the given ID

   Display
       class pywayland.server.Display(ptr=None)
              Create a Wayland Display object

              add_shm_format(shm_format) -> None
                     Add support for a Shm pixel format

                     Add the specified format format to the list of formats the WlShm object advertises  when  a
                     client  binds  to  it.   Adding  a format to the list means that clients will know that the
                     compositor supports this format and may use it for creating WlShm buffers.  The  compositor
                     must be able to handle the pixel format when a client requests it.

                     The compositor by default supports WL_SHM_FORMAT_ARGB8888 and WL_SHM_FORMAT_XRGB8888.

                     Parameters
                            shm_format (format) -- The shm pixel format to advertise

              add_socket(name: str | None = None) -> str
                     Add a socket to Wayland display for the clients to connect.

                     This  adds  a  Unix  socket  to  Wayland display which can be used by clients to connect to
                     Wayland display.

                     If None is passed as name, then it would look for WAYLAND_DISPLAY environment variable  for
                     the socket name. If WAYLAND_DISPLAY is not set, then default wayland-0 is used.

                     The  Unix  socket  will  be  created  in  the  directory pointed to by environment variable
                     XDG_RUNTIME_DIR. If XDG_RUNTIME_DIR is not set, then this function throws an exception.

                     The length of socket path, i.e., the path set in XDG_RUNTIME_DIR and the socket name,  must
                     not exceed the maxium length of a Unix socket path.  The function also fails if the user do
                     not  have  write permission in the XDG_RUNTIME_DIR path or if the socket name is already in
                     use.

                     Parameters
                            name (string or None) -- Name of the Unix socket.

              destroy() -> None
                     Destroy Wayland display object.

                     This function emits the Display destroy signal, releases all  the  sockets  added  to  this
                     display,  free's  all the globals associated with this display, free's memory of additional
                     shared memory formats and destroy the display object.

                     SEE ALSO:
                        Display.add_destroy_listener()

              property destroyed: bool
                     Returns if the display has been destroyed

              flush_clients() -> None
                     Flush client connections

              get_event_loop() -> EventLoop
                     Get the event loop for the display

                     Returns
                            The EventLoop for the Display

              get_serial() -> int
                     Get the current serial number

                     This function returns the most recent serial number, but does not increment it.

              init_shm() -> None
                     Initialize shm for this display

              next_serial() -> int
                     Get the next serial

                     This function increments the display serial number and returns the new value.

              run() -> None
                     Run the display

              terminate() -> None
                     Stop the display from running

   EventLoop
       class pywayland.server.EventLoop(display: Display | None = None)
              An event loop to add events to

              Returns an event loop.  Either returns the event loop of a given display (which will trigger  when
              the   Display   is  run),  or  creates  a  new  event  loop  (which  can  be  triggered  by  using
              EventLoop.dispatch()).

              Parameters
                     display (Display) -- The display to create the EventLoop on (default to None)

              class FdMask(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1,
              boundary=None)

              add_destroy_listener(listener)
                     Add a listener for the destroy signal

                     Parameters
                            listener (Listener) -- The listener object

              add_fd(fd, callback, mask=<FdMask.WL_EVENT_READABLE: 1>, data=None)
                     Add file descriptor callback

                     Triggers function call when file descriptor state matches the mask.

                     The callback should take three arguments:

                        • fd - file descriptor (int)

                        • mask - file descriptor mask (uint)

                        • data - any object

                     Parametersfd (int) -- File descriptor

                            • callback -- Callback function

                            • mask -- File descriptor mask

                            • data (object) -- User data to send to callback

                     Returns
                            EventSource for specified callback

                     SEE ALSO:
                        pywayland.server.eventloop.EventSource.check()

              add_idle(callback, data=None)
                     Add idle callback

                     Parameterscallback (function with callback void(void *data)) -- Callback function

                            • data -- User data to send to callback

                     Returns
                            EventSource for specified callback

              add_signal(signal_number, callback, data=None)
                     Add signal callback

                     Triggers function call signal is received.

                     The callback should take three arguments:

                        • signal_number - signal (int)

                        • data - any object

                     Parameterssignal_number (int) -- Signal number to trigger on

                            • callback -- Callback function

                            • data (object) -- User data to send to callback

                     Returns
                            EventSource for specified callback

              add_timer(callback, data=None)
                     Add timer callback

                     Triggers function call after a specified time.

                     The callback should take one argument:

                        • data - any object

                     Parameterscallback (function with callback int(void *data)) -- Callback function

                            • data (object) -- User data to send to callback

                     Returns
                            EventSource for specified callback

                     SEE ALSO:
                        pywayland.server.eventloop.EventSource.timer_update()

              destroy()
                     Destroy the event loop

              dispatch(timeout)
                     Dispatch callbacks on the event loop

              dispatch_idle()
                     Dispatch idle callback on the event loop

   Listener
       class pywayland.server.Listener(function: Callable)
              A single listener for Wayland signals

              Provides the means to listen for wl_listener  signal  notifications.   Many  Wayland  objects  use
              wl_listener for notification of significant events like object destruction.

              Clients  should  create  Listener  objects  manually and can register them as listeners to objects
              destroy events using the object's .add_destroy_listener() method.  A listener can only  listen  to
              one signal at a time.

              Parameters
                     function (callable) -- callback function for the Listener

              remove() -> None
                     Remove the listener

   Protocol Core Modules
   Interface
       Interface  objects  are  only created as a subclass of Interface.  The Interface class wraps the protocol
       objects, and serves to initialize a set of parameters  for  the  Interface  and  provide  decorators  for
       defining Message objects on the interface.

       class pywayland.protocol_core.Interface
              Wrapper class for wl_wayland structs

              Base  class for interfaces that are defined by the wayland.xml class and generated by the scanner.
              Sub-classes should  use  the  InterfaceMeta  metaclass,  which  will  define  subclass.events  and
              subclass.requests,  the  lists  of  the  methods  on  this  interface.   These class variables are
              populated by the Interface.event() and Interface.request() decorators.

              classmethod event(*arguments: Argument, version: int | None = None) -> Callable
                     Decorator for interface events

                     Adds the decorated method to the list of events of the interface (server-side method).

                     Parameterssignature (string) --  Encodes  the  types  of  the  arguments  to  the  decorated
                              function.

                            • types  (list)  --  List of the types of any objects included in the argument list,
                              None if otherwise.

              classmethod request(*arguments: Argument, version: int | None = None)
                     Decorator for interface requests

                     Adds the decorated method to the list of requests of the interface (client-side method).

                     Parameterssignature (string) --  Encodes  the  types  of  the  arguments  to  the  decorated
                              function.

                            • types  (list)  --  List of the types of any objects included in the argument list,
                              None if otherwise.

   Interface Metaclass
       This metaclass initializes lists for the requests and events on an  interface  and  initializes  a  cdata
       struct for the class.

       class pywayland.protocol_core.interface.InterfaceMeta(name, bases, dct)
              Metaclass for Interfaces

              Initializes empty lists for events and requests for the given class.

   Proxy
       Proxy objects are not created directly, and users should generally not create a proxy class on their own.
       Proxy  classes  give  client  side access to the interfaces defined by the Wayland protocol.  Proxies are
       returned from the server after calling protocol methods which return new_id's.

       class pywayland.protocol_core.Proxy(ptr, display=None)

              destroy() -> None
                     Frees the pointer associated with the Proxy

              property destroyed: bool
                     Determine if proxy has been destroyed

                     Returns true if the proxy has been destroyed.

   Resource
       class pywayland.protocol_core.Resource(client, version: int | None = None, id: int = 0)
              A server-side Interface object for the client

              Not created directly, created from the Interface object.

              Parametersclient (Client or cdata for wl_client *) -- The client that the Resource is for

                     • version (int) -- The version to use for  the  Interface,  uses  current  version  if  not
                       specified

                     • id (int) -- The id for the item

              add_destroy_listener(listener) -> None
                     Add a listener for the destroy signal

                     Parameters
                            listener (Listener) -- The listener object

              destroy() -> None
                     Destroy the Resource

   Global
       class pywayland.protocol_core.Global(display, version=None)
              A server-side Interface object for the server

              Not created directly, created from the Interface object.

              Parametersdisplay (Display) -- The display the object is created on

                     • version  (int)  --  The  version  to  use  for the Interface, uses current version if not
                       specified

              destroy()
                     Destroy the global object

   Message
       Message objects are used to wrap the method calls on the protocol objects.  The Message objects are added
       to the Interface's as either requests (client-side functions) or events (server-side functions).

       class pywayland.protocol_core.message.Message(func: Callable, arguments: list[Argument], version: int |
       None)
              Wrapper class for wl_message structs

              Base class that correspond to the methods defined on an interface in the wayland.xml protocol, and
              are generated by the scanner.  Subclasses specify the type of method, whether it is a  server-side
              or client-side method.

              Parametersfunc (function) -- The function that is represented by the message

                     • signature (string) -- The signature of the arguments of the message

                     • types  (list)  -- List of the types of any objects included in the argument list, None if
                       otherwise.

              arguments_to_c(*args)
                     Create an array of wl_argument C structs

                     Generate the CFFI cdata array of wl_argument structs that correspond to  the  arguments  of
                     the method as specified by the method signature.

                     Parameters
                            args (list) -- Input arguments

                     Returns
                            cdata union wl_argument [] of args

              build_message_struct(wl_message_struct) -> tuple
                     Bulid the wl_message struct for this message

                     Parameters
                            wl_message_struct -- The wl_message cdata struct to use to build the message struct.

                     Returns
                            A tuple of elements which must be kept alive for the message struct to remain valid.

              c_to_arguments(args_ptr)
                     Create a list of arguments

                     Generate  the  arguments  of the method from a CFFI cdata array of wl_argument structs that
                     correspond to the arguments of the method as specified by the method signature.

                     Parameters
                            args_ptr (cdata union wl_argument []) -- Input arguments

                     Returns
                            list of args

   Argument
       class pywayland.protocol_core.argument.Argument(argument_type: 'ArgumentType', nullable: 'bool' = False,
       interface: 'type[Interface] | None' = None)

   ArgumentType
       class pywayland.protocol_core.argument.ArgumentType(value, names=<not given>, *values, module=None,
       qualname=None, type=None, start=1, boundary=None)

   Protocol Modules
       Wayland protocols built against Wayland 1.21.0 and Wayland Protocols 1.25.

   wayland Module
   WlBuffer
       class pywayland.protocol.wayland.WlBuffer
              Content for a WlSurface

              A buffer provides the content for a WlSurface. Buffers are created through factory interfaces such
              as WlShm, wp_linux_buffer_params (from the linux-dmabuf protocol extension) or similar. It  has  a
              width  and  a  height  and  can  be  attached  to a WlSurface, but the mechanism by which a client
              provides and updates the contents is defined by the buffer factory interface.

              Color channels are assumed to be electrical rather than optical (in other words,  encoded  with  a
              transfer  function)  unless  otherwise  specified.  If  the buffer uses a format that has an alpha
              channel, the alpha channel is assumed to be premultiplied into the electrical color channel values
              (after transfer function encoding) unless otherwise specified.

              Note, because WlBuffer objects are created  from  multiple  independent  factory  interfaces,  the
              WlBuffer interface is frozen at version 1.

              destroy() -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Destroy a buffer

                     Destroy  a  buffer.  If  and  how you need to release the backing storage is defined by the
                     buffer factory interface.

                     For possible side-effects to a surface, see WlSurface.attach().

              release() -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Compositor releases buffer

                     Sent when this WlBuffer is no longer used by the compositor.  The client  is  now  free  to
                     reuse or destroy this buffer and its backing storage.

                     If  a  client  receives  a  release  event  before the frame callback requested in the same
                     WlSurface.commit() that attaches this WlBuffer to a surface, then the client is immediately
                     free to reuse the buffer and its backing storage, and does not need a second buffer for the
                     next surface content update. Typically this is possible, when the  compositor  maintains  a
                     copy of the WlSurface contents, e.g. as a GL texture. This is an important optimization for
                     GL(ES) compositors with WlShm clients.

   WlCallback
       class pywayland.protocol.wayland.WlCallback
              Callback object

              Clients can handle the 'done' event to get notified when the related request is done.

              Note,  because  WlCallback  objects  are created from multiple independent factory interfaces, the
              WlCallback interface is frozen at version 1.

              done(callback_data: 'int') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Done event

                     Notify the client when the related request is done.

                     Parameters
                            callback_data (ArgumentType.Uint) -- request-specific data for the callback

   WlCompositor
       class pywayland.protocol.wayland.WlCompositor
              The compositor singleton

              A compositor.  This object is a singleton global.  The compositor is in charge  of  combining  the
              contents of multiple surfaces into one displayable output.

              create_surface() -> 'Proxy[WlSurface]'

                     Request -- opcode 0 (attached to Resource instance)

                     Create new surface

                     Ask the compositor to create a new surface.

                     Returns
                            WlSurface -- the new surface

              create_region() -> 'Proxy[WlRegion]'

                     Request -- opcode 1 (attached to Resource instance)

                     Create new region

                     Ask the compositor to create a new region.

                     Returns
                            WlRegion -- the new region

   WlDataDevice
       class pywayland.protocol.wayland.WlDataDevice
              Data transfer device

              There  is  one  WlDataDevice  per  seat  which can be obtained from the global WlDataDeviceManager
              singleton.

              A WlDataDevice provides access to inter-client data transfer mechanisms such as copy-and-paste and
              drag-and-drop.

              start_drag(source: 'WlDataSource | None', origin: 'WlSurface', icon: 'WlSurface | None', serial:
              'int') -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Start drag-and-drop operation

                     This request asks the compositor to start  a  drag-and-drop  operation  on  behalf  of  the
                     client.

                     The  source  argument  is  the  data  source  that  provides the data for the eventual data
                     transfer. If source is NULL, enter, leave and motion events are sent  only  to  the  client
                     that  initiated  the drag and the client is expected to handle the data passing internally.
                     If source is destroyed, the drag-and-drop session will be cancelled.

                     The origin surface is the surface where the drag originates and the  client  must  have  an
                     active implicit grab that matches the serial.

                     The  icon  surface  is  an optional (can be NULL) surface that provides an icon to be moved
                     around with the cursor.  Initially, the top-left corner of the icon surface  is  placed  at
                     the  cursor  hotspot,  but  subsequent  WlSurface.offset()  requests  can move the relative
                     position. Attach requests must be confirmed with  WlSurface.commit()  as  usual.  The  icon
                     surface  is given the role of a drag-and-drop icon. If the icon surface already has another
                     role, it raises a protocol error.

                     The input region is ignored for wl_surfaces with the role of a drag- and-drop icon.

                     The given source may not be used in  any  further  set_selection  or  start_drag  requests.
                     Attempting to reuse a previously-used source may send a used_source error.

                     Parameterssource (WlDataSource or None) -- data source for the eventual transfer

                            • origin (WlSurface) -- surface where the drag originates

                            • icon (WlSurface or None) -- drag-and-drop icon surface

                            • serial (ArgumentType.Uint) -- serial number of the implicit grab on the origin

              set_selection(source: 'WlDataSource | None', serial: 'int') -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Copy data to the selection

                     This request asks the compositor to set the selection to the data from the source on behalf
                     of the client.

                     To unset the selection, set the source to NULL.

                     The  given  source  may  not  be  used in any further set_selection or start_drag requests.
                     Attempting to reuse a previously-used source may send a used_source error.

                     Parameterssource (WlDataSource or None) -- data source for the selection

                            • serial (ArgumentType.Uint) -- serial number  of  the  event  that  triggered  this
                              request

              release() -> 'None'

                     Request -- opcode 2 (attached to Resource instance)

                     Destroy data device

                     This request destroys the data device.

              data_offer(id: 'WlDataOffer') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Introduce a new WlDataOffer

                     The  data_offer  event introduces a new WlDataOffer object, which will subsequently be used
                     in either the data_device.enter event (for drag-  and-drop)  or  the  data_device.selection
                     event  (for  selections).   Immediately following the data_device.data_offer event, the new
                     data_offer object will send out data_offer.offer events  to  describe  the  mime  types  it
                     offers.

                     Parameters
                            id (WlDataOffer) -- the new data_offer object

              enter(serial: 'int', surface: 'WlSurface', x: 'float', y: 'float', id: 'WlDataOffer | None') ->
              'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Initiate drag-and-drop session

                     This  event  is  sent  when  an  active drag-and-drop pointer enters a surface owned by the
                     client.  The position of the pointer at enter time is provided by the x and y arguments, in
                     surface-local coordinates.

                     Parametersserial (ArgumentType.Uint) -- serial number of the enter event

                            • surface (WlSurface) -- client surface entered

                            • x (ArgumentType.Fixed) -- surface-local x coordinate

                            • y (ArgumentType.Fixed) -- surface-local y coordinate

                            • id (WlDataOffer or None) -- source data_offer object

              leave() -> 'None'

                     Event -- opcode 2 (attached to Proxy instance)

                     End drag-and-drop session

                     This event is sent when the drag-and-drop pointer leaves the surface and the session  ends.
                     The client must destroy the WlDataOffer introduced at enter time at this point.

              motion(time: 'int', x: 'float', y: 'float') -> 'None'

                     Event -- opcode 3 (attached to Proxy instance)

                     Drag-and-drop session motion

                     This  event  is  sent  when  the  drag-and-drop  pointer moves within the currently focused
                     surface. The new position of the  pointer  is  provided  by  the  x  and  y  arguments,  in
                     surface-local coordinates.

                     Parameterstime (ArgumentType.Uint) -- timestamp with millisecond granularity

                            • x (ArgumentType.Fixed) -- surface-local x coordinate

                            • y (ArgumentType.Fixed) -- surface-local y coordinate

              drop() -> 'None'

                     Event -- opcode 4 (attached to Proxy instance)

                     End drag-and-drop session successfully

                     The  event  is  sent  when  a drag-and-drop operation is ended because the implicit grab is
                     removed.

                     The drag-and-drop destination is  expected  to  honor  the  last  action  received  through
                     WlDataOffer.action(),  if  the  resulting  action  is "copy" or "move", the destination can
                     still perform WlDataOffer.receive() requests, and is expected to end all transfers  with  a
                     WlDataOffer.finish() request.

                     If  the  resulting  action  is  "ask",  the  action  will  not  be  considered  final.  The
                     drag-and-drop  destination  is  expected  to  perform  one  last  WlDataOffer.set_actions()
                     request, or WlDataOffer.destroy() in order to cancel the operation.

              selection(id: 'WlDataOffer | None') -> 'None'

                     Event -- opcode 5 (attached to Proxy instance)

                     Advertise new selection

                     The selection event is sent out to notify the client of a new WlDataOffer for the selection
                     for  this  device.  The data_device.data_offer and the data_offer.offer events are sent out
                     immediately before this event to introduce the data offer object.  The selection  event  is
                     sent  to  a  client immediately before receiving keyboard focus and when a new selection is
                     set while the client has keyboard focus.  The data_offer is valid until a new data_offer or
                     NULL is received or until the client loses keyboard focus.  Switching surface with keyboard
                     focus within the same client doesn't mean a new selection will be sent.   The  client  must
                     destroy the previous selection data_offer, if any, upon receiving this event.

                     Parameters
                            id (WlDataOffer or None) -- selection data_offer object

   WlDataDeviceManager
       class pywayland.protocol.wayland.WlDataDeviceManager
              Data transfer interface

              The  WlDataDeviceManager  is  a  singleton global object that provides access to inter-client data
              transfer mechanisms such as copy-and-paste and drag-and-drop.  These  mechanisms  are  tied  to  a
              WlSeat and this interface lets a client get a WlDataDevice corresponding to a WlSeat.

              Depending on the version bound, the objects created from the bound WlDataDeviceManager object will
              have   different   requirements   for   functioning   properly.   See  WlDataSource.set_actions(),
              WlDataOffer.accept() and WlDataOffer.finish() for details.

              create_data_source() -> 'Proxy[WlDataSource]'

                     Request -- opcode 0 (attached to Resource instance)

                     Create a new data source

                     Create a new data source.

                     Returns
                            WlDataSource -- data source to create

              get_data_device(seat: 'WlSeat') -> 'Proxy[WlDataDevice]'

                     Request -- opcode 1 (attached to Resource instance)

                     Create a new data device

                     Create a new data device for a given seat.

                     Parameters
                            seat (WlSeat) -- seat associated with the data device

                     Returns
                            WlDataDevice -- data device to create

   WlDataOffer
       class pywayland.protocol.wayland.WlDataOffer
              Offer to transfer data

              A WlDataOffer represents a piece of data offered  for  transfer  by  another  client  (the  source
              client).   It is used by the copy-and-paste and drag-and-drop mechanisms.  The offer describes the
              different mime types that the data can be converted to and provides the mechanism for transferring
              the data directly from the source client.

              accept(serial: 'int', mime_type: 'str | None') -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Accept one of the offered mime types

                     Indicate that the client can accept the given mime type, or NULL for not accepted.

                     For objects of version 2 or older, this request is used by  the  client  to  give  feedback
                     whether  the  client  can  receive  the  given  mime type, or NULL if none is accepted; the
                     feedback does not determine whether the drag-and-drop operation succeeds or not.

                     For objects of version 3 or  newer,  this  request  determines  the  final  result  of  the
                     drag-and-drop  operation.  If  the  end  result  is  that  no mime types were accepted, the
                     drag-and-drop operation will be cancelled and the corresponding drag  source  will  receive
                     WlDataSource.cancelled().   Clients   may   still   use  this  event  in  conjunction  with
                     WlDataSource.action() for feedback.

                     Parametersserial (ArgumentType.Uint) -- serial number of the accept request

                            • mime_type (ArgumentType.String or None) -- mime type accepted by the client

              receive(mime_type: 'str', fd: 'int') -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Request that the data is transferred

                     To transfer the offered data, the client issues this request and indicates the mime type it
                     wants to receive.  The transfer happens  through  the  passed  file  descriptor  (typically
                     created  with  the  pipe  system call).  The source client writes the data in the mime type
                     representation requested and then closes the file descriptor.

                     The receiving client reads from the read end of the pipe until EOF and then closes its end,
                     at which point the transfer is complete.

                     This request may happen multiple times for different mime  types,  both  before  and  after
                     WlDataDevice.drop().  Drag-and-drop  destination  clients  may  preemptively  fetch data or
                     examine it more closely to determine acceptance.

                     Parametersmime_type (ArgumentType.String) -- mime type desired by receiver

                            • fd (ArgumentType.FileDescriptor) -- file descriptor for data transfer

              destroy() -> 'None'

                     Request -- opcode 2 (attached to Resource instance)

                     Destroy data offer

                     Destroy the data offer.

              finish() -> 'None'

                     Request -- opcode 3 (attached to Resource instance)

                     The offer will no longer be used

                     Notifies the compositor that the drag destination successfully finished  the  drag-and-drop
                     operation.

                     Upon  receiving  this  request, the compositor will emit WlDataSource.dnd_finished() on the
                     drag source client.

                     It is a client error to perform other requests than WlDataOffer.destroy() after  this  one.
                     It  is  also  an  error  to  perform  this  request  after a NULL mime type has been set in
                     WlDataOffer.accept() or no action was received through WlDataOffer.action().

                     If WlDataOffer.finish() request is  received  for  a  non  drag  and  drop  operation,  the
                     invalid_finish protocol error is raised.

              set_actions(dnd_actions: 'int', preferred_action: 'int') -> 'None'

                     Request -- opcode 4 (attached to Resource instance)

                     Set the available/preferred drag-and-drop actions

                     Sets the actions that the destination side client supports for this operation. This request
                     may  trigger  the  emission of WlDataSource.action() and WlDataOffer.action() events if the
                     compositor needs to change the selected action.

                     This request can be called multiple times throughout the drag-and-drop operation, typically
                     in response to WlDataDevice.enter() or WlDataDevice.motion() events.

                     This request determines the final result of the drag-and-drop operation. If the end  result
                     is that no action is accepted, the drag source will receive WlDataSource.cancelled().

                     The    dnd_actions    argument    must    contain    only    values    expressed   in   the
                     WlDataDeviceManager.dnd_actions() enum, and the preferred_action argument must only contain
                     one of those values set, otherwise it will result in a protocol error.

                     While managing an "ask" action, the destination drag-and-drop client  may  perform  further
                     WlDataOffer.receive()    requests,    and    is    expected    to    perform    one    last
                     WlDataOffer.set_actions() request with a preferred action other than "ask" (and  optionally
                     WlDataOffer.accept()) before requesting WlDataOffer.finish(), in order to convey the action
                     selected  by  the  user. If the preferred action is not in the WlDataOffer.source_actions()
                     mask, an error will be raised.

                     If the "ask" action is dismissed (e.g.  user  cancellation),  the  client  is  expected  to
                     perform WlDataOffer.destroy() right away.

                     This  request  can  only  be  made on drag-and-drop offers, a protocol error will be raised
                     otherwise.

                     Parametersdnd_actions (ArgumentType.Uint) -- actions supported by the destination client

                            • preferred_action (ArgumentType.Uint) -- action preferred by the destination client

              offer(mime_type: 'str') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Advertise offered mime type

                     Sent immediately after creating the WlDataOffer object.  One event per offered mime type.

                     Parameters
                            mime_type (ArgumentType.String) -- offered mime type

              source_actions(source_actions: 'int') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Notify the source-side available actions

                     This event indicates the actions offered by the data source. It will  be  sent  immediately
                     after  creating  the  WlDataOffer  object,  or  anytime the source side changes its offered
                     actions through WlDataSource.set_actions().

                     Parameters
                            source_actions (ArgumentType.Uint) -- actions offered by the data source

              action(dnd_action: 'int') -> 'None'

                     Event -- opcode 2 (attached to Proxy instance)

                     Notify the selected action

                     This  event  indicates  the  action  selected  by  the  compositor   after   matching   the
                     source/destination side actions. Only one action (or none) will be offered here.

                     This  event can be emitted multiple times during the drag-and-drop operation in response to
                     destination side action changes through WlDataOffer.set_actions().

                     This event will no longer be  emitted  after  WlDataDevice.drop()  happened  on  the  drag-
                     and-drop destination, the client must honor the last action received, or the last preferred
                     one set through WlDataOffer.set_actions() when handling an "ask" action.

                     Compositors  may also change the selected action on the fly, mainly in response to keyboard
                     modifier changes during the drag-and-drop operation.

                     The  most  recent  action  received  is  always  the  valid   one.   Prior   to   receiving
                     WlDataDevice.drop(),  the  chosen  action  may change (e.g. due to keyboard modifiers being
                     pressed). At the time of receiving WlDataDevice.drop() the drag-and-drop  destination  must
                     honor the last action received.

                     Action  changes  may  still  happen after WlDataDevice.drop(), especially on "ask" actions,
                     where the drag-and-drop destination may choose another action  afterwards.  Action  changes
                     happening  at  this stage are always the result of inter-client negotiation, the compositor
                     shall no longer be able to induce a different action.

                     Upon "ask" actions, it is expected  that  the  drag-and-drop  destination  may  potentially
                     choose  a  different  action  and/or  mime  type, based on WlDataOffer.source_actions() and
                     finally chosen by the user (e.g. popping up a menu with the available options).  The  final
                     WlDataOffer.set_actions()  and WlDataOffer.accept() requests must happen before the call to
                     WlDataOffer.finish().

                     Parameters
                            dnd_action (ArgumentType.Uint) -- action selected by the compositor

   WlDataSource
       class pywayland.protocol.wayland.WlDataSource
              Offer to transfer data

              The WlDataSource object is the source side of a WlDataOffer. It is created by the source client in
              a data transfer and provides a way to describe the offered data and a way to respond  to  requests
              to transfer the data.

              offer(mime_type: 'str') -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Add an offered mime type

                     This  request  adds  a  mime  type  to the set of mime types advertised to targets.  Can be
                     called several times to offer multiple types.

                     Parameters
                            mime_type (ArgumentType.String) -- mime type offered by the data source

              destroy() -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Destroy the data source

                     Destroy the data source.

              set_actions(dnd_actions: 'int') -> 'None'

                     Request -- opcode 2 (attached to Resource instance)

                     Set the available drag-and-drop actions

                     Sets the actions that the source side client supports for this operation. This request  may
                     trigger  WlDataSource.action()  and  WlDataOffer.action() events if the compositor needs to
                     change the selected action.

                     The   dnd_actions   argument    must    contain    only    values    expressed    in    the
                     WlDataDeviceManager.dnd_actions() enum, otherwise it will result in a protocol error.

                     This request must be made once only, and can only be made on sources used in drag-and-drop,
                     so  it  must  be  performed  before WlDataDevice.start_drag(). Attempting to use the source
                     other than for drag-and-drop will raise a protocol error.

                     Parameters
                            dnd_actions (ArgumentType.Uint) -- actions supported by the data source

              target(mime_type: 'str | None') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     A target accepts an offered mime type

                     Sent when a target accepts pointer_focus or motion events.  If a target does not accept any
                     of the offered types, type is NULL.

                     Used for feedback during drag-and-drop.

                     Parameters
                            mime_type (ArgumentType.String or None) -- mime type accepted by the target

              send(mime_type: 'str', fd: 'int') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Send the data

                     Request for data from the client.  Send the data as the specified mime type over the passed
                     file descriptor, then close it.

                     Parametersmime_type (ArgumentType.String) -- mime type for the data

                            • fd (ArgumentType.FileDescriptor) -- file descriptor for the data

              cancelled() -> 'None'

                     Event -- opcode 2 (attached to Proxy instance)

                     Selection was cancelled

                     This data source is no longer valid. There are several reasons why this could happen:

                     • The data source has been replaced by another data source.

                     • The drag-and-drop operation was performed, but the drop destination did not accept any of
                       the mime types offered through WlDataSource.target().

                     • The drag-and-drop operation was performed, but the drop destination did not select any of
                       the actions present in the mask offered through WlDataSource.action().

                     • The drag-and-drop operation was performed but didn't happen over a surface.

                     • The compositor cancelled the drag-and-drop operation (e.g. compositor dependent  timeouts
                       to avoid stale drag-and-drop transfers).

                     The client should clean up and destroy this data source.

                     For  objects  of  version  2 or older, WlDataSource.cancelled() will only be emitted if the
                     data source was replaced by another data source.

              dnd_drop_performed() -> 'None'

                     Event -- opcode 3 (attached to Proxy instance)

                     The drag-and-drop operation physically finished

                     The  user  performed  the  drop  action.  This  event   does   not   indicate   acceptance,
                     WlDataSource.cancelled()  may  still be emitted afterwards if the drop destination does not
                     accept any mime type.

                     However, this event  might  however  not  be  received  if  the  compositor  cancelled  the
                     drag-and-drop operation before this event could happen.

                     Note that the data_source may still be used in the future and should not be destroyed here.

              dnd_finished() -> 'None'

                     Event -- opcode 4 (attached to Proxy instance)

                     The drag-and-drop operation concluded

                     The  drop  destination  finished interoperating with this data source, so the client is now
                     free to destroy this data source and free all associated data.

                     If the action used to perform the operation was "move",  the  source  can  now  delete  the
                     transferred data.

              action(dnd_action: 'int') -> 'None'

                     Event -- opcode 5 (attached to Proxy instance)

                     Notify the selected action

                     This   event   indicates   the  action  selected  by  the  compositor  after  matching  the
                     source/destination side actions. Only one action (or none) will be offered here.

                     This event can be emitted multiple times during  the  drag-and-drop  operation,  mainly  in
                     response  to  destination  side  changes through WlDataOffer.set_actions(), and as the data
                     device enters/leaves surfaces.

                     It is only possible to receive this event after  WlDataSource.dnd_drop_performed()  if  the
                     drag-and-drop   operation   ended   in   an   "ask"   action,   in  which  case  the  final
                     WlDataSource.action() event will happen immediately before WlDataSource.dnd_finished().

                     Compositors may also change the selected action on the fly, mainly in response to  keyboard
                     modifier changes during the drag-and-drop operation.

                     The  most  recent  action  received  is  always the valid one. The chosen action may change
                     alongside negotiation (e.g. an "ask" action can turn  into  a  "move"  operation),  so  the
                     effects of the final action must always be applied in WlDataOffer.dnd_finished().

                     Clients  can  trigger  cursor  surface changes from this point, so they reflect the current
                     action.

                     Parameters
                            dnd_action (ArgumentType.Uint) -- action selected by the compositor

   WlDisplay
       class pywayland.protocol.wayland.WlDisplay
              Core global object

              The core global object.  This is a special singleton object.  It  is  used  for  internal  Wayland
              protocol features.

              sync() -> 'Proxy[WlCallback]'

                     Request -- opcode 0 (attached to Resource instance)

                     Asynchronous roundtrip

                     The  sync  request  asks  the  server  to  emit the 'done' event on the returned WlCallback
                     object.  Since requests are handled in-order and events are delivered in-order, this can be
                     used as a barrier to ensure all previous  requests  and  the  resulting  events  have  been
                     handled.

                     The  object returned by this request will be destroyed by the compositor after the callback
                     is fired and as such the client must not attempt to use it after that point.

                     The callback_data passed in the callback is undefined and should be ignored.

                     Returns
                            WlCallback -- callback object for the sync request

              get_registry() -> 'Proxy[WlRegistry]'

                     Request -- opcode 1 (attached to Resource instance)

                     Get global registry object

                     This request creates a registry object that allows the client to list and bind  the  global
                     objects available from the compositor.

                     It  should  be  noted that the server side resources consumed in response to a get_registry
                     request can only be released when the client disconnects, not when the client side proxy is
                     destroyed. Therefore, clients should invoke get_registry as  infrequently  as  possible  to
                     avoid wasting memory.

                     Returns
                            WlRegistry -- global registry object

              error(object_id: 'Any', code: 'int', message: 'str') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Fatal error event

                     The  error  event  is  sent  out  when  a  fatal (non-recoverable) error has occurred.  The
                     object_id argument is the object where the error occurred, most  often  in  response  to  a
                     request  to  that  object.   The  code  identifies  the  error and is defined by the object
                     interface.  As such, each interface defines its own set of error codes.  The message  is  a
                     brief description of the error, for (debugging) convenience.

                     Parametersobject_id (ArgumentType.Object) -- object where the error occurred

                            • code (ArgumentType.Uint) -- error code

                            • message (ArgumentType.String) -- error description

              delete_id(id: 'int') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Acknowledge object id deletion

                     This  event  is used internally by the object ID management logic. When a client deletes an
                     object that it had created, the server will send this event to acknowledge that it has seen
                     the delete request. When the client receives this event, it will know that  it  can  safely
                     reuse the object ID.

                     Parameters
                            id (ArgumentType.Uint) -- deleted object ID

   WlKeyboard
       class pywayland.protocol.wayland.WlKeyboard
              Keyboard input device

              The WlKeyboard interface represents one or more keyboards associated with a seat.

              Each WlKeyboard has the following logical state:

              • an active surface (possibly null),

              • the keys currently logically down,

              • the active modifiers,

              • the active group.

              By  default,  the  active surface is null, the keys currently logically down are empty, the active
              modifiers and the active group are 0.

              release() -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Release the keyboard object

              keymap(format: 'int', fd: 'int', size: 'int') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Keyboard mapping

                     This event provides a file descriptor to the client which can be memory-mapped in read-only
                     mode to provide a keyboard mapping description.

                     From version 7 onwards, the fd must  be  mapped  with  MAP_PRIVATE  by  the  recipient,  as
                     MAP_SHARED may fail.

                     Parametersformat (ArgumentType.Uint) -- keymap format

                            • fd (ArgumentType.FileDescriptor) -- keymap file descriptor

                            • size (ArgumentType.Uint) -- keymap size, in bytes

              enter(serial: 'int', surface: 'WlSurface', keys: 'list') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Enter event

                     Notification that this seat's keyboard focus is on a certain surface.

                     The compositor must send the WlKeyboard.modifiers() event after this event.

                     In the WlKeyboard logical state, this event sets the active surface to the surface argument
                     and the keys currently logically down to the keys in the keys argument. The compositor must
                     not send this event if the WlKeyboard already had an active surface immediately before this
                     event.

                     Parametersserial (ArgumentType.Uint) -- serial number of the enter event

                            • surface (WlSurface) -- surface gaining keyboard focus

                            • keys (ArgumentType.Array) -- the keys currently logically down

              leave(serial: 'int', surface: 'WlSurface') -> 'None'

                     Event -- opcode 2 (attached to Proxy instance)

                     Leave event

                     Notification that this seat's keyboard focus is no longer on a certain surface.

                     The leave notification is sent before the enter notification for the new focus.

                     In  the  WlKeyboard  logical  state,  this  event  resets all values to their defaults. The
                     compositor must not send this event if the active surface of the WlKeyboard was  not  equal
                     to the surface argument immediately before this event.

                     Parametersserial (ArgumentType.Uint) -- serial number of the leave event

                            • surface (WlSurface) -- surface that lost keyboard focus

              key(serial: 'int', time: 'int', key: 'int', state: 'int') -> 'None'

                     Event -- opcode 3 (attached to Proxy instance)

                     Key event

                     A  key  was  pressed  or  released.  The  time  argument  is  a  timestamp with millisecond
                     granularity, with an undefined base.

                     The key is a platform-specific key code that can  be  interpreted  by  feeding  it  to  the
                     keyboard mapping (see the keymap event).

                     If  this  event  produces  a change in modifiers, then the resulting WlKeyboard.modifiers()
                     event must be sent after this event.

                     In the WlKeyboard logical state, this event adds the key to the  keys  currently  logically
                     down  (if  the  state  argument  is  pressed)  or  removes  the key from the keys currently
                     logically down (if the state argument is released). The compositor must not send this event
                     if the WlKeyboard did not have  an  active  surface  immediately  before  this  event.  The
                     compositor  must  not  send this event if state is pressed (resp. released) and the key was
                     already logically down (resp. was not logically down) immediately before this event.

                     Parametersserial (ArgumentType.Uint) -- serial number of the key event

                            • time (ArgumentType.Uint) -- timestamp with millisecond granularity

                            • key (ArgumentType.Uint) -- key that produced the event

                            • state (ArgumentType.Uint) -- physical state of the key

              modifiers(serial: 'int', mods_depressed: 'int', mods_latched: 'int', mods_locked: 'int', group:
              'int') -> 'None'

                     Event -- opcode 4 (attached to Proxy instance)

                     Modifier and group state

                     Notifies clients that the modifier and/or group state has changed, and it should update its
                     local state.

                     The compositor may send this event without a surface of the client having  keyboard  focus,
                     for  example to tie modifier information to pointer focus instead. If a modifier event with
                     pressed modifiers is sent without a prior enter event, the client can assume  the  modifier
                     state  is  valid until it receives the next WlKeyboard.modifiers() event. In order to reset
                     the modifier state again, the compositor can send a WlKeyboard.modifiers()  event  with  no
                     pressed modifiers.

                     In the WlKeyboard logical state, this event updates the modifiers and group.

                     Parametersserial (ArgumentType.Uint) -- serial number of the modifiers event

                            • mods_depressed (ArgumentType.Uint) -- depressed modifiers

                            • mods_latched (ArgumentType.Uint) -- latched modifiers

                            • mods_locked (ArgumentType.Uint) -- locked modifiers

                            • group (ArgumentType.Uint) -- keyboard layout

              repeat_info(rate: 'int', delay: 'int') -> 'None'

                     Event -- opcode 5 (attached to Proxy instance)

                     Repeat rate and delay

                     Informs the client about the keyboard's repeat rate and delay.

                     This  event is sent as soon as the WlKeyboard object has been created, and is guaranteed to
                     be received by the client before any key press event.

                     Negative values for either rate or delay are illegal. A  rate  of  zero  will  disable  any
                     repeating (regardless of the value of delay).

                     This  event  can  be sent later on as well with a new value if necessary, so clients should
                     continue listening for the event past the creation of WlKeyboard.

                     Parametersrate (ArgumentType.Int) -- the rate of repeating keys in characters per second

                            • delay (ArgumentType.Int) -- delay in milliseconds since key down  until  repeating
                              starts

   WlOutput
       class pywayland.protocol.wayland.WlOutput
              Compositor output region

              An  output  describes  part  of  the compositor geometry.  The compositor works in the 'compositor
              coordinate system' and an output corresponds to a rectangular area in that space that is  actually
              visible.   This  typically  corresponds  to  a monitor that displays part of the compositor space.
              This object is published as global during start up, or when a monitor is hotplugged.

              release() -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Release the output object

                     Using this request a client can tell the server that it is not  going  to  use  the  output
                     object anymore.

              geometry(x: 'int', y: 'int', physical_width: 'int', physical_height: 'int', subpixel: 'int', make:
              'str', model: 'str', transform: 'int') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Properties of the output

                     The  geometry  event  describes  geometric properties of the output. The event is sent when
                     binding to the output object and whenever any of the properties change.

                     The physical size can be set to zero if it doesn't make sense for  this  output  (e.g.  for
                     projectors or virtual outputs).

                     The geometry event will be followed by a done event (starting from version 2).

                     Clients   should   use  WlSurface.preferred_buffer_transform()  instead  of  the  transform
                     advertised by this event to find the preferred buffer transform to use for a surface.

                     Note:  WlOutput  only  advertises  partial  information  about  the  output  position   and
                     identification.  Some  compositors,  for  instance  those  not implementing a desktop-style
                     output layout or those exposing virtual outputs, might fake this  information.  Instead  of
                     using  x  and  y, clients should use xdg_output.logical_position. Instead of using make and
                     model, clients should use name and description.

                     Parametersx (ArgumentType.Int) -- x position within the global compositor space

                            • y (ArgumentType.Int) -- y position within the global compositor space

                            • physical_width (ArgumentType.Int) -- width in millimeters of the output

                            • physical_height (ArgumentType.Int) -- height in millimeters of the output

                            • subpixel (ArgumentType.Int) -- subpixel orientation of the output

                            • make (ArgumentType.String) -- textual description of the manufacturer

                            • model (ArgumentType.String) -- textual description of the model

                            • transform  (ArgumentType.Int)  --  additional  transformation  applied  to  buffer
                              contents during presentation

              mode(flags: 'int', width: 'int', height: 'int', refresh: 'int') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Advertise available modes for the output

                     The mode event describes an available mode for the output.

                     The  event is sent when binding to the output object and there will always be one mode, the
                     current mode.  The event is sent again if an output changes mode, for the mode that is  now
                     current.   In  other words, the current mode is always the last mode that was received with
                     the current flag set.

                     Non-current modes are deprecated. A compositor can decide to  only  advertise  the  current
                     mode and never send other modes. Clients should not rely on non-current modes.

                     The  size  of  a mode is given in physical hardware units of the output device. This is not
                     necessarily the same as the output size in the global compositor space. For  instance,  the
                     output  may  be  scaled,  as described in WlOutput.scale(), or transformed, as described in
                     WlOutput.transform(). Clients willing to retrieve the output size in the global  compositor
                     space should use xdg_output.logical_size instead.

                     The vertical refresh rate can be set to zero if it doesn't make sense for this output (e.g.
                     for virtual outputs).

                     The mode event will be followed by a done event (starting from version 2).

                     Clients  should  not  use the refresh rate to schedule frames. Instead, they should use the
                     WlSurface.frame() event or the presentation-time protocol.

                     Note: this information is not always meaningful for all outputs. Some compositors, such  as
                     those exposing virtual outputs, might fake the refresh rate or the size.

                     Parametersflags (ArgumentType.Uint) -- bitfield of mode flags

                            • width (ArgumentType.Int) -- width of the mode in hardware units

                            • height (ArgumentType.Int) -- height of the mode in hardware units

                            • refresh (ArgumentType.Int) -- vertical refresh rate in mHz

              done() -> 'None'

                     Event -- opcode 2 (attached to Proxy instance)

                     Sent all information about output

                     This  event  is  sent after all other properties have been sent after binding to the output
                     object and after any other property changes done after that. This  allows  changes  to  the
                     output properties to be seen as atomic, even if they happen via multiple events.

              scale(factor: 'int') -> 'None'

                     Event -- opcode 3 (attached to Proxy instance)

                     Output scaling properties

                     This  event contains scaling geometry information that is not in the geometry event. It may
                     be sent after binding the  output  object  or  if  the  output  scale  changes  later.  The
                     compositor  will  emit  a non-zero, positive value for scale. If it is not sent, the client
                     should assume a scale of 1.

                     A scale larger than 1 means that the compositor will automatically scale surface buffers by
                     this amount  when  rendering.  This  is  used  for  very  high  resolution  displays  where
                     applications rendering at the native resolution would be too small to be legible.

                     Clients  should  use  WlSurface.preferred_buffer_scale()  instead of this event to find the
                     preferred buffer scale to use for a surface.

                     The scale event will be followed by a done event.

                     Parameters
                            factor (ArgumentType.Int) -- scaling factor of output

              name(name: 'str') -> 'None'

                     Event -- opcode 4 (attached to Proxy instance)

                     Name of this output

                     Many compositors will assign user-friendly names to their outputs, show them to  the  user,
                     allow the user to refer to an output, etc. The client may wish to know this name as well to
                     offer the user similar behaviors.

                     The  name  is  a  UTF-8  string  with no convention defined for its contents.  Each name is
                     unique among all WlOutput globals. The name  is  only  guaranteed  to  be  unique  for  the
                     compositor instance.

                     The  same  output  name is used for all clients for a given WlOutput global. Thus, the name
                     can be shared across processes to refer to a specific WlOutput global.

                     The name is not guaranteed to be  persistent  across  sessions,  thus  cannot  be  used  to
                     reliably identify an output in e.g. configuration files.

                     Examples of names include 'HDMI-A-1', 'WL-1', 'X11-1', etc. However, do not assume that the
                     name is a reflection of an underlying DRM connector, X11 connection, etc.

                     The  name  event  is sent after binding the output object. This event is only sent once per
                     output object, and the name does not change over the lifetime of the WlOutput global.

                     Compositors may re-use the same output  name  if  the  WlOutput  global  is  destroyed  and
                     re-created later. Compositors should avoid re- using the same name if possible.

                     The name event will be followed by a done event.

                     Parameters
                            name (ArgumentType.String) -- output name

              description(description: 'str') -> 'None'

                     Event -- opcode 5 (attached to Proxy instance)

                     Human-readable description of this output

                     Many  compositors  can produce human-readable descriptions of their outputs. The client may
                     wish to know this description as well, e.g. for output selection purposes.

                     The description is a UTF-8  string  with  no  convention  defined  for  its  contents.  The
                     description  is  not  guaranteed  to  be  unique among all WlOutput globals. Examples might
                     include 'Foocorp 11" Display' or 'Virtual X11 output via :1'.

                     The description event is sent after binding the output object and whenever the  description
                     changes. The description is optional, and may not be sent at all.

                     The description event will be followed by a done event.

                     Parameters
                            description (ArgumentType.String) -- output description

   WlPointer
       class pywayland.protocol.wayland.WlPointer
              Pointer input device

              The  WlPointer  interface  represents  one  or more input devices, such as mice, which control the
              pointer location and pointer_focus of a seat.

              The WlPointer interface generates motion, enter and leave events for the surfaces that the pointer
              is located over, and button and axis events for button presses, button releases and scrolling.

              set_cursor(serial: 'int', surface: 'WlSurface | None', hotspot_x: 'int', hotspot_y: 'int') ->
              'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Set the pointer surface

                     Set the pointer surface, i.e., the surface that contains the pointer image  (cursor).  This
                     request gives the surface the role of a cursor. If the surface already has another role, it
                     raises a protocol error.

                     The  cursor  actually  changes  only  if  the  pointer  focus for this device is one of the
                     requesting client's surfaces or the surface parameter is the current  pointer  surface.  If
                     there  was a previous surface set with this request it is replaced. If surface is NULL, the
                     pointer image is hidden.

                     The parameters hotspot_x and hotspot_y define the position of the pointer surface  relative
                     to  the pointer location. Its top-left corner is always at (x, y) - (hotspot_x, hotspot_y),
                     where (x, y) are the coordinates of the pointer location, in surface-local coordinates.

                     On WlSurface.offset()  requests  to  the  pointer  surface,  hotspot_x  and  hotspot_y  are
                     decremented  by the x and y parameters passed to the request. The offset must be applied by
                     WlSurface.commit() as usual.

                     The hotspot can also be updated by passing  the  currently  set  pointer  surface  to  this
                     request with new values for hotspot_x and hotspot_y.

                     The  input  region is ignored for wl_surfaces with the role of a cursor.  When the use as a
                     cursor ends, the WlSurface is unmapped.

                     The serial parameter must match the latest WlPointer.enter()  serial  number  sent  to  the
                     client. Otherwise the request will be ignored.

                     Parametersserial (ArgumentType.Uint) -- serial number of the enter event

                            • surface (WlSurface or None) -- pointer surface

                            • hotspot_x (ArgumentType.Int) -- surface-local x coordinate

                            • hotspot_y (ArgumentType.Int) -- surface-local y coordinate

              release() -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Release the pointer object

                     Using  this  request  a  client can tell the server that it is not going to use the pointer
                     object anymore.

                     This  request  destroys  the   pointer   proxy   object,   so   clients   must   not   call
                     wl_pointer_destroy() after using this request.

              enter(serial: 'int', surface: 'WlSurface', surface_x: 'float', surface_y: 'float') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Enter event

                     Notification that this seat's pointer is focused on a certain surface.

                     When  a  seat's  focus enters a surface, the pointer image is undefined and a client should
                     respond to this event by setting an appropriate pointer image with the set_cursor request.

                     Parametersserial (ArgumentType.Uint) -- serial number of the enter event

                            • surface (WlSurface) -- surface entered by the pointer

                            • surface_x (ArgumentType.Fixed) -- surface-local x coordinate

                            • surface_y (ArgumentType.Fixed) -- surface-local y coordinate

              leave(serial: 'int', surface: 'WlSurface') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Leave event

                     Notification that this seat's pointer is no longer focused on a certain surface.

                     The leave notification is sent before the enter notification for the new focus.

                     Parametersserial (ArgumentType.Uint) -- serial number of the leave event

                            • surface (WlSurface) -- surface left by the pointer

              motion(time: 'int', surface_x: 'float', surface_y: 'float') -> 'None'

                     Event -- opcode 2 (attached to Proxy instance)

                     Pointer motion event

                     Notification of pointer location change. The arguments  surface_x  and  surface_y  are  the
                     location relative to the focused surface.

                     Parameterstime (ArgumentType.Uint) -- timestamp with millisecond granularity

                            • surface_x (ArgumentType.Fixed) -- surface-local x coordinate

                            • surface_y (ArgumentType.Fixed) -- surface-local y coordinate

              button(serial: 'int', time: 'int', button: 'int', state: 'int') -> 'None'

                     Event -- opcode 3 (attached to Proxy instance)

                     Pointer button event

                     Mouse button click and release notifications.

                     The location of the click is given by the last motion or enter event.  The time argument is
                     a timestamp with millisecond granularity, with an undefined base.

                     The  button  is  a  button  code as defined in the Linux kernel's linux/input-event-codes.h
                     header file, e.g. BTN_LEFT.

                     Any 16-bit button code value is reserved for future additions to the  kernel's  event  code
                     list. All other button codes above 0xFFFF are currently undefined but may be used in future
                     versions of this protocol.

                     Parametersserial (ArgumentType.Uint) -- serial number of the button event

                            • time (ArgumentType.Uint) -- timestamp with millisecond granularity

                            • button (ArgumentType.Uint) -- button that produced the event

                            • state (ArgumentType.Uint) -- physical state of the button

              axis(time: 'int', axis: 'int', value: 'float') -> 'None'

                     Event -- opcode 4 (attached to Proxy instance)

                     Axis event

                     Scroll and other axis notifications.

                     For  scroll events (vertical and horizontal scroll axes), the value parameter is the length
                     of a vector along the specified axis in a coordinate space identical  to  those  of  motion
                     events, representing a relative movement along the specified axis.

                     For  devices  that  support  movements  non-parallel  to  axes multiple axis events will be
                     emitted.

                     When applicable, for example for touch pads, the server can choose to  emit  scroll  events
                     where the motion vector is equivalent to a motion event vector.

                     When applicable, a client can transform its content relative to the scroll distance.

                     Parameterstime (ArgumentType.Uint) -- timestamp with millisecond granularity

                            • axis (ArgumentType.Uint) -- axis type

                            • value (ArgumentType.Fixed) -- length of vector in surface-local coordinate space

              frame() -> 'None'

                     Event -- opcode 5 (attached to Proxy instance)

                     End of a pointer event sequence

                     Indicates  the  end of a set of events that logically belong together. A client is expected
                     to accumulate the data in all events within the frame before proceeding.

                     All WlPointer events before  a  WlPointer.frame()  event  belong  logically  together.  For
                     example,   in   a   diagonal   scroll   motion   the   compositor  will  send  an  optional
                     WlPointer.axis_source() event, two WlPointer.axis() events (horizontal  and  vertical)  and
                     finally  a  WlPointer.frame()  event.  The  client  may use this information to calculate a
                     diagonal vector for scrolling.

                     When multiple WlPointer.axis() events occur within the same frame, the motion vector is the
                     combined motion of all events. When a WlPointer.axis() and  a  WlPointer.axis_stop()  event
                     occur  within the same frame, this indicates that axis movement in one axis has stopped but
                     continues in the other axis. When multiple WlPointer.axis_stop() events  occur  within  the
                     same frame, this indicates that these axes stopped in the same instance.

                     A  WlPointer.frame()  event  is  sent for every logical event group, even if the group only
                     contains a single WlPointer event. Specifically, a  client  may  get  a  sequence:  motion,
                     frame, button, frame, axis, frame, axis_stop, frame.

                     The  WlPointer.enter()  and  WlPointer.leave()  events  are logical events generated by the
                     compositor and not the hardware. These events are also grouped by a WlPointer.frame(). When
                     a  pointer  moves  from  one  surface  to  another,   a   compositor   should   group   the
                     WlPointer.leave()  event within the same WlPointer.frame(). However, a client must not rely
                     on  WlPointer.leave()  and  WlPointer.enter()  being   in   the   same   WlPointer.frame().
                     Compositor-specific  policies may require the WlPointer.leave() and WlPointer.enter() event
                     being split across multiple WlPointer.frame() groups.

              axis_source(axis_source: 'int') -> 'None'

                     Event -- opcode 6 (attached to Proxy instance)

                     Axis source event

                     Source information for scroll and other axes.

                     This event does not occur on its own. It is  sent  before  a  WlPointer.frame()  event  and
                     carries the source information for all events within that frame.

                     The    source    specifies   how   this   event   was   generated.   If   the   source   is
                     WlPointer.axis_source().finger, a WlPointer.axis_stop() event will be sent  when  the  user
                     lifts the finger off the device.

                     If  the  source  is  WlPointer.axis_source().wheel,  WlPointer.axis_source().wheel_tilt  or
                     WlPointer.axis_source().continuous, a WlPointer.axis_stop() event may or may not  be  sent.
                     Whether  a  compositor sends an axis_stop event for these sources is hardware- specific and
                     implementation-dependent; clients must not rely on receiving an axis_stop event  for  these
                     scroll  sources and should treat scroll sequences from these scroll sources as unterminated
                     by default.

                     This event is optional. If the source is unknown for a particular axis event  sequence,  no
                     event is sent. Only one WlPointer.axis_source() event is permitted per frame.

                     The order of WlPointer.axis_discrete() and WlPointer.axis_source() is not guaranteed.

                     Parameters
                            axis_source (ArgumentType.Uint) -- source of the axis event

              axis_stop(time: 'int', axis: 'int') -> 'None'

                     Event -- opcode 7 (attached to Proxy instance)

                     Axis stop event

                     Stop notification for scroll and other axes.

                     For  some  WlPointer.axis_source() types, a WlPointer.axis_stop() event is sent to notify a
                     client that the axis sequence has terminated. This enables the client to implement  kinetic
                     scrolling. See the WlPointer.axis_source() documentation for information on when this event
                     may be generated.

                     Any WlPointer.axis() events with the same axis_source after this event should be considered
                     as the start of a new axis motion.

                     The  timestamp  is  to  be  interpreted  identical to the timestamp in the WlPointer.axis()
                     event. The timestamp value may be the same as a preceding WlPointer.axis() event.

                     Parameterstime (ArgumentType.Uint) -- timestamp with millisecond granularity

                            • axis (ArgumentType.Uint) -- the axis stopped with this event

              axis_discrete(axis: 'int', discrete: 'int') -> 'None'

                     Event -- opcode 8 (attached to Proxy instance)

                     Axis click event

                     Discrete step information for scroll and other axes.

                     This event carries the axis value of the WlPointer.axis() event  in  discrete  steps  (e.g.
                     mouse wheel clicks).

                     This  event  is  deprecated  with  WlPointer  version 8 - this event is not sent to clients
                     supporting version 8 or later.

                     This event does not occur on its own, it is coupled  with  a  WlPointer.axis()  event  that
                     represents  this  axis  value  on  a  continuous  scale.  The protocol guarantees that each
                     axis_discrete event is always followed by exactly one axis event with the same axis  number
                     within  the same WlPointer.frame(). Note that the protocol allows for other events to occur
                     between the axis_discrete and its coupled axis event, including other axis_discrete or axis
                     events. A WlPointer.frame() must not contain more than one  axis_discrete  event  per  axis
                     type.

                     This event is optional; continuous scrolling devices like two-finger scrolling on touchpads
                     do not have discrete steps and do not generate this event.

                     The  discrete  value  carries  the directional information. e.g. a value of -2 is two steps
                     towards the negative direction of this axis.

                     The axis number is identical to the axis number in the associated axis event.

                     The order of WlPointer.axis_discrete() and WlPointer.axis_source() is not guaranteed.

                     Parametersaxis (ArgumentType.Uint) -- axis type

                            • discrete (ArgumentType.Int) -- number of steps

              axis_value120(axis: 'int', value120: 'int') -> 'None'

                     Event -- opcode 9 (attached to Proxy instance)

                     Axis high-resolution scroll event

                     Discrete high-resolution scroll information.

                     This event carries high-resolution wheel scroll information,  with  each  multiple  of  120
                     representing one logical scroll step (a wheel detent).  For example, an axis_value120 of 30
                     is  one  quarter of a logical scroll step in the positive direction, a value120 of -240 are
                     two logical scroll steps in the negative direction within the same hardware event.  Clients
                     that rely on discrete scrolling should accumulate the value120 to multiples of  120  before
                     processing the event.

                     The value120 must not be zero.

                     This  event  replaces  the  WlPointer.axis_discrete() event in clients supporting WlPointer
                     version 8 or later.

                     Where a WlPointer.axis_source() event occurs in the same WlPointer.frame(), the axis source
                     applies to this event.

                     The order of WlPointer.axis_value120 and WlPointer.axis_source() is not guaranteed.

                     Parametersaxis (ArgumentType.Uint) -- axis type

                            • value120 (ArgumentType.Int) -- scroll distance as fraction of 120

              axis_relative_direction(axis: 'int', direction: 'int') -> 'None'

                     Event -- opcode 10 (attached to Proxy instance)

                     Axis relative physical direction event

                     Relative directional information of the entity causing the axis motion.

                     For a WlPointer.axis() event, the WlPointer.axis_relative_direction() event  specifies  the
                     movement  direction  of  the entity causing the WlPointer.axis() event. For example: - if a
                     user's fingers on a touchpad move down and this   causes a WlPointer.axis() vertical_scroll
                     down event, the physical   direction is 'identical' - if a user's  fingers  on  a  touchpad
                     move down and this causes a   WlPointer.axis() vertical_scroll up scroll up event ('natural
                     scrolling'), the physical direction is 'inverted'.

                     A  client  may  use  this  information to adjust scroll motion of components. Specifically,
                     enabling natural scrolling causes the content to change direction compared  to  traditional
                     scrolling.  Some  widgets  like  volume  control  sliders should usually match the physical
                     direction regardless of whether natural scrolling is active. This event enables clients  to
                     match the scroll direction of a widget to the physical direction.

                     This  event  does  not  occur  on its own, it is coupled with a WlPointer.axis() event that
                     represents this axis value. The protocol guarantees that each axis_relative_direction event
                     is always followed by exactly one axis event with the same  axis  number  within  the  same
                     WlPointer.frame().  Note  that  the  protocol  allows for other events to occur between the
                     axis_relative_direction and its coupled axis event.

                     The axis number is identical to the axis number in the associated axis event.

                     The   order   of   WlPointer.axis_relative_direction(),    WlPointer.axis_discrete()    and
                     WlPointer.axis_source() is not guaranteed.

                     Parametersaxis (ArgumentType.Uint) -- axis type

                            • direction (ArgumentType.Uint) -- physical direction relative to axis motion

   WlRegion
       class pywayland.protocol.wayland.WlRegion
              Region interface

              A region object describes an area.

              Region objects are used to describe the opaque and input regions of a surface.

              destroy() -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Destroy region

                     Destroy the region.  This will invalidate the object ID.

              add(x: 'int', y: 'int', width: 'int', height: 'int') -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Add rectangle to region

                     Add the specified rectangle to the region.

                     Parametersx (ArgumentType.Int) -- region-local x coordinate

                            • y (ArgumentType.Int) -- region-local y coordinate

                            • width (ArgumentType.Int) -- rectangle width

                            • height (ArgumentType.Int) -- rectangle height

              subtract(x: 'int', y: 'int', width: 'int', height: 'int') -> 'None'

                     Request -- opcode 2 (attached to Resource instance)

                     Subtract rectangle from region

                     Subtract the specified rectangle from the region.

                     Parametersx (ArgumentType.Int) -- region-local x coordinate

                            • y (ArgumentType.Int) -- region-local y coordinate

                            • width (ArgumentType.Int) -- rectangle width

                            • height (ArgumentType.Int) -- rectangle height

   WlRegistry
       class pywayland.protocol.wayland.WlRegistry
              Global registry object

              The  singleton  global  registry  object.   The  server  has  a  number of global objects that are
              available to all clients.  These objects typically represent an actual object in the  server  (for
              example, an input device) or they are singleton objects that provide extension functionality.

              When  a  client  creates  a registry object, the registry object will emit a global event for each
              global currently in the registry.  Globals come and go as a result of device or monitor  hotplugs,
              reconfiguration or other events, and the registry will send out global and global_remove events to
              keep  the client up to date with the changes.  To mark the end of the initial burst of events, the
              client can use the WlDisplay.sync() request immediately after calling WlDisplay.get_registry().

              A client can bind to a global object by using the bind request.  This creates a client-side handle
              that lets the object emit events to the client and lets the client invoke requests on the object.

              bind(name: 'int', interface: 'type[T]', version: 'int') -> 'Proxy[T]'

                     Request -- opcode 0 (attached to Resource instance)

                     Bind an object to the display

                     Binds a new,  client-created  object  to  the  server  using  the  specified  name  as  the
                     identifier.

                     Parametersname (ArgumentType.Uint) -- unique numeric name of the object

                            • interface (string) -- Interface name

                            • version (int) -- Interface version

                     Returns
                            pywayland.client.proxy.Proxy of specified Interface -- bounded object

              global_(name: 'int', interface: 'str', version: 'int') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Announce global object

                     Notify the client of global objects.

                     The  event  notifies  the client that a global object with the given name is now available,
                     and it implements the given version of the given interface.

                     Parametersname (ArgumentType.Uint) -- numeric name of the global object

                            • interface (ArgumentType.String) -- interface implemented by the object

                            • version (ArgumentType.Uint) -- interface version

              global_remove(name: 'int') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Announce removal of global object

                     Notify the client of removed global objects.

                     This event notifies the client that the global identified by name is no  longer  available.
                     If  the  client  bound  to the global using the bind request, the client should now destroy
                     that object.

                     The object remains valid and requests to the  object  will  be  ignored  until  the  client
                     destroys it, to avoid races between the global going away and a client sending a request to
                     it.

                     Parameters
                            name (ArgumentType.Uint) -- numeric name of the global object

   WlSeat
       class pywayland.protocol.wayland.WlSeat
              Group of input devices

              A  seat  is  a group of keyboards, pointer and touch devices. This object is published as a global
              during start up, or when such a device is hot  plugged.   A  seat  typically  has  a  pointer  and
              maintains a keyboard focus and a pointer focus.

              get_pointer() -> 'Proxy[WlPointer]'

                     Request -- opcode 0 (attached to Resource instance)

                     Return pointer object

                     The ID provided will be initialized to the WlPointer interface for this seat.

                     This  request  only  takes  effect  if  the seat has the pointer capability, or has had the
                     pointer capability in the past. It is a protocol violation to issue this request on a  seat
                     that  has  never  had  the pointer capability. The missing_capability error will be sent in
                     this case.

                     Returns
                            WlPointer -- seat pointer

              get_keyboard() -> 'Proxy[WlKeyboard]'

                     Request -- opcode 1 (attached to Resource instance)

                     Return keyboard object

                     The ID provided will be initialized to the WlKeyboard interface for this seat.

                     This request only takes effect if the seat has the keyboard  capability,  or  has  had  the
                     keyboard capability in the past. It is a protocol violation to issue this request on a seat
                     that  has  never  had the keyboard capability. The missing_capability error will be sent in
                     this case.

                     Returns
                            WlKeyboard -- seat keyboard

              get_touch() -> 'Proxy[WlTouch]'

                     Request -- opcode 2 (attached to Resource instance)

                     Return touch object

                     The ID provided will be initialized to the WlTouch interface for this seat.

                     This request only takes effect if the seat has the touch capability, or has had  the  touch
                     capability in the past. It is a protocol violation to issue this request on a seat that has
                     never had the touch capability.  The missing_capability error will be sent in this case.

                     Returns
                            WlTouch -- seat touch interface

              release() -> 'None'

                     Request -- opcode 3 (attached to Resource instance)

                     Release the seat object

                     Using this request a client can tell the server that it is not going to use the seat object
                     anymore.

              capabilities(capabilities: 'int') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Seat capabilities changed

                     This is emitted whenever a seat gains or loses the pointer, keyboard or touch capabilities.
                     The  argument  is  a  capability enum containing the complete set of capabilities this seat
                     has.

                     When the pointer capability is added, a client may create  a  WlPointer  object  using  the
                     WlSeat.get_pointer()  request. This object will receive pointer events until the capability
                     is removed in the future.

                     When the pointer capability is removed, a  client  should  destroy  the  WlPointer  objects
                     associated  with  the  seat where the capability was removed, using the WlPointer.release()
                     request. No further pointer events will be received on these objects.

                     In some compositors, if a seat regains the pointer capability and a client has a previously
                     obtained WlPointer object of version 4 or less,  that  object  may  start  sending  pointer
                     events  again. This behavior is considered a misinterpretation of the intended behavior and
                     must not be relied upon by the client.  WlPointer objects of version 5 or  later  must  not
                     send  events  if  created  before  the  most  recent event notifying the client of an added
                     pointer capability.

                     The above behavior also applies to WlKeyboard and  WlTouch  with  the  keyboard  and  touch
                     capabilities, respectively.

                     Parameters
                            capabilities (ArgumentType.Uint) -- capabilities of the seat

              name(name: 'str') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Unique identifier for this seat

                     In  a  multi-seat configuration the seat name can be used by clients to help identify which
                     physical devices the seat represents.

                     The seat name is a UTF-8 string with no convention defined for its contents. Each  name  is
                     unique  among  all WlSeat globals. The name is only guaranteed to be unique for the current
                     compositor instance.

                     The same seat names are used for all clients. Thus, the name can be shared across processes
                     to refer to a specific WlSeat global.

                     The name event is sent after binding to the seat global. This event is only sent  once  per
                     seat object, and the name does not change over the lifetime of the WlSeat global.

                     Compositors  may re-use the same seat name if the WlSeat global is destroyed and re-created
                     later.

                     Parameters
                            name (ArgumentType.String) -- seat identifier

   WlShell
       class pywayland.protocol.wayland.WlShell
              Create desktop-style surfaces

              This interface is implemented by servers that provide desktop-style user interfaces.

              It allows clients to associate a WlShellSurface with a basic surface.

              Note! This protocol is deprecated and not intended for  production  use.  For  desktop-style  user
              interfaces, use xdg_shell. Compositors and clients should not implement this interface.

              get_shell_surface(surface: 'WlSurface') -> 'Proxy[WlShellSurface]'

                     Request -- opcode 0 (attached to Resource instance)

                     Create a shell surface from a surface

                     Create  a  shell  surface  for  an existing surface. This gives the WlSurface the role of a
                     shell surface. If the WlSurface already has another role, it raises a protocol error.

                     Only one shell surface can be associated with a given surface.

                     Parameters
                            surface (WlSurface) -- surface to be given the shell surface role

                     Returns
                            WlShellSurface -- shell surface to create

   WlShellSurface
       class pywayland.protocol.wayland.WlShellSurface
              Desktop-style metadata interface

              An interface that  may  be  implemented  by  a  WlSurface,  for  implementations  that  provide  a
              desktop-style user interface.

              It provides requests to treat surfaces like toplevel, fullscreen or popup windows, move, resize or
              maximize them, associate metadata like title and class, etc.

              On  the server side the object is automatically destroyed when the related WlSurface is destroyed.
              On the client side, wl_shell_surface_destroy() must be  called  before  destroying  the  WlSurface
              object.

              pong(serial: 'int') -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Respond to a ping event

                     A  client  must  respond  to  a  ping event with a pong request or the client may be deemed
                     unresponsive.

                     Parameters
                            serial (ArgumentType.Uint) -- serial number of the ping event

              move(seat: 'WlSeat', serial: 'int') -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Start an interactive move

                     Start a pointer-driven move of the surface.

                     This request must be used in response to a button press event. The server may  ignore  move
                     requests depending on the state of the surface (e.g. fullscreen or maximized).

                     Parametersseat (WlSeat) -- seat whose pointer is used

                            • serial (ArgumentType.Uint) -- serial number of the implicit grab on the pointer

              resize(seat: 'WlSeat', serial: 'int', edges: 'int') -> 'None'

                     Request -- opcode 2 (attached to Resource instance)

                     Start an interactive resize

                     Start a pointer-driven resizing of the surface.

                     This request must be used in response to a button press event. The server may ignore resize
                     requests depending on the state of the surface (e.g. fullscreen or maximized).

                     Parametersseat (WlSeat) -- seat whose pointer is used

                            • serial (ArgumentType.Uint) -- serial number of the implicit grab on the pointer

                            • edges (ArgumentType.Uint) -- which edge or corner is being dragged

              set_toplevel() -> 'None'

                     Request -- opcode 3 (attached to Resource instance)

                     Make the surface a toplevel surface

                     Map the surface as a toplevel surface.

                     A toplevel surface is not fullscreen, maximized or transient.

              set_transient(parent: 'WlSurface', x: 'int', y: 'int', flags: 'int') -> 'None'

                     Request -- opcode 4 (attached to Resource instance)

                     Make the surface a transient surface

                     Map the surface relative to an existing surface.

                     The x and y arguments specify the location of the upper left corner of the surface relative
                     to the upper left corner of the parent surface, in surface-local coordinates.

                     The flags argument controls details of the transient behaviour.

                     Parametersparent (WlSurface) -- parent surface

                            • x (ArgumentType.Int) -- surface-local x coordinate

                            • y (ArgumentType.Int) -- surface-local y coordinate

                            • flags (ArgumentType.Uint) -- transient surface behavior

              set_fullscreen(method: 'int', framerate: 'int', output: 'WlOutput | None') -> 'None'

                     Request -- opcode 5 (attached to Resource instance)

                     Make the surface a fullscreen surface

                     Map the surface as a fullscreen surface.

                     If an output parameter is given then the surface will be made fullscreen on that output. If
                     the  client does not specify the output then the compositor will apply its policy - usually
                     choosing the output on which the surface has the biggest surface area.

                     The client may specify a method to resolve a size conflict between the output size and  the
                     surface size - this is provided through the method parameter.

                     The  framerate  parameter  is used only when the method is set to "driver", to indicate the
                     preferred framerate. A value of 0 indicates that the client does not care about  framerate.
                     The framerate is specified in mHz, that is framerate of 60000 is 60Hz.

                     A  method  of  "scale" or "driver" implies a scaling operation of the surface, either via a
                     direct scaling operation or a change of the output mode. This will  override  any  kind  of
                     output scaling, so that mapping a surface with a buffer size equal to the mode can fill the
                     screen independent of buffer_scale.

                     A method of "fill" means we don't scale up the buffer, however any output scale is applied.
                     This  means that you may run into an edge case where the application maps a buffer with the
                     same size of the output mode but buffer_scale 1 (thus making  a  surface  larger  than  the
                     output).  In this case it is allowed to downscale the results to fit the screen.

                     The  compositor  must  reply to this request with a configure event with the dimensions for
                     the output on which the surface will be made fullscreen.

                     Parametersmethod (ArgumentType.Uint) -- method for resolving size conflict

                            • framerate (ArgumentType.Uint) -- framerate in mHz

                            • output (WlOutput or None) -- output on which the surface is to be fullscreen

              set_popup(seat: 'WlSeat', serial: 'int', parent: 'WlSurface', x: 'int', y: 'int', flags: 'int') ->
              'None'

                     Request -- opcode 6 (attached to Resource instance)

                     Make the surface a popup surface

                     Map the surface as a popup.

                     A popup surface is a transient surface with an added pointer grab.

                     An existing implicit grab will be changed to owner-events mode, and  the  popup  grab  will
                     continue  after  the implicit grab ends (i.e. releasing the mouse button does not cause the
                     popup to be unmapped).

                     The popup grab continues until the window is destroyed or a mouse button is pressed in  any
                     other  client's  window.  A  click  in  any of the client's surfaces is reported as normal,
                     however, clicks in other clients' surfaces will be discarded and trigger the callback.

                     The x and y arguments specify the location of the upper left corner of the surface relative
                     to the upper left corner of the parent surface, in surface-local coordinates.

                     Parametersseat (WlSeat) -- seat whose pointer is used

                            • serial (ArgumentType.Uint) -- serial number of the implicit grab on the pointer

                            • parent (WlSurface) -- parent surface

                            • x (ArgumentType.Int) -- surface-local x coordinate

                            • y (ArgumentType.Int) -- surface-local y coordinate

                            • flags (ArgumentType.Uint) -- transient surface behavior

              set_maximized(output: 'WlOutput | None') -> 'None'

                     Request -- opcode 7 (attached to Resource instance)

                     Make the surface a maximized surface

                     Map the surface as a maximized surface.

                     If an output parameter is given then the surface will be maximized on that output.  If  the
                     client  does  not  specify  the  output then the compositor will apply its policy - usually
                     choosing the output on which the surface has the biggest surface area.

                     The compositor will reply with a configure event telling the expected new surface size. The
                     operation is completed on the next buffer attach to this surface.

                     A maximized surface typically fills the entire output it is bound to,  except  for  desktop
                     elements  such as panels. This is the main difference between a maximized shell surface and
                     a fullscreen shell surface.

                     The details depend on the compositor implementation.

                     Parameters
                            output (WlOutput or None) -- output on which the surface is to be maximized

              set_title(title: 'str') -> 'None'

                     Request -- opcode 8 (attached to Resource instance)

                     Set surface title

                     Set a short title for the surface.

                     This string may be used to identify the surface in a task bar, window list, or  other  user
                     interface elements provided by the compositor.

                     The string must be encoded in UTF-8.

                     Parameters
                            title (ArgumentType.String) -- surface title

              set_class(class_: 'str') -> 'None'

                     Request -- opcode 9 (attached to Resource instance)

                     Set surface class

                     Set a class for the surface.

                     The  surface  class  identifies  the  general  class  of  applications to which the surface
                     belongs. A common convention is to use the  file  name  (or  the  full  path  if  it  is  a
                     non-standard location) of the application's .desktop file as the class.

                     Parameters
                            class (ArgumentType.String) -- surface class

              ping(serial: 'int') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Ping client

                     Ping  a  client  to  check  if  it  is  receiving events and sending requests.  A client is
                     expected to reply with a pong request.

                     Parameters
                            serial (ArgumentType.Uint) -- serial number of the ping

              configure(edges: 'int', width: 'int', height: 'int') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Suggest resize

                     The configure event asks the client to resize its surface.

                     The size is a hint, in the sense that the client is free to ignore it if it doesn't resize,
                     pick a smaller size (to satisfy aspect ratio or resize in steps of NxM pixels).

                     The edges parameter provides a hint about how the surface was resized.  The client may  use
                     this information to decide how to adjust its content to the new size (e.g. a scrolling area
                     might adjust its content position to leave the viewable content unmoved).

                     The client is free to dismiss all but the last configure event it received.

                     The width and height arguments specify the size of the window in surface-local coordinates.

                     Parametersedges (ArgumentType.Uint) -- how the surface was resized

                            • width (ArgumentType.Int) -- new width of the surface

                            • height (ArgumentType.Int) -- new height of the surface

              popup_done() -> 'None'

                     Event -- opcode 2 (attached to Proxy instance)

                     Popup interaction is done

                     The popup_done event is sent out when a popup grab is broken, that is, when the user clicks
                     a surface that doesn't belong to the client owning the popup surface.

   WlShm
       class pywayland.protocol.wayland.WlShm
              Shared memory support

              A singleton global object that provides support for shared memory.

              Clients can create WlShmPool objects using the create_pool request.

              On  binding  the  WlShm  object  one or more format events are emitted to inform clients about the
              valid pixel formats that can be used for buffers.

              create_pool(fd: 'int', size: 'int') -> 'Proxy[WlShmPool]'

                     Request -- opcode 0 (attached to Resource instance)

                     Create a shm pool

                     Create a new WlShmPool object.

                     The pool can be used to create shared memory based buffer objects.  The  server  will  mmap
                     size bytes of the passed file descriptor, to use as backing memory for the pool.

                     Parametersfd (ArgumentType.FileDescriptor) -- file descriptor for the pool

                            • size (ArgumentType.Int) -- pool size, in bytes

                     Returns
                            WlShmPool -- pool to create

              release() -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Release the shm object

                     Using  this request a client can tell the server that it is not going to use the shm object
                     anymore.

                     Objects created via this interface remain unaffected.

              format(format: 'int') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Pixel format description

                     Informs the client about a valid pixel format that can be used for buffers.  Known  formats
                     include argb8888 and xrgb8888.

                     Parameters
                            format (ArgumentType.Uint) -- buffer pixel format

   WlShmPool
       class pywayland.protocol.wayland.WlShmPool
              A shared memory pool

              The  WlShmPool  object  encapsulates  a  piece of memory shared between the compositor and client.
              Through the WlShmPool object, the client can allocate shared memory WlBuffer objects. All  objects
              created  through  the same pool share the same underlying mapped memory. Reusing the mapped memory
              avoids the setup/teardown overhead and is useful when interactively resizing a surface or for many
              small buffers.

              create_buffer(offset: 'int', width: 'int', height: 'int', stride: 'int', format: 'int') ->
              'Proxy[WlBuffer]'

                     Request -- opcode 0 (attached to Resource instance)

                     Create a buffer from the pool

                     Create a WlBuffer object from the pool.

                     The buffer is created offset bytes into the pool and has width  and  height  as  specified.
                     The  stride  argument  specifies  the  number of bytes from the beginning of one row to the
                     beginning of the next.  The format is the pixel format of the buffer and  must  be  one  of
                     those advertised through the WlShm.format() event.

                     A  buffer  will  keep a reference to the pool it was created from so it is valid to destroy
                     the pool immediately after creating a buffer from it.

                     Parametersoffset (ArgumentType.Int) -- buffer byte offset within the pool

                            • width (ArgumentType.Int) -- buffer width, in pixels

                            • height (ArgumentType.Int) -- buffer height, in pixels

                            • stride (ArgumentType.Int) -- number of bytes from the beginning of one row to  the
                              beginning of the next row

                            • format (ArgumentType.Uint) -- buffer pixel format

                     Returns
                            WlBuffer -- buffer to create

              destroy() -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Destroy the pool

                     Destroy the shared memory pool.

                     The  mmapped memory will be released when all buffers that have been created from this pool
                     are gone.

              resize(size: 'int') -> 'None'

                     Request -- opcode 2 (attached to Resource instance)

                     Change the size of the pool mapping

                     This request will cause the server to remap the backing memory for the pool from  the  file
                     descriptor passed when the pool was created, but using the new size.  This request can only
                     be used to make the pool bigger.

                     This  request  only changes the amount of bytes that are mmapped by the server and does not
                     touch the file corresponding to the file descriptor passed at  creation  time.  It  is  the
                     client's responsibility to ensure that the file is at least as big as the new pool size.

                     Parameters
                            size (ArgumentType.Int) -- new size of the pool, in bytes

   WlSubcompositor
       class pywayland.protocol.wayland.WlSubcompositor
              Sub-surface compositing

              The  global  interface  exposing  sub-surface  compositing  capabilities.  A  WlSurface,  that has
              sub-surfaces associated, is called the parent surface. Sub-surfaces can be arbitrarily nested  and
              create a tree of sub-surfaces.

              The  root  surface  in  a  tree  of sub-surfaces is the main surface. The main surface cannot be a
              sub-surface, because sub-surfaces must always have a parent.

              A main surface with its sub-surfaces forms a (compound) window. For  window  management  purposes,
              this set of WlSurface objects is to be considered as a single window, and it should also behave as
              such.

              The aim of sub-surfaces is to offload some of the compositing work within a window from clients to
              the compositor. A prime example is a video player with decorations and video in separate WlSurface
              objects. This should allow the compositor to pass YUV video buffer processing to dedicated overlay
              hardware when possible.

              destroy() -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Unbind from the subcompositor interface

                     Informs  the  server  that  the client will not be using this protocol object anymore. This
                     does not affect any other objects, WlSubsurface objects included.

              get_subsurface(surface: 'WlSurface', parent: 'WlSurface') -> 'Proxy[WlSubsurface]'

                     Request -- opcode 1 (attached to Resource instance)

                     Give a surface the role sub-surface

                     Create a sub-surface interface for the given surface,  and  associate  it  with  the  given
                     parent surface. This turns a plain WlSurface into a sub-surface.

                     The  to-be sub-surface must not already have another role, and it must not have an existing
                     WlSubsurface object. Otherwise the bad_surface protocol error is raised.

                     Adding sub-surfaces to  a  parent  is  a  double-buffered  operation  on  the  parent  (see
                     WlSurface.commit()).  The  effect  of adding a sub-surface becomes visible on the next time
                     the state of the parent surface is applied.

                     The parent surface must not be one of the child surface's descendants, and the parent  must
                     be different from the child surface, otherwise the bad_parent protocol error is raised.

                     This  request modifies the behaviour of WlSurface.commit() request on the sub- surface, see
                     the documentation on WlSubsurface interface.

                     Parameterssurface (WlSurface) -- the surface to be turned into a sub-surface

                            • parent (WlSurface) -- the parent surface

                     Returns
                            WlSubsurface -- the new sub- surface object ID

   WlSubsurface
       class pywayland.protocol.wayland.WlSubsurface
              Sub-surface interface to a WlSurface

              An additional interface to a WlSurface object, which has been made a  sub-surface.  A  sub-surface
              has  one  parent surface. A sub-surface's size and position are not limited to that of the parent.
              Particularly, a sub-surface is not automatically clipped to its parent's area.

              A sub-surface becomes mapped, when a non-NULL WlBuffer  is  applied  and  the  parent  surface  is
              mapped.  The order of which one happens first is irrelevant. A sub-surface is hidden if the parent
              becomes hidden, or if a NULL WlBuffer is applied. These rules apply recursively through  the  tree
              of surfaces.

              The  behaviour of a WlSurface.commit() request on a sub-surface depends on the sub-surface's mode.
              The possible modes are synchronized and desynchronized, see  methods  WlSubsurface.set_sync()  and
              WlSubsurface.set_desync().  Synchronized  mode  caches  the WlSurface state to be applied when the
              parent's state gets applied, and desynchronized mode applies the pending WlSurface state directly.
              A sub- surface is initially in the synchronized mode.

              Sub-surfaces also have another kind of state,  which  is  managed  by  WlSubsurface  requests,  as
              opposed to WlSurface requests. This state includes the sub-surface position relative to the parent
              surface  (WlSubsurface.set_position()),  and the stacking order of the parent and its sub-surfaces
              (WlSubsurface.place_above() and .place_below).  This state is applied when  the  parent  surface's
              WlSurface  state  is applied, regardless of the sub-surface's mode. As the exception, set_sync and
              set_desync are effective immediately.

              The main surface can be thought to be always in desynchronized mode, since  it  does  not  have  a
              parent in the sub-surfaces sense.

              Even  if  a  sub-surface is in desynchronized mode, it will behave as in synchronized mode, if its
              parent surface behaves as in synchronized mode.  This rule is applied recursively  throughout  the
              tree  of  surfaces.  This  means,  that one can set a sub-surface into synchronized mode, and then
              assume that all its child and grand-child sub-surfaces are synchronized, too,  without  explicitly
              setting them.

              Destroying  a  sub-surface  takes  effect immediately. If you need to synchronize the removal of a
              sub-surface to the parent surface  update,  unmap  the  sub-surface  first  by  attaching  a  NULL
              WlBuffer, update parent, and then destroy the sub-surface.

              If the parent WlSurface object is destroyed, the sub-surface is unmapped.

              A sub-surface never has the keyboard focus of any seat.

              The  WlSurface.offset()  request  is  ignored:  clients  must use set_position instead to move the
              sub-surface.

              destroy() -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Remove sub-surface interface

                     The sub-surface interface is removed from the WlSurface  object  that  was  turned  into  a
                     sub-surface  with a WlSubcompositor.get_subsurface() request.  The wl_surface's association
                     to the parent is deleted. The WlSurface is unmapped immediately.

              set_position(x: 'int', y: 'int') -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Reposition the sub-surface

                     This schedules a sub-surface position change. The sub-surface will be  moved  so  that  its
                     origin  (top  left  corner  pixel)  will  be  at  the  location  x, y of the parent surface
                     coordinate system. The coordinates are not restricted to the parent surface area.  Negative
                     values are allowed.

                     The  scheduled  coordinates  will  take  effect whenever the state of the parent surface is
                     applied.

                     If more than one set_position request is invoked by the client before  the  commit  of  the
                     parent  surface,  the position of a new request always replaces the scheduled position from
                     any previous request.

                     The initial position is 0, 0.

                     Parametersx (ArgumentType.Int) -- x coordinate in the parent surface

                            • y (ArgumentType.Int) -- y coordinate in the parent surface

              place_above(sibling: 'WlSurface') -> 'None'

                     Request -- opcode 2 (attached to Resource instance)

                     Restack the sub-surface

                     This sub-surface is taken from the stack, and put back just above  the  reference  surface,
                     changing  the z-order of the sub-surfaces. The reference surface must be one of the sibling
                     surfaces, or the parent surface. Using any other surface, including this sub-surface,  will
                     cause a protocol error.

                     The  z-order is double-buffered. Requests are handled in order and applied immediately to a
                     pending state. The final pending state is copied to the active  state  the  next  time  the
                     state of the parent surface is applied.

                     A  new  sub-surface  is  initially  added  as the top-most in the stack of its siblings and
                     parent.

                     Parameters
                            sibling (WlSurface) -- the reference surface

              place_below(sibling: 'WlSurface') -> 'None'

                     Request -- opcode 3 (attached to Resource instance)

                     Restack the sub-surface

                     The sub-surface is placed just below the reference surface. See WlSubsurface.place_above().

                     Parameters
                            sibling (WlSurface) -- the reference surface

              set_sync() -> 'None'

                     Request -- opcode 4 (attached to Resource instance)

                     Set sub-surface to synchronized mode

                     Change the commit behaviour of the sub-surface to synchronized mode, also described as  the
                     parent dependent mode.

                     In  synchronized  mode,  WlSurface.commit()  on a sub-surface will accumulate the committed
                     state in a cache, but the state  will  not  be  applied  and  hence  will  not  change  the
                     compositor  output.  The  cached  state is applied to the sub-surface immediately after the
                     parent surface's state is applied. This ensures atomic updates of the parent  and  all  its
                     synchronized  sub-surfaces. Applying the cached state will invalidate the cache, so further
                     parent surface commits do not (re-)apply old state.

                     See WlSubsurface for the recursive effect of this mode.

              set_desync() -> 'None'

                     Request -- opcode 5 (attached to Resource instance)

                     Set sub-surface to desynchronized mode

                     Change the commit behaviour of the sub-surface to desynchronized mode,  also  described  as
                     independent or freely running mode.

                     In  desynchronized  mode,  WlSurface.commit() on a sub-surface will apply the pending state
                     directly, without caching, as happens normally with a WlSurface. Calling WlSurface.commit()
                     on the parent surface has no effect on the sub-surface's WlSurface state. This mode  allows
                     a sub-surface to be updated on its own.

                     If  cached  state  exists  when  WlSurface.commit()  is  called in desynchronized mode, the
                     pending state is added to the cached state, and applied as a whole.  This  invalidates  the
                     cache.

                     Note: even if a sub-surface is set to desynchronized, a parent sub- surface may override it
                     to behave as synchronized. For details, see WlSubsurface.

                     If  a  surface's parent surface behaves as desynchronized, then the cached state is applied
                     on set_desync.

   WlSurface
       class pywayland.protocol.wayland.WlSurface
              An onscreen surface

              A surface is a rectangular area that may be displayed on zero  or  more  outputs,  and  shown  any
              number  of  times at the compositor's discretion. They can present wl_buffers, receive user input,
              and define a local coordinate system.

              The size of a surface (and relative positions on it) is described  in  surface-local  coordinates,
              which may differ from the buffer coordinates of the pixel content, in case a buffer_transform or a
              buffer_scale is used.

              A  surface  without  a  "role" is fairly useless: a compositor does not know where, when or how to
              present it. The role is the purpose of a WlSurface. Examples of roles are a cursor for  a  pointer
              (as  set  by  WlPointer.set_cursor()),  a  drag icon (WlDataDevice.start_drag()), a sub-surface (‐
              WlSubcompositor.get_subsurface()),  and  a  window  as  defined  by   a   shell   protocol   (e.g.
              WlShell.get_shell_surface()).

              A  surface  can  have  only one role at a time. Initially a WlSurface does not have a role. Once a
              WlSurface is given a role, it is set permanently for the whole lifetime of the  WlSurface  object.
              Giving  the  current  role again is allowed, unless explicitly forbidden by the relevant interface
              specification.

              Surface roles are given by requests  in  other  interfaces  such  as  WlPointer.set_cursor().  The
              request  should  explicitly  mention  that  this request gives a role to a WlSurface.  Often, this
              request also creates  a  new  protocol  object  that  represents  the  role  and  adds  additional
              functionality  to  WlSurface.  When  a client wants to destroy a WlSurface, they must destroy this
              role object before the WlSurface, otherwise a defunct_role_object error is sent.

              Destroying the role object does not remove the role from  the  WlSurface,  but  it  may  stop  the
              WlSurface  from  "playing  the  role".  For  instance,  if a WlSubsurface object is destroyed, the
              WlSurface it was created for will be unmapped and forget its position and z-order. It  is  allowed
              to  create a WlSubsurface for the same WlSurface again, but it is not allowed to use the WlSurface
              as a cursor (cursor is a different role than sub- surface, and role switching is not allowed).

              destroy() -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Delete surface

                     Deletes the surface and invalidates its object ID.

              attach(buffer: 'WlBuffer | None', x: 'int', y: 'int') -> 'None'

                     Request -- opcode 1 (attached to Resource instance)

                     Set the surface contents

                     Set a buffer as the content of this surface.

                     The new size of the surface is calculated based on  the  buffer  size  transformed  by  the
                     inverse  buffer_transform  and the inverse buffer_scale. This means that at commit time the
                     supplied buffer size must be an integer multiple of the buffer_scale.  If  that's  not  the
                     case, an invalid_size error is sent.

                     The  x  and y arguments specify the location of the new pending buffer's upper left corner,
                     relative to the current buffer's upper left corner, in surface-local coordinates. In  other
                     words,  the  x  and  y,  combined  with the new surface size define in which directions the
                     surface's size changes. Setting anything other than 0 as x and y arguments is  discouraged,
                     and should instead be replaced with using the separate WlSurface.offset() request.

                     When  the bound WlSurface version is 5 or higher, passing any non-zero x or y is a protocol
                     violation, and will result in an 'invalid_offset' error being raised. The x and y arguments
                     are ignored and do not change the pending  state.  To  achieve  equivalent  semantics,  use
                     WlSurface.offset().

                     Surface contents are double-buffered state, see WlSurface.commit().

                     The initial surface contents are void; there is no content.  WlSurface.attach() assigns the
                     given  WlBuffer as the pending WlBuffer.  WlSurface.commit() makes the pending WlBuffer the
                     new surface contents, and the size of the surface becomes  the  size  calculated  from  the
                     WlBuffer,  as  described  above.   After  commit, there is no pending buffer until the next
                     attach.

                     Committing a pending WlBuffer allows the compositor to read the pixels in the WlBuffer. The
                     compositor may access the pixels at any time after the WlSurface.commit() request. When the
                     compositor will not access the pixels anymore, it will send the  WlBuffer.release()  event.
                     Only after receiving WlBuffer.release(), the client may reuse the WlBuffer. A WlBuffer that
                     has been attached and then replaced by another attach instead of committed will not receive
                     a release event, and is not used by the compositor.

                     If  a  pending  WlBuffer  has  been  committed  to more than one WlSurface, the delivery of
                     WlBuffer.release() events becomes undefined. A well  behaved  client  should  not  rely  on
                     WlBuffer.release()  events  in  this  case.   Alternatively, a client could create multiple
                     WlBuffer objects from the same backing storage or use wp_linux_buffer_release.

                     Destroying the WlBuffer after WlBuffer.release() does  not  change  the  surface  contents.
                     Destroying  the  WlBuffer  before  WlBuffer.release()  is allowed as long as the underlying
                     buffer storage isn't re-used (this can happen e.g. on client process termination). However,
                     if the client destroys the WlBuffer  before  receiving  the  WlBuffer.release()  event  and
                     mutates the underlying buffer storage, the surface contents become undefined immediately.

                     If  WlSurface.attach()  is sent with a NULL WlBuffer, the following WlSurface.commit() will
                     remove the surface content.

                     If a pending WlBuffer has been destroyed, the result is not specified. Many compositors are
                     known to remove the surface content on the following WlSurface.commit(), but this behaviour
                     is not universal. Clients seeking to maximise  compatibility  should  not  destroy  pending
                     buffers  and  should  ensure  that they explicitly remove content from surfaces, even after
                     destroying buffers.

                     Parametersbuffer (WlBuffer or None) -- buffer of surface contents

                            • x (ArgumentType.Int) -- surface-local x coordinate

                            • y (ArgumentType.Int) -- surface-local y coordinate

              damage(x: 'int', y: 'int', width: 'int', height: 'int') -> 'None'

                     Request -- opcode 2 (attached to Resource instance)

                     Mark part of the surface damaged

                     This request is used to describe the regions where the pending buffer is different from the
                     current surface contents, and where the  surface  therefore  needs  to  be  repainted.  The
                     compositor ignores the parts of the damage that fall outside of the surface.

                     Damage is double-buffered state, see WlSurface.commit().

                     The  damage  rectangle is specified in surface-local coordinates, where x and y specify the
                     upper left corner of the damage rectangle.

                     The initial value for pending damage is empty: no damage.  WlSurface.damage() adds  pending
                     damage: the new pending damage is the union of old pending damage and the given rectangle.

                     WlSurface.commit() assigns pending damage as the current damage, and clears pending damage.
                     The server will clear the current damage as it repaints the surface.

                     Note!  New  clients  should  not  use  this  request.  Instead  damage  can  be posted with
                     WlSurface.damage_buffer() which uses buffer coordinates instead of surface coordinates.

                     Parametersx (ArgumentType.Int) -- surface-local x coordinate

                            • y (ArgumentType.Int) -- surface-local y coordinate

                            • width (ArgumentType.Int) -- width of damage rectangle

                            • height (ArgumentType.Int) -- height of damage rectangle

              frame() -> 'Proxy[WlCallback]'

                     Request -- opcode 3 (attached to Resource instance)

                     Request a frame throttling hint

                     Request a notification when it is a good time to start drawing a new frame, by  creating  a
                     frame callback. This is useful for throttling redrawing operations, and driving animations.

                     When  a  client is animating on a WlSurface, it can use the 'frame' request to get notified
                     when it is a good time to draw and commit the  next  frame  of  animation.  If  the  client
                     commits an update earlier than that, it is likely that some updates will not make it to the
                     display, and the client is wasting resources by drawing too often.

                     The  frame  request  will take effect on the next WlSurface.commit(). The notification will
                     only be posted for one frame unless requested again. For a WlSurface, the notifications are
                     posted in the order the frame requests were committed.

                     The server must send the notifications so that a client will not  send  excessive  updates,
                     while  still  allowing the highest possible update rate for clients that wait for the reply
                     before drawing again. The server should give some time for the client to  draw  and  commit
                     after sending the frame callback events to let it hit the next output refresh.

                     A  server  should  avoid signaling the frame callbacks if the surface is not visible in any
                     way, e.g. the surface is off-screen, or completely obscured by other opaque surfaces.

                     The object returned by this request will be destroyed by the compositor after the  callback
                     is fired and as such the client must not attempt to use it after that point.

                     The  callback_data  passed  in  the  callback is the current time, in milliseconds, with an
                     undefined base.

                     Returns
                            WlCallback -- callback object for the frame request

              set_opaque_region(region: 'WlRegion | None') -> 'None'

                     Request -- opcode 4 (attached to Resource instance)

                     Set opaque region

                     This request sets the region of the surface that contains opaque content.

                     The opaque region is an optimization hint for the compositor  that  lets  it  optimize  the
                     redrawing  of  content behind opaque regions.  Setting an opaque region is not required for
                     correct behaviour, but marking  transparent  content  as  opaque  will  result  in  repaint
                     artifacts.

                     The opaque region is specified in surface-local coordinates.

                     The compositor ignores the parts of the opaque region that fall outside of the surface.

                     Opaque region is double-buffered state, see WlSurface.commit().

                     WlSurface.set_opaque_region()  changes the pending opaque region. WlSurface.commit() copies
                     the pending region to the current region. Otherwise, the pending and  current  regions  are
                     never changed.

                     The initial value for an opaque region is empty. Setting the pending opaque region has copy
                     semantics, and the WlRegion object can be destroyed immediately. A NULL WlRegion causes the
                     pending opaque region to be set to empty.

                     Parameters
                            region (WlRegion or None) -- opaque region of the surface

              set_input_region(region: 'WlRegion | None') -> 'None'

                     Request -- opcode 5 (attached to Resource instance)

                     Set input region

                     This request sets the region of the surface that can receive pointer and touch events.

                     Input  events  happening  outside  of  this  region will try the next surface in the server
                     surface stack. The compositor ignores the parts of the input region that  fall  outside  of
                     the surface.

                     The input region is specified in surface-local coordinates.

                     Input region is double-buffered state, see WlSurface.commit().

                     WlSurface.set_input_region()  changes  the pending input region.  WlSurface.commit() copies
                     the pending region to the current region. Otherwise the pending  and  current  regions  are
                     never    changed,    except   cursor   and   icon   surfaces   are   special   cases,   see
                     WlPointer.set_cursor() and WlDataDevice.start_drag().

                     The initial value for an input region is infinite. That means the whole surface will accept
                     input. Setting the pending input region has copy semantics, and the WlRegion object can  be
                     destroyed immediately. A NULL WlRegion causes the input region to be set to infinite.

                     Parameters
                            region (WlRegion or None) -- input region of the surface

              commit() -> 'None'

                     Request -- opcode 6 (attached to Resource instance)

                     Commit pending surface state

                     Surface   state   (input,   opaque,   and   damage  regions,  attached  buffers,  etc.)  is
                     double-buffered. Protocol requests modify the pending state, as opposed to the active state
                     in use by the compositor.

                     A commit request atomically creates a content update from the pending state,  even  if  the
                     pending  state  has  not  been  touched.  The  content update is placed in a queue until it
                     becomes active. After commit, the new pending state  is  as  documented  for  each  related
                     request.

                     When  the  content  update is applied, the WlBuffer is applied before all other state. This
                     means that all coordinates in double-buffered state are  relative  to  the  newly  attached
                     wl_buffers,  except  for WlSurface.attach() itself. If there is no newly attached WlBuffer,
                     the coordinates are relative to the previous content update.

                     All  requests  that  need  a  commit  to  become  effective  are   documented   to   affect
                     double-buffered state.

                     Other interfaces may add further double-buffered surface state.

              set_buffer_transform(transform: 'int') -> 'None'

                     Request -- opcode 7 (attached to Resource instance)

                     Sets the buffer transformation

                     This  request sets the transformation that the client has already applied to the content of
                     the  buffer.  The  accepted  values  for  the  transform  parameter  are  the  values   for
                     WlOutput.transform().

                     The  compositor  applies  the  inverse  of  this transformation whenever it uses the buffer
                     contents.

                     Buffer transform is double-buffered state, see WlSurface.commit().

                     A newly created surface has its buffer transformation set to normal.

                     WlSurface.set_buffer_transform()    changes    the    pending    buffer     transformation.
                     WlSurface.commit()  copies the pending buffer transformation to the current one. Otherwise,
                     the pending and current values are never changed.

                     The purpose of this request is to allow clients to render content according to  the  output
                     transform,  thus permitting the compositor to use certain optimizations even if the display
                     is rotated. Using hardware overlays  and  scanning  out  a  client  buffer  for  fullscreen
                     surfaces  are  examples  of such optimizations. Those optimizations are highly dependent on
                     the compositor implementation, so the use  of  this  request  should  be  considered  on  a
                     case-by-case basis.

                     Note  that  if  the  transform  value  includes 90 or 270 degree rotation, the width of the
                     buffer will become the surface height and the height of the buffer will become the  surface
                     width.

                     If   transform   is   not  one  of  the  values  from  the  WlOutput.transform()  enum  the
                     invalid_transform protocol error is raised.

                     Parameters
                            transform (ArgumentType.Int) -- transform for interpreting buffer contents

              set_buffer_scale(scale: 'int') -> 'None'

                     Request -- opcode 8 (attached to Resource instance)

                     Sets the buffer scaling factor

                     This request sets an optional scaling factor on how the compositor interprets the  contents
                     of the buffer attached to the window.

                     Buffer scale is double-buffered state, see WlSurface.commit().

                     A newly created surface has its buffer scale set to 1.

                     WlSurface.set_buffer_scale()  changes  the pending buffer scale.  WlSurface.commit() copies
                     the pending buffer scale to the current one. Otherwise, the pending and current values  are
                     never changed.

                     The purpose of this request is to allow clients to supply higher resolution buffer data for
                     use  on  high resolution outputs. It is intended that you pick the same buffer scale as the
                     scale of the output that the surface is displayed on. This means the compositor  can  avoid
                     scaling when rendering the surface on that output.

                     Note  that  if  the scale is larger than 1, then you have to attach a buffer that is larger
                     (by a factor of scale in each dimension) than the desired surface size.

                     If scale is not greater than 0 the invalid_scale protocol error is raised.

                     Parameters
                            scale (ArgumentType.Int) -- scale for interpreting buffer contents

              damage_buffer(x: 'int', y: 'int', width: 'int', height: 'int') -> 'None'

                     Request -- opcode 9 (attached to Resource instance)

                     Mark part of the surface damaged using buffer coordinates

                     This request is used to describe the regions where the pending buffer is different from the
                     current surface contents, and where the  surface  therefore  needs  to  be  repainted.  The
                     compositor ignores the parts of the damage that fall outside of the surface.

                     Damage is double-buffered state, see WlSurface.commit().

                     The  damage  rectangle  is specified in buffer coordinates, where x and y specify the upper
                     left corner of the damage rectangle.

                     The initial value for pending damage is empty: no damage.   WlSurface.damage_buffer()  adds
                     pending  damage:  the  new  pending damage is the union of old pending damage and the given
                     rectangle.

                     WlSurface.commit() assigns pending damage as the current damage, and clears pending damage.
                     The server will clear the current damage as it repaints the surface.

                     This request differs from WlSurface.damage() in only one way - it takes  damage  in  buffer
                     coordinates  instead  of  surface-local coordinates. While this generally is more intuitive
                     than surface coordinates, it is especially desirable  when  using  wp_viewport  or  when  a
                     drawing library (like EGL) is unaware of buffer scale and buffer transform.

                     Note:  Because  buffer transformation changes and damage requests may be interleaved in the
                     protocol stream, it is impossible to determine  the  actual  mapping  between  surface  and
                     buffer  damage  until  WlSurface.commit() time. Therefore, compositors wishing to take both
                     kinds of damage into  account  will  have  to  accumulate  damage  from  the  two  requests
                     separately and only transform from one to the other after receiving the WlSurface.commit().

                     Parametersx (ArgumentType.Int) -- buffer-local x coordinate

                            • y (ArgumentType.Int) -- buffer-local y coordinate

                            • width (ArgumentType.Int) -- width of damage rectangle

                            • height (ArgumentType.Int) -- height of damage rectangle

              offset(x: 'int', y: 'int') -> 'None'

                     Request -- opcode 10 (attached to Resource instance)

                     Set the surface contents offset

                     The  x  and y arguments specify the location of the new pending buffer's upper left corner,
                     relative to the current buffer's upper left corner, in surface-local coordinates. In  other
                     words,  the  x  and  y,  combined  with the new surface size define in which directions the
                     surface's size changes.

                     Surface location offset is double-buffered state, see WlSurface.commit().

                     This request is semantically equivalent to and the replaces the x and y  arguments  in  the
                     WlSurface.attach()  request  in  WlSurface  versions prior to 5. See WlSurface.attach() for
                     details.

                     Parametersx (ArgumentType.Int) -- surface-local x coordinate

                            • y (ArgumentType.Int) -- surface-local y coordinate

              enter(output: 'WlOutput') -> 'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Surface enters an output

                     This is emitted whenever a surface's creation, movement, or resizing results in  some  part
                     of it being within the scanout region of an output.

                     Note that a surface may be overlapping with zero or more outputs.

                     Parameters
                            output (WlOutput) -- output entered by the surface

              leave(output: 'WlOutput') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     Surface leaves an output

                     This  is  emitted  whenever  a  surface's  creation, movement, or resizing results in it no
                     longer having any part of it within the scanout region of an output.

                     Clients should not use the number of  outputs  the  surface  is  on  for  frame  throttling
                     purposes.  The  surface  might  be  hidden  even  if  no leave event has been sent, and the
                     compositor might expect new surface content updates even if no enter event has  been  sent.
                     The frame event should be used instead.

                     Parameters
                            output (WlOutput) -- output left by the surface

              preferred_buffer_scale(factor: 'int') -> 'None'

                     Event -- opcode 2 (attached to Proxy instance)

                     Preferred buffer scale for the surface

                     This  event  indicates the preferred buffer scale for this surface. It is sent whenever the
                     compositor's preference changes.

                     Before receiving this event the preferred buffer scale for this surface is 1.

                     It is intended that scaling aware clients use this event to scale  their  content  and  use
                     WlSurface.set_buffer_scale()  to  indicate  the  scale they have rendered with. This allows
                     clients to supply a higher detail buffer.

                     The compositor shall emit a scale value greater than 0.

                     Parameters
                            factor (ArgumentType.Int) -- preferred scaling factor

              preferred_buffer_transform(transform: 'int') -> 'None'

                     Event -- opcode 3 (attached to Proxy instance)

                     Preferred buffer transform for the surface

                     This event indicates the preferred buffer transform for this surface.  It is sent  whenever
                     the compositor's preference changes.

                     Before receiving this event the preferred buffer transform for this surface is normal.

                     Applying    this    transformation    to    the   surface   buffer   contents   and   using
                     WlSurface.set_buffer_transform() might allow the compositor to use the surface buffer  more
                     efficiently.

                     Parameters
                            transform (ArgumentType.Uint) -- preferred transform

   WlTouch
       class pywayland.protocol.wayland.WlTouch
              Touchscreen input device

              The WlTouch interface represents a touchscreen associated with a seat.

              Touch  interactions  can  consist of one or more contacts. For each contact, a series of events is
              generated, starting with a down event, followed by zero or more motion events, and ending with  an
              up event. Events relating to the same contact point can be identified by the ID of the sequence.

              release() -> 'None'

                     Request -- opcode 0 (attached to Resource instance)

                     Release the touch object

              down(serial: 'int', time: 'int', surface: 'WlSurface', id: 'int', x: 'float', y: 'float') ->
              'None'

                     Event -- opcode 0 (attached to Proxy instance)

                     Touch down event and beginning of a touch sequence

                     A  new  touch  point has appeared on the surface. This touch point is assigned a unique ID.
                     Future events from this touch point reference this ID. The ID ceases to be  valid  after  a
                     touch up event and may be reused in the future.

                     Parametersserial (ArgumentType.Uint) -- serial number of the touch down event

                            • time (ArgumentType.Uint) -- timestamp with millisecond granularity

                            • surface (WlSurface) -- surface touched

                            • id (ArgumentType.Int) -- the unique ID of this touch point

                            • x (ArgumentType.Fixed) -- surface-local x coordinate

                            • y (ArgumentType.Fixed) -- surface-local y coordinate

              up(serial: 'int', time: 'int', id: 'int') -> 'None'

                     Event -- opcode 1 (attached to Proxy instance)

                     End of a touch event sequence

                     The  touch  point  has disappeared. No further events will be sent for this touch point and
                     the touch point's ID is released and may be reused in a future touch down event.

                     Parametersserial (ArgumentType.Uint) -- serial number of the touch up event

                            • time (ArgumentType.Uint) -- timestamp with millisecond granularity

                            • id (ArgumentType.Int) -- the unique ID of this touch point

              motion(time: 'int', id: 'int', x: 'float', y: 'float') -> 'None'

                     Event -- opcode 2 (attached to Proxy instance)

                     Update of touch point coordinates

                     A touch point has changed coordinates.

                     Parameterstime (ArgumentType.Uint) -- timestamp with millisecond granularity

                            • id (ArgumentType.Int) -- the unique ID of this touch point

                            • x (ArgumentType.Fixed) -- surface-local x coordinate

                            • y (ArgumentType.Fixed) -- surface-local y coordinate

              frame() -> 'None'

                     Event -- opcode 3 (attached to Proxy instance)

                     End of touch frame event

                     Indicates the end of a set of events that logically belong together. A client  is  expected
                     to accumulate the data in all events within the frame before proceeding.

                     A  WlTouch.frame()  terminates  at  least  one event but otherwise no guarantee is provided
                     about the set of events within a frame. A client must assume that any state not updated  in
                     a frame is unchanged from the previously known state.

              cancel() -> 'None'

                     Event -- opcode 4 (attached to Proxy instance)

                     Touch session cancelled

                     Sent  if the compositor decides the touch stream is a global gesture. No further events are
                     sent to the clients from that particular gesture.  Touch cancellation applies to all  touch
                     points  currently active on this client's surface. The client is responsible for finalizing
                     the touch points, future touch points on this surface may reuse the touch point ID.

                     No frame event is required after the cancel event.

              shape(id: 'int', major: 'float', minor: 'float') -> 'None'

                     Event -- opcode 5 (attached to Proxy instance)

                     Update shape of touch point

                     Sent when a touchpoint has changed its shape.

                     This event does not occur on its own. It is sent before a WlTouch.frame() event and carries
                     the new shape information for any previously reported, or new touch points of that frame.

                     Other events describing  the  touch  point  such  as  WlTouch.down(),  WlTouch.motion()  or
                     WlTouch.orientation()  may  be  sent within the same WlTouch.frame(). A client should treat
                     these events as a  single  logical  touch  point  update.  The  order  of  WlTouch.shape(),
                     WlTouch.orientation()  and  WlTouch.motion()  is  not guaranteed. A WlTouch.down() event is
                     guaranteed to occur before the first WlTouch.shape() event  for  this  touch  ID  but  both
                     events may occur within the same WlTouch.frame().

                     A  touchpoint  shape is approximated by an ellipse through the major and minor axis length.
                     The major axis length describes the longer diameter of the ellipse, while  the  minor  axis
                     length  describes  the  shorter  diameter.  Major  and  minor  are  orthogonal and both are
                     specified in surface-local coordinates.  The  center  of  the  ellipse  is  always  at  the
                     touchpoint location as reported by WlTouch.down() or WlTouch.move().

                     This  event  is only sent by the compositor if the touch device supports shape reports. The
                     client has to make reasonable assumptions about the shape if it did not receive this event.

                     Parametersid (ArgumentType.Int) -- the unique ID of this touch point

                            • major  (ArgumentType.Fixed)  --  length  of  the  major  axis   in   surface-local
                              coordinates

                            • minor   (ArgumentType.Fixed)   --  length  of  the  minor  axis  in  surface-local
                              coordinates

              orientation(id: 'int', orientation: 'float') -> 'None'

                     Event -- opcode 6 (attached to Proxy instance)

                     Update orientation of touch point

                     Sent when a touchpoint has changed its orientation.

                     This event does not occur on its own. It is sent before a WlTouch.frame() event and carries
                     the new shape information for any previously reported, or new touch points of that frame.

                     Other events describing  the  touch  point  such  as  WlTouch.down(),  WlTouch.motion()  or
                     WlTouch.shape()  may  be  sent within the same WlTouch.frame(). A client should treat these
                     events  as  a  single  logical  touch  point  update.   The   order   of   WlTouch.shape(),
                     WlTouch.orientation()  and  WlTouch.motion()  is  not guaranteed. A WlTouch.down() event is
                     guaranteed to occur before the first WlTouch.orientation() event for this touch ID but both
                     events may occur within the same WlTouch.frame().

                     The orientation describes the clockwise angle of a touchpoint's major axis to the  positive
                     surface  y-axis  and  is  normalized  to  the -180 to +180 degree range. The granularity of
                     orientation depends on the touch device, some devices only support binary  rotation  values
                     between 0 and 90 degrees.

                     This event is only sent by the compositor if the touch device supports orientation reports.

                     Parametersid (ArgumentType.Int) -- the unique ID of this touch point

                            • orientation  (ArgumentType.Fixed) -- angle between major axis and positive surface
                              y-axis in degrees

   Scanner Modules
   Argumet
       class pywayland.scanner.argument.Argument(name: str, type: ArgumentType, summary: str | None, interface:
       str | None, allow_null: bool, enum: str | None, description: Description | None)
              Argument to a request or event method

              Required attributes: name and type

              Optional attributes: summary, interface, and allow-null

              Child elements: description

              property argument: str
                     Output as an Argument

              property interface_class: str
                     Returns the Interface class name

                     Gives the class name for the Interface coresponding to the type of the argument.

              output_doc_param(printer: Printer) -> None
                     Document the argument as a parameter

              output_doc_ret(printer: Printer) -> None
                     Document the argument as a return

              property signature: str
                     Output as the argument appears in the signature.

       class pywayland.scanner.argument.ArgumentType(value, names=<not given>, *values, module=None,
       qualname=None, type=None, start=1, boundary=None)

   Entry
       class pywayland.scanner.entry.Entry(name: str, value: str, summary: str | None, since: str | None,
       description: Description | None)
              Scanner for enum entries

              Required attributes: name and value

              Optional attributes: summary and since

              Child elements: description

              output(enum_name: str, printer: Printer) -> None
                     Generate the output for the entry in the enum

   Enum
       class pywayland.scanner.enum.Enum(name: str, since: str | None, is_bitfield: bool, description:
       Description | None, entry: list[Entry])
              Scanner for enum objects

              Required attributes: name and since

              Child elements: description and entry

              output(printer: Printer) -> None
                     Generate the output for the enum to the printer

   Event
       class pywayland.scanner.event.Event(name: str, since: str | None, description: Description | None, arg:
       list[Argument])
              Scanner for event objects (server-side method)

              Required attributes: name

              Optional attributes: since

              Child elements: description and arg`

              property method_args: Iterator[str]
                     Generator of the arguments to the method

                     All arguments to be sent to ._post_event must be passed in

              output_body(printer: Printer, opcode: int) -> None
                     Output the body of the event to the printer

              output_doc_params(printer: Printer) -> None
                     Aguments documented as parameters

                     All arguments are event parameters.

   Interface
       class pywayland.scanner.interface.Interface(name: 'str', version: 'str', description: 'Description |
       None', enum: 'list[Enum]', event: 'list[Event]', request: 'list[Request]')

              property class_name: str
                     Returns the name of the class of the interface

                     Camel cases the name of the interface, to be used as the class name.

              output(printer: Printer, module_imports: dict[str, str]) -> None
                     Generate the output for the interface to the printer

              classmethod parse(element: Element) -> Interface
                     Scanner for interface objects

                     Required attributes: name and version

                     Child elements: description, request, event, enum

   Method
       class pywayland.scanner.method.Method(name: str, since: str | None, description: Description | None, arg:
       list[Argument])
              Scanner for methods

              Corresponds to event and requests defined on an interface

              imports(interface: str, module_imports: dict[str, str]) -> list[tuple[str, str]]
                     Get the imports required for each of the interfaces

                     Parametersinterface -- The name of the interface that the method is a part of.

                            • module_imports -- A mapping from the name of an interface in the associated module
                              that the interface comes from.

                     Returns
                            A list of 2-tuples, each specifying the path to an imported module and the  imported
                            class.

              output(printer: Printer, opcode: int, in_class: str, module_imports: dict[str, str]) -> None
                     Generate the output for the given method to the printer

              output_doc(printer: Printer) -> None
                     Output the documentation for the interface

   Printer
   Request
       class pywayland.scanner.request.Request(name: str, since: str | None, description: Description | None,
       arg: list[Argument], type: str | None)
              Scanner for request objects (client-side method)

              Required attributes: name

              Optional attributes: type and since

              Child elements: description and arg

              property marshal_args: Iterable[str]
                     Arguments sent to ._marshal

              property method_args: Iterable[str]
                     Generator of the arguments to the method

                     The new_id args are generated in marshaling the args, they do not appear in the args of the
                     method.

              output_body(printer: Printer, opcode: int) -> None
                     Output the body of the request to the printer

              output_doc_params(printer: Printer) -> None
                     Aguments documented as parameters

                     Anything that is not a new_id is

              output_doc_ret(printer: Printer) -> None
                     Aguments documented as return values

                     Arguments of type new_id are returned from requests.

              property return_type: str
                     The return type for the request.

   Scanner
   Using the Scanner module
       The  PyWayland  scanner  allows  you  to generate the protocol scanner output within Python scripts.  The
       general procedure to invoke the scanner will be to make a Protocol object, scan the input file, and  have
       the Protocol output to a directory.  These steps are done as:

          Protocol.parse_file(path_to_xml_file)
          Protocol.output(path_to_output_dir, {})

       See the definitions below for more information on using Protocol objects.

   Protocol Module
       class pywayland.scanner.Protocol(name: str, copyright: Copyright | None, description: Description | None,
       interface: list[Interface])
              Protocol scanner object

              Main scanner object that acts on the input xml files to generate protocol files.

              Required attributes: name

              Child elements: copyright?, description?, and interface+

              Parameters
                     input_file -- Name of input XML file

              output(output_dir: str, module_imports: dict[str, str]) -> None
                     Output the scanned files to the given directory

                     Parameters
                            output_dir (string) -- Path of directory to output protocol files to

   Utilities Module
   AnonymousFile Class
       class pywayland.utils.AnonymousFile(size: int)
              Anonymous file object

              Provides  access  to  anonymous  file  objects  that  can  be used by Wayland clients to render to
              surfaces.  Uses a method similar to Weston to open an anonymous file, so XDG_RUNTIME_DIR  must  be
              set for this to work properly.

              This  class provides a content manager, that is, it can be used with Python with statements, where
              the value returned is the file descriptor.

              close() -> None
                     Close the anonymous file

                     Closes the file descriptor and sets the fd property to None.  Does nothing if the  file  is
                     not open.

              open() -> None
                     Open an anonymous file

                     Opens  the  anonymous  file  and  sets the fd property to the file descriptor that has been
                     opened.

AUTHOR

       Sean Vig

COPYRIGHT

       2016, Sean Vig

0.4.18                                            Mar 08, 2025                                      PYWAYLAND(1)