
org.freedesktop.wayland.server.WlDataOfferResource Maven / Gradle / Ivy
Show all versions of wayland-server Show documentation
package org.freedesktop.wayland.server;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.freedesktop.wayland.util.Arguments;
import org.freedesktop.wayland.util.Interface;
import org.freedesktop.wayland.util.Message;
//
//
// Copyright © 2008-2011 Kristian Høgsberg
// Copyright © 2010-2011 Intel Corporation
// Copyright © 2012-2013 Collabora, Ltd.
//
// 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.
//
/**
* offer to transfer data
*
*
* A wl_data_offer 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.
*
*/
@Interface(
methods = {
@Message(
types = {
int.class,
java.lang.String.class
},
signature = "u?s",
functionName = "accept",
name = "accept"
)
,
@Message(
types = {
java.lang.String.class,
int.class
},
signature = "sh",
functionName = "receive",
name = "receive"
)
,
@Message(
types = {
},
signature = "",
functionName = "destroy",
name = "destroy"
)
,
@Message(
types = {
},
signature = "3",
functionName = "finish",
name = "finish"
)
,
@Message(
types = {
int.class,
int.class
},
signature = "3uu",
functionName = "setActions",
name = "set_actions"
)
},
name = "wl_data_offer",
version = 3,
events = {
@Message(
types = {
java.lang.String.class
},
signature = "s",
functionName = "offer",
name = "offer"
)
,
@Message(
types = {
int.class
},
signature = "3u",
functionName = "sourceActions",
name = "source_actions"
)
,
@Message(
types = {
int.class
},
signature = "3u",
functionName = "action",
name = "action"
)
}
)
public class WlDataOfferResource extends Resource {
public static final String INTERFACE_NAME = "wl_data_offer";
public WlDataOfferResource(Client client, int version, int id, WlDataOfferRequests implementation) {
super(client, version, id, implementation);
}
public WlDataOfferResource(Long pointer) {
super(pointer);
}
/**
* advertise offered mime type
*
*
* Sent immediately after creating the wl_data_offer object. One
* event per offered mime type.
*
* @param mimeType offered mime type
*/
public void offer(@Nonnull String mimeType) {
postEvent(0,Arguments.create(1).set(0, mimeType));
}
/**
* notify the source-side available actions
*
*
* This event indicates the actions offered by the data source. It
* will be sent right after wl_data_device.enter, or anytime the source
* side changes its offered actions through wl_data_source.set_actions.
*
* @param sourceActions actions offered by the data source
*/
public void sourceActions(int sourceActions) {
if (getVersion() < 3) {
throw new UnsupportedOperationException("This object is version "+getVersion()+" while version 3 is required for this operation.");
}
postEvent(1,Arguments.create(1).set(0, sourceActions));
}
/**
* 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
* wl_data_offer.set_actions.
*
* This event will no longer be emitted after wl_data_device.drop
* happened on the drag-and-drop destination, the client must
* honor the last action received, or the last preferred one set
* through wl_data_offer.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 wl_data_device.drop, the chosen action may change (e.g.
* due to keyboard modifiers being pressed). At the time of receiving
* wl_data_device.drop the drag-and-drop destination must honor the
* last action received.
*
* Action changes may still happen after wl_data_device.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 wl_data_offer.source_actions and finally chosen by the
* user (e.g. popping up a menu with the available options). The
* final wl_data_offer.set_actions and wl_data_offer.accept requests
* must happen before the call to wl_data_offer.finish.
*
* @param dndAction action selected by the compositor
*/
public void action(int dndAction) {
if (getVersion() < 3) {
throw new UnsupportedOperationException("This object is version "+getVersion()+" while version 3 is required for this operation.");
}
postEvent(2,Arguments.create(1).set(0, dndAction));
}
}