# This file has been autogenerated by the pywayland scanner

# Copyright © 2015, 2016 Red Hat
#
# 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 Argument, ArgumentType, Global, Interface, Proxy, Resource

from .wayland import WlSeat
from .wayland import WlSeatProxy


class ZwpPrimarySelectionDeviceManagerV1(Interface):
    """X primary selection emulation

    The primary selection device manager is a singleton global object that
    provides access to the primary selection. It allows to create
    wp_primary_selection_source objects, as well as retrieving the per-seat
    wp_primary_selection_device objects.
    """

    name = "zwp_primary_selection_device_manager_v1"
    version = 1


class ZwpPrimarySelectionDeviceV1(Interface):
    name = "zwp_primary_selection_device_v1"
    version = 1


class ZwpPrimarySelectionOfferV1(Interface):
    """Offer to transfer primary selection contents

    A wp_primary_selection_offer represents an offer to transfer the contents
    of the primary selection clipboard to the client. Similar to
    :class:`~pywayland.protocol.wayland.WlDataOffer`, the offer also describes
    the mime types that the data can be converted to and provides the
    mechanisms for transferring the data directly to the client.
    """

    name = "zwp_primary_selection_offer_v1"
    version = 1


class ZwpPrimarySelectionSourceV1(Interface):
    """Offer to replace the contents of the primary selection

    The source side of a wp_primary_selection_offer, it provides a way to
    describe the offered data and respond to requests to transfer the requested
    contents of the primary selection clipboard.
    """

    name = "zwp_primary_selection_source_v1"
    version = 1


class ZwpPrimarySelectionDeviceManagerV1Resource(Resource[ZwpPrimarySelectionDeviceManagerV1]):
    interface = ZwpPrimarySelectionDeviceManagerV1


class ZwpPrimarySelectionDeviceV1Resource(Resource[ZwpPrimarySelectionDeviceV1]):
    interface = ZwpPrimarySelectionDeviceV1

    @ZwpPrimarySelectionDeviceV1.event(
        Argument(ArgumentType.NewId, interface=ZwpPrimarySelectionOfferV1),
    )
    def data_offer(self, offer: ZwpPrimarySelectionOfferV1) -> None:
        """Introduce a new wp_primary_selection_offer

        Introduces a new wp_primary_selection_offer object that may be used to
        receive the current primary selection. Immediately following this
        event, the new wp_primary_selection_offer object will send
        wp_primary_selection_offer.offer events to describe the offered mime
        types.

        :param offer:
        :type offer:
            :class:`~pywayland.protocol.wp_primary_selection_unstable_v1.ZwpPrimarySelectionOfferV1`
        """
        self._post_event(0, offer)

    @ZwpPrimarySelectionDeviceV1.event(
        Argument(ArgumentType.Object, interface=ZwpPrimarySelectionOfferV1, nullable=True),
    )
    def selection(self, id: ZwpPrimarySelectionOfferV1 | None) -> None:
        """Advertise a new primary selection

        The wp_primary_selection_device.selection event is sent to notify the
        client of a new primary selection. This event is sent after the
        wp_primary_selection.data_offer event introducing this object, and
        after the offer has announced its mimetypes through
        wp_primary_selection_offer.offer.

        The data_offer is valid until a new offer or NULL is received or until
        the client loses keyboard focus. The client must destroy the previous
        selection data_offer, if any, upon receiving this event.

        :param id:
        :type id:
            :class:`~pywayland.protocol.wp_primary_selection_unstable_v1.ZwpPrimarySelectionOfferV1` or `None`
        """
        self._post_event(1, id)


class ZwpPrimarySelectionOfferV1Resource(Resource[ZwpPrimarySelectionOfferV1]):
    interface = ZwpPrimarySelectionOfferV1

    @ZwpPrimarySelectionOfferV1.event(
        Argument(ArgumentType.String),
    )
    def offer(self, mime_type: str) -> None:
        """Advertise offered mime type

        Sent immediately after creating announcing the
        wp_primary_selection_offer through
        wp_primary_selection_device.data_offer. One event is sent per offered
        mime type.

        :param mime_type:
        :type mime_type:
            `ArgumentType.String`
        """
        self._post_event(0, mime_type)


