alien-everywhere/shimming/alienkeyboardservice/protocols/fullscreen_shell_unstable_v1/zwp_fullscreen_shell_v1.py

261 lines
11 KiB
Python

# This file has been autogenerated by the pywayland scanner
# Copyright © 2016 Yong Bakos
# Copyright © 2015 Jason Ekstrand
# Copyright © 2015 Jonas Ådahl
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice (including the next
# paragraph) shall be included in all copies or substantial portions of the
# Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
from __future__ import annotations
import enum
from pywayland.protocol_core import (
Argument,
ArgumentType,
Global,
Interface,
Proxy,
Resource,
)
from ..wayland import WlOutput
from ..wayland import WlSurface
from .zwp_fullscreen_shell_mode_feedback_v1 import ZwpFullscreenShellModeFeedbackV1
class ZwpFullscreenShellV1(Interface):
"""Displays a single surface per output
Displays a single surface per output.
This interface provides a mechanism for a single client to display simple
full-screen surfaces. While there technically may be multiple clients
bound to this interface, only one of those clients should be shown at a
time.
To present a surface, the client uses either the present_surface or
present_surface_for_mode requests. Presenting a surface takes effect on
the next :func:`WlSurface.commit()
<pywayland.protocol.wayland.WlSurface.commit>`. See the individual
requests for details about scaling and mode switches.
The client can have at most one surface per output at any time. Requesting
a surface to be presented on an output that already has a surface replaces
the previously presented surface. Presenting a null surface removes its
content and effectively disables the output. Exactly what happens when an
output is "disabled" is compositor-specific. The same surface may be
presented on multiple outputs simultaneously.
Once a surface is presented on an output, it stays on that output until
either the client removes it or the compositor destroys the output. This
way, the client can update the output's contents by simply attaching a new
buffer.
Warning! The protocol described in this file is experimental and backward
incompatible changes may be made. Backward compatible changes may be added
together with the corresponding interface version bump. Backward
incompatible changes are done by bumping the version number in the protocol
and interface names and resetting the interface version. Once the protocol
is to be declared stable, the 'z' prefix and the version number in the
protocol and interface names are removed and the interface version number
is reset.
"""
name = "zwp_fullscreen_shell_v1"
version = 1
class capability(enum.IntEnum):
arbitrary_modes = 1
cursor_plane = 2
class present_method(enum.IntEnum):
default = 0
center = 1
zoom = 2
zoom_crop = 3
stretch = 4
class error(enum.IntEnum):
invalid_method = 0
role = 1
class ZwpFullscreenShellV1Proxy(Proxy[ZwpFullscreenShellV1]):
interface = ZwpFullscreenShellV1
@ZwpFullscreenShellV1.request()
def release(self) -> None:
"""Release the wl_fullscreen_shell interface
Release the binding from the wl_fullscreen_shell interface.
This destroys the server-side object and frees this binding. If the
client binds to wl_fullscreen_shell multiple times, it may wish to free
some of those bindings.
"""
self._marshal(0)
self._destroy()
@ZwpFullscreenShellV1.request(
Argument(ArgumentType.Object, interface=WlSurface, nullable=True),
Argument(ArgumentType.Uint),
Argument(ArgumentType.Object, interface=WlOutput, nullable=True),
)
def present_surface(self, surface: WlSurface | None, method: int, output: WlOutput | None) -> None:
"""Present surface for display
Present a surface on the given output.
If the output is null, the compositor will present the surface on
whatever display (or displays) it thinks best. In particular, this may
replace any or all surfaces currently presented so it should not be
used in combination with placing surfaces on specific outputs.
The method parameter is a hint to the compositor for how the surface is
to be presented. In particular, it tells the compositor how to handle
a size mismatch between the presented surface and the output. The
compositor is free to ignore this parameter.
The "zoom", "zoom_crop", and "stretch" methods imply a scaling
operation on the surface. This will override any kind of output
scaling, so the buffer_scale property of the surface is effectively
ignored.
This request gives the surface the role of a fullscreen shell surface.
If the surface already has another role, it raises a role protocol
error.
:param surface:
:type surface:
:class:`~pywayland.protocol.wayland.WlSurface` or `None`
:param method:
:type method:
`ArgumentType.Uint`
:param output:
:type output:
:class:`~pywayland.protocol.wayland.WlOutput` or `None`
"""
self._marshal(1, surface, method, output)
@ZwpFullscreenShellV1.request(
Argument(ArgumentType.Object, interface=WlSurface),
Argument(ArgumentType.Object, interface=WlOutput),
Argument(ArgumentType.Int),
Argument(ArgumentType.NewId, interface=ZwpFullscreenShellModeFeedbackV1),
)
def present_surface_for_mode(self, surface: WlSurface, output: WlOutput, framerate: int) -> Proxy[ZwpFullscreenShellModeFeedbackV1]:
"""Present surface for display at a particular mode
Presents a surface on the given output for a particular mode.
If the current size of the output differs from that of the surface, the
compositor will attempt to change the size of the output to match the
surface. The result of the mode-switch operation will be returned via
the provided wl_fullscreen_shell_mode_feedback object.
If the current output mode matches the one requested or if the
compositor successfully switches the mode to match the surface, then
the mode_successful event will be sent and the output will contain the
contents of the given surface. If the compositor cannot match the
output size to the surface size, the mode_failed will be sent and the
output will contain the contents of the previously presented surface
(if any). If another surface is presented on the given output before
either of these has a chance to happen, the present_cancelled event
will be sent.
Due to race conditions and other issues unknown to the client, no mode-
switch operation is guaranteed to succeed. However, if the mode is one
advertised by :func:`WlOutput.mode()
<pywayland.protocol.wayland.WlOutput.mode>` or if the compositor
advertises the ARBITRARY_MODES capability, then the client should
expect that the mode-switch operation will usually succeed.
If the size of the presented surface changes, the resulting output is
undefined. The compositor may attempt to change the output mode to
compensate. However, there is no guarantee that a suitable mode will
be found and the client has no way to be notified of success or
failure.
The framerate parameter specifies the desired framerate for the output
in mHz. The compositor is free to ignore this parameter. A value of 0
indicates that the client has no preference.
If the value of :func:`WlOutput.scale()
<pywayland.protocol.wayland.WlOutput.scale>` differs from
:func:`WlSurface.buffer_scale()
<pywayland.protocol.wayland.WlSurface.buffer_scale>`, then the
compositor may choose a mode that matches either the buffer size or the
surface size. In either case, the surface will fill the output.
This request gives the surface the role of a fullscreen shell surface.
If the surface already has another role, it raises a role protocol
error.
:param surface:
:type surface:
:class:`~pywayland.protocol.wayland.WlSurface`
:param output:
:type output:
:class:`~pywayland.protocol.wayland.WlOutput`
:param framerate:
:type framerate:
`ArgumentType.Int`
:returns:
:class:`~pywayland.protocol.fullscreen_shell_unstable_v1.ZwpFullscreenShellModeFeedbackV1`
"""
feedback = self._marshal_constructor(2, ZwpFullscreenShellModeFeedbackV1, surface, output, framerate)
return feedback
class ZwpFullscreenShellV1Resource(Resource):
interface = ZwpFullscreenShellV1
@ZwpFullscreenShellV1.event(
Argument(ArgumentType.Uint),
)
def capability(self, capability: int) -> None:
"""Advertises a capability of the compositor
Advertises a single capability of the compositor.
When the wl_fullscreen_shell interface is bound, this event is emitted
once for each capability advertised. Valid capabilities are given by
the wl_fullscreen_shell.capability enum. If clients want to take
advantage of any of these capabilities, they should use a
:func:`WlDisplay.sync() <pywayland.protocol.wayland.WlDisplay.sync>`
request immediately after binding to ensure that they receive all the
capability events.
:param capability:
:type capability:
`ArgumentType.Uint`
"""
self._post_event(0, capability)
class ZwpFullscreenShellV1Global(Global):
interface = ZwpFullscreenShellV1
ZwpFullscreenShellV1._gen_c()
ZwpFullscreenShellV1.proxy_class = ZwpFullscreenShellV1Proxy
ZwpFullscreenShellV1.resource_class = ZwpFullscreenShellV1Resource
ZwpFullscreenShellV1.global_class = ZwpFullscreenShellV1Global