mirror of
https://github.com/glfw/glfw.git
synced 2024-11-14 02:31:46 +00:00
Wayland: Add boilerplate for clipboard handling
This commit is contained in:
parent
92b3fd02e5
commit
3c4b9a7eef
@ -705,6 +705,70 @@ static const struct wl_seat_listener seatListener = {
|
|||||||
seatHandleName,
|
seatHandleName,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void dataOfferHandleOffer(void* data,
|
||||||
|
struct wl_data_offer* dataOffer,
|
||||||
|
const char* mimeType)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct wl_data_offer_listener dataOfferListener = {
|
||||||
|
dataOfferHandleOffer,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void dataDeviceHandleDataOffer(void* data,
|
||||||
|
struct wl_data_device* dataDevice,
|
||||||
|
struct wl_data_offer* id)
|
||||||
|
{
|
||||||
|
if (_glfw.wl.dataOffer)
|
||||||
|
wl_data_offer_destroy(_glfw.wl.dataOffer);
|
||||||
|
|
||||||
|
_glfw.wl.dataOffer = id;
|
||||||
|
wl_data_offer_add_listener(_glfw.wl.dataOffer, &dataOfferListener, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dataDeviceHandleEnter(void* data,
|
||||||
|
struct wl_data_device* dataDevice,
|
||||||
|
uint32_t serial,
|
||||||
|
struct wl_surface *surface,
|
||||||
|
wl_fixed_t x,
|
||||||
|
wl_fixed_t y,
|
||||||
|
struct wl_data_offer *id)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dataDeviceHandleLeave(void* data,
|
||||||
|
struct wl_data_device* dataDevice)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dataDeviceHandleMotion(void* data,
|
||||||
|
struct wl_data_device* dataDevice,
|
||||||
|
uint32_t time,
|
||||||
|
wl_fixed_t x,
|
||||||
|
wl_fixed_t y)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dataDeviceHandleDrop(void* data,
|
||||||
|
struct wl_data_device* dataDevice)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void dataDeviceHandleSelection(void* data,
|
||||||
|
struct wl_data_device* dataDevice,
|
||||||
|
struct wl_data_offer* id)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct wl_data_device_listener dataDeviceListener = {
|
||||||
|
dataDeviceHandleDataOffer,
|
||||||
|
dataDeviceHandleEnter,
|
||||||
|
dataDeviceHandleLeave,
|
||||||
|
dataDeviceHandleMotion,
|
||||||
|
dataDeviceHandleDrop,
|
||||||
|
dataDeviceHandleSelection,
|
||||||
|
};
|
||||||
|
|
||||||
static void wmBaseHandlePing(void* data,
|
static void wmBaseHandlePing(void* data,
|
||||||
struct xdg_wm_base* wmBase,
|
struct xdg_wm_base* wmBase,
|
||||||
uint32_t serial)
|
uint32_t serial)
|
||||||
@ -759,6 +823,15 @@ static void registryHandleGlobal(void* data,
|
|||||||
wl_seat_add_listener(_glfw.wl.seat, &seatListener, NULL);
|
wl_seat_add_listener(_glfw.wl.seat, &seatListener, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (strcmp(interface, "wl_data_device_manager") == 0)
|
||||||
|
{
|
||||||
|
if (!_glfw.wl.dataDeviceManager)
|
||||||
|
{
|
||||||
|
_glfw.wl.dataDeviceManager =
|
||||||
|
wl_registry_bind(registry, name,
|
||||||
|
&wl_data_device_manager_interface, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (strcmp(interface, "xdg_wm_base") == 0)
|
else if (strcmp(interface, "xdg_wm_base") == 0)
|
||||||
{
|
{
|
||||||
_glfw.wl.wmBase =
|
_glfw.wl.wmBase =
|
||||||
@ -1117,6 +1190,14 @@ int _glfwPlatformInit(void)
|
|||||||
_glfw.wl.cursorTimerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC);
|
_glfw.wl.cursorTimerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_glfw.wl.seat && _glfw.wl.dataDeviceManager)
|
||||||
|
{
|
||||||
|
_glfw.wl.dataDevice =
|
||||||
|
wl_data_device_manager_get_data_device(_glfw.wl.dataDeviceManager,
|
||||||
|
_glfw.wl.seat);
|
||||||
|
wl_data_device_add_listener(_glfw.wl.dataDevice, &dataDeviceListener, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
return GLFW_TRUE;
|
return GLFW_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1174,6 +1255,12 @@ void _glfwPlatformTerminate(void)
|
|||||||
zxdg_decoration_manager_v1_destroy(_glfw.wl.decorationManager);
|
zxdg_decoration_manager_v1_destroy(_glfw.wl.decorationManager);
|
||||||
if (_glfw.wl.wmBase)
|
if (_glfw.wl.wmBase)
|
||||||
xdg_wm_base_destroy(_glfw.wl.wmBase);
|
xdg_wm_base_destroy(_glfw.wl.wmBase);
|
||||||
|
if (_glfw.wl.dataDevice)
|
||||||
|
wl_data_device_destroy(_glfw.wl.dataDevice);
|
||||||
|
if (_glfw.wl.dataOffer)
|
||||||
|
wl_data_offer_destroy(_glfw.wl.dataOffer);
|
||||||
|
if (_glfw.wl.dataDeviceManager)
|
||||||
|
wl_data_device_manager_destroy(_glfw.wl.dataDeviceManager);
|
||||||
if (_glfw.wl.pointer)
|
if (_glfw.wl.pointer)
|
||||||
wl_pointer_destroy(_glfw.wl.pointer);
|
wl_pointer_destroy(_glfw.wl.pointer);
|
||||||
if (_glfw.wl.keyboard)
|
if (_glfw.wl.keyboard)
|
||||||
|
@ -233,6 +233,9 @@ typedef struct _GLFWlibraryWayland
|
|||||||
struct wl_seat* seat;
|
struct wl_seat* seat;
|
||||||
struct wl_pointer* pointer;
|
struct wl_pointer* pointer;
|
||||||
struct wl_keyboard* keyboard;
|
struct wl_keyboard* keyboard;
|
||||||
|
struct wl_data_device_manager* dataDeviceManager;
|
||||||
|
struct wl_data_device* dataDevice;
|
||||||
|
struct wl_data_offer* dataOffer;
|
||||||
struct xdg_wm_base* wmBase;
|
struct xdg_wm_base* wmBase;
|
||||||
struct zxdg_decoration_manager_v1* decorationManager;
|
struct zxdg_decoration_manager_v1* decorationManager;
|
||||||
struct wp_viewporter* viewporter;
|
struct wp_viewporter* viewporter;
|
||||||
|
Loading…
Reference in New Issue
Block a user