alien-everywhere/shimming/alienkeyboardservice/protocols/xdg_shell_unstable_v5/xdg_popup.py

131 lines
5.1 KiB
Python
Raw Normal View History

2023-12-20 10:44:46 +00:00
# This file has been autogenerated by the pywayland scanner
# Copyright © 2008-2013 Kristian Høgsberg
# Copyright © 2013 Rafael Antognolli
# Copyright © 2013 Jasper St. Pierre
# Copyright © 2010-2013 Intel Corporation
#
# 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
from pywayland.protocol_core import Global, Interface, Proxy, Resource
class XdgPopup(Interface):
"""Short-lived, popup surfaces for menus
A popup surface is a short-lived, temporary surface that can be used to
implement menus. It takes an explicit grab on the surface that will be
dismissed when the user dismisses the popup. This can be done by the user
clicking outside the surface, using the keyboard, or even locking the
screen through closing the lid or a timeout.
When the popup is dismissed, a popup_done event will be sent out, and at
the same time the surface will be unmapped. The :class:`XdgPopup` object is
now inert and cannot be reactivated, so clients should destroy it.
Explicitly destroying the :class:`XdgPopup` object will also dismiss the
popup and unmap the surface.
Clients will receive events for all their surfaces during this grab (which
is an "owner-events" grab in X11 parlance). This is done so that users can
navigate through submenus and other "nested" popup windows without having
to dismiss the topmost popup.
Clients that want to dismiss the popup when another surface of their own is
clicked should dismiss the popup using the destroy request.
The parent surface must have either an
:class:`~pywayland.protocol.xdg_shell.XdgSurface` or :class:`XdgPopup`
role.
Specifying an :class:`XdgPopup` for the parent means that the popups are
nested, with this popup now being the topmost popup. Nested popups must be
destroyed in the reverse order they were created in, e.g. the only popup
you are allowed to destroy at all times is the topmost one.
If there is an existing popup when creating a new popup, the parent must be
the current topmost popup.
A parent surface must be mapped before the new popup is mapped.
When compositors choose to dismiss a popup, they will likely dismiss every
nested popup as well. When a compositor dismisses popups, it will follow
the same dismissing order as required from the client.
The x and y arguments passed when creating the popup object specify where
the top left of the popup should be placed, relative to the local surface
coordinates of the parent surface. See :func:`XdgShell.get_xdg_popup()
<pywayland.protocol.xdg_shell_unstable_v5.XdgShell.get_xdg_popup>`.
The client must call :func:`WlSurface.commit()
<pywayland.protocol.wayland.WlSurface.commit>` on the corresponding
:class:`~pywayland.protocol.wayland.WlSurface` for the :class:`XdgPopup`
state to take effect.
For a surface to be mapped by the compositor the client must have committed
both the :class:`XdgPopup` state and a buffer.
"""
name = "xdg_popup"
version = 1
class XdgPopupProxy(Proxy[XdgPopup]):
interface = XdgPopup
@XdgPopup.request()
def destroy(self) -> None:
"""Remove :class:`XdgPopup` interface
This destroys the popup. Explicitly destroying the :class:`XdgPopup`
object will also dismiss the popup, and unmap the surface.
If this :class:`XdgPopup` is not the "topmost" popup, a protocol error
will be sent.
"""
self._marshal(0)
self._destroy()
class XdgPopupResource(Resource):
interface = XdgPopup
@XdgPopup.event()
def popup_done(self) -> None:
"""Popup interaction is done
The popup_done event is sent out when a popup is dismissed by the
compositor. The client should destroy the :class:`XdgPopup` object at
this point.
"""
self._post_event(0)
class XdgPopupGlobal(Global):
interface = XdgPopup
XdgPopup._gen_c()
XdgPopup.proxy_class = XdgPopupProxy
XdgPopup.resource_class = XdgPopupResource
XdgPopup.global_class = XdgPopupGlobal