class ZwpPrimarySelectionSourceV1Resource(Resource[ZwpPrimarySelectionSourceV1]):
    interface = ZwpPrimarySelectionSourceV1

    @ZwpPrimarySelectionSourceV1.event(
        Argument(ArgumentType.String),
        Argument(ArgumentType.FileDescriptor),
    )
    def send(self, mime_type: str, fd: int) -> None:
        """Send the primary selection contents

        Request for the current primary selection contents from the client.
        Send the specified mime type over the passed file descriptor, then
        close it.

        :param mime_type:
        :type mime_type:
            `ArgumentType.String`
        :param fd:
        :type fd:
            `ArgumentType.FileDescriptor`
        """
        self._post_event(0, mime_type, fd)

    @ZwpPrimarySelectionSourceV1.event()
    def cancelled(self) -> None:
        """Request for primary selection contents was canceled

        This primary selection source is no longer valid. The client should
        clean up and destroy this primary selection source.
        """
        self._post_event(1)


class ZwpPrimarySelectionDeviceManagerV1Proxy(Proxy[ZwpPrimarySelectionDeviceManagerV1]):
    interface = ZwpPrimarySelectionDeviceManagerV1

    @ZwpPrimarySelectionDeviceManagerV1.request(
        Argument(ArgumentType.NewId, interface=ZwpPrimarySelectionSourceV1),
    )
    def create_source(self) -> ZwpPrimarySelectionSourceV1Proxy:
        """Create a new primary selection source

        Create a new primary selection source.

        :returns:
            :class:`~pywayland.protocol.wp_primary_selection_unstable_v1.ZwpPrimarySelectionSourceV1`
        """
        id = self._marshal_constructor(0, ZwpPrimarySelectionSourceV1)
        return id

    @ZwpPrimarySelectionDeviceManagerV1.request(
        Argument(ArgumentType.NewId, interface=ZwpPrimarySelectionDeviceV1),
        Argument(ArgumentType.Object, interface=WlSeat),
    )
    def get_device(self, seat: WlSeatProxy) -> ZwpPrimarySelectionDeviceV1Proxy:
        """Create a new primary selection device

        Create a new data device for a given seat.

        :param seat:
        :type seat:
            :class:`~pywayland.protocol.wayland.WlSeat`
        :returns:
            :class:`~pywayland.protocol.wp_primary_selection_unstable_v1.ZwpPrimarySelectionDeviceV1`
        """
        id = self._marshal_constructor(1, ZwpPrimarySelectionDeviceV1, seat)
        return id

    @ZwpPrimarySelectionDeviceManagerV1.request()
    def destroy(self) -> None:
        """Destroy the primary selection device manager

        Destroy the primary selection device manager.
        """
        self._marshal(2)
        self._destroy()


class ZwpPrimarySelectionDeviceV1Proxy(Proxy[ZwpPrimarySelectionDeviceV1]):
    interface = ZwpPrimarySelectionDeviceV1

    @ZwpPrimarySelectionDeviceV1.request(
        Argument(ArgumentType.Object, interface=ZwpPrimarySelectionSourceV1, nullable=True),
        Argument(ArgumentType.Uint),
    )
    def set_selection(self, source: ZwpPrimarySelectionSourceV1Proxy | None, serial: int) -> None:
        """Set the primary selection

        Replaces the current selection. The previous owner of the primary
        selection will receive a wp_primary_selection_source.cancelled event.

        To unset the selection, set the source to NULL.

        :param source:
        :type source:
            :class:`~pywayland.protocol.wp_primary_selection_unstable_v1.ZwpPrimarySelectionSourceV1` or `None`
        :param serial:
            serial of the event that triggered this request
        :type serial:
            `ArgumentType.Uint`
        """
        self._marshal(0, source, serial)

    @ZwpPrimarySelectionDeviceV1.request()
    def destroy(self) -> None:
        """Destroy the primary selection device

        Destroy the primary selection device.
        """
        self._marshal(1)
        self._destroy()


class ZwpPrimarySelectionOfferV1Proxy(Proxy[ZwpPrimarySelectionOfferV1]):
    interface = ZwpPrimarySelectionOfferV1

    @ZwpPrimarySelectionOfferV1.request(
        Argument(ArgumentType.String),
        Argument(ArgumentType.FileDescriptor),
    )
    def receive(self, mime_type: str, fd: int) -> None:
        """Request that the data is transferred

        To transfer the contents of the primary selection clipboard, the client
        issues this request and indicates the mime type that 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
        closes its end, at which point the transfer is complete.

        :param mime_type:
        :type mime_type:
            `ArgumentType.String`
        :param fd:
        :type fd:
            `ArgumentType.FileDescriptor`
        """
        self._marshal(0, mime_type, fd)

    @ZwpPrimarySelectionOfferV1.request()
    def destroy(self) -> None:
        """Destroy the primary selection offer

        Destroy the primary selection offer.
        """
        self._marshal(1)
        self._destroy()


class ZwpPrimarySelectionSourceV1Proxy(Proxy[ZwpPrimarySelectionSourceV1]):
    interface = ZwpPrimarySelectionSourceV1

    @ZwpPrimarySelectionSourceV1.request(
        Argument(ArgumentType.String),
    )
    def offer(self, mime_type: str) -> None:
        """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.

        :param mime_type:
        :type mime_type:
            `ArgumentType.String`
        """
        self._marshal(0, mime_type)

    @ZwpPrimarySelectionSourceV1.request()
    def destroy(self) -> None:
        """Destroy the primary selection source

        Destroy the primary selection source.
        """
        self._marshal(1)
        self._destroy()


class ZwpPrimarySelectionDeviceManagerV1Global(Global[ZwpPrimarySelectionDeviceManagerV1]):
    interface = ZwpPrimarySelectionDeviceManagerV1


class ZwpPrimarySelectionDeviceV1Global(Global[ZwpPrimarySelectionDeviceV1]):
    interface = ZwpPrimarySelectionDeviceV1


class ZwpPrimarySelectionOfferV1Global(Global[ZwpPrimarySelectionOfferV1]):
    interface = ZwpPrimarySelectionOfferV1


class ZwpPrimarySelectionSourceV1Global(Global[ZwpPrimarySelectionSourceV1]):
    interface = ZwpPrimarySelectionSourceV1


ZwpPrimarySelectionDeviceManagerV1._gen_c()
ZwpPrimarySelectionDeviceManagerV1.proxy_class = ZwpPrimarySelectionDeviceManagerV1Proxy
ZwpPrimarySelectionDeviceManagerV1.resource_class = ZwpPrimarySelectionDeviceManagerV1Resource
ZwpPrimarySelectionDeviceManagerV1.global_class = ZwpPrimarySelectionDeviceManagerV1Global


ZwpPrimarySelectionDeviceV1._gen_c()
ZwpPrimarySelectionDeviceV1.proxy_class = ZwpPrimarySelectionDeviceV1Proxy
ZwpPrimarySelectionDeviceV1.resource_class = ZwpPrimarySelectionDeviceV1Resource
ZwpPrimarySelectionDeviceV1.global_class = ZwpPrimarySelectionDeviceV1Global


ZwpPrimarySelectionOfferV1._gen_c()
ZwpPrimarySelectionOfferV1.proxy_class = ZwpPrimarySelectionOfferV1Proxy
ZwpPrimarySelectionOfferV1.resource_class = ZwpPrimarySelectionOfferV1Resource
ZwpPrimarySelectionOfferV1.global_class = ZwpPrimarySelectionOfferV1Global


ZwpPrimarySelectionSourceV1._gen_c()
ZwpPrimarySelectionSourceV1.proxy_class = ZwpPrimarySelectionSourceV1Proxy
ZwpPrimarySelectionSourceV1.resource_class = ZwpPrimarySelectionSourceV1Resource
ZwpPrimarySelectionSourceV1.global_class = ZwpPrimarySelectionSourceV1Global
