|
|
|
@ -705,6 +705,70 @@ static const struct wl_seat_listener seatListener = { |
|
|
|
|
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, |
|
|
|
|
struct xdg_wm_base* wmBase, |
|
|
|
|
uint32_t serial) |
|
|
|
@ -759,6 +823,15 @@ static void registryHandleGlobal(void* data, |
|
|
|
|
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) |
|
|
|
|
{ |
|
|
|
|
_glfw.wl.wmBase = |
|
|
|
@ -1117,6 +1190,14 @@ int _glfwPlatformInit(void) |
|
|
|
|
_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; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -1174,6 +1255,12 @@ void _glfwPlatformTerminate(void) |
|
|
|
|
zxdg_decoration_manager_v1_destroy(_glfw.wl.decorationManager); |
|
|
|
|
if (_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) |
|
|
|
|
wl_pointer_destroy(_glfw.wl.pointer); |
|
|
|
|
if (_glfw.wl.keyboard) |
|
|
|
|