Provided by: python3-pywayland_0.4.18-2_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

       2024, Sean Vig