forked from enlightenment/efl
Ecore_Wayland: Some more work on getting drag-n-drop flushed out.
SVN revision: 67182
This commit is contained in:
parent
dbe6f16717
commit
3b13af75a6
|
@ -23,6 +23,8 @@ typedef struct _Ecore_Wl_Event_Mouse_Out Ecore_Wl_Event_Mouse_Out;
|
||||||
typedef struct _Ecore_Wl_Event_Focus_In Ecore_Wl_Event_Focus_In;
|
typedef struct _Ecore_Wl_Event_Focus_In Ecore_Wl_Event_Focus_In;
|
||||||
typedef struct _Ecore_Wl_Event_Focus_Out Ecore_Wl_Event_Focus_Out;
|
typedef struct _Ecore_Wl_Event_Focus_Out Ecore_Wl_Event_Focus_Out;
|
||||||
|
|
||||||
|
typedef struct _Ecore_Wl_Drag_Source Ecore_Wl_Drag_Source;
|
||||||
|
|
||||||
typedef struct _Ecore_Wl_Event_Drag_Start Ecore_Wl_Event_Drag_Start;
|
typedef struct _Ecore_Wl_Event_Drag_Start Ecore_Wl_Event_Drag_Start;
|
||||||
typedef struct _Ecore_Wl_Event_Drag_Stop Ecore_Wl_Event_Drag_Stop;
|
typedef struct _Ecore_Wl_Event_Drag_Stop Ecore_Wl_Event_Drag_Stop;
|
||||||
|
|
||||||
|
@ -106,8 +108,10 @@ EAPI unsigned int ecore_wl_format_get(void);
|
||||||
EAPI void ecore_wl_flush(void);
|
EAPI void ecore_wl_flush(void);
|
||||||
EAPI void ecore_wl_sync(void);
|
EAPI void ecore_wl_sync(void);
|
||||||
EAPI void ecore_wl_pointer_xy_get(int *x, int *y);
|
EAPI void ecore_wl_pointer_xy_get(int *x, int *y);
|
||||||
EAPI void ecore_wl_drag_start();
|
|
||||||
EAPI void ecore_wl_drag_stop();
|
EAPI Ecore_Wl_Drag_Source *ecore_wl_drag_source_create(int hotspot_x, int hotspot_y, int offset_x, int offset_y, const char *mimetype, unsigned int timestamp, void *data);
|
||||||
|
EAPI void ecore_wl_drag_start(Ecore_Wl_Drag_Source *source, struct wl_surface *surface);
|
||||||
|
EAPI void ecore_wl_drag_stop(void);
|
||||||
|
|
||||||
EAPI extern int ECORE_WL_EVENT_MOUSE_IN;
|
EAPI extern int ECORE_WL_EVENT_MOUSE_IN;
|
||||||
EAPI extern int ECORE_WL_EVENT_MOUSE_OUT;
|
EAPI extern int ECORE_WL_EVENT_MOUSE_OUT;
|
||||||
|
|
|
@ -180,6 +180,8 @@ ecore_wl_init(const char *name)
|
||||||
ECORE_WL_EVENT_MOUSE_OUT = ecore_event_type_new();
|
ECORE_WL_EVENT_MOUSE_OUT = ecore_event_type_new();
|
||||||
ECORE_WL_EVENT_FOCUS_IN = ecore_event_type_new();
|
ECORE_WL_EVENT_FOCUS_IN = ecore_event_type_new();
|
||||||
ECORE_WL_EVENT_FOCUS_OUT = ecore_event_type_new();
|
ECORE_WL_EVENT_FOCUS_OUT = ecore_event_type_new();
|
||||||
|
ECORE_WL_EVENT_DRAG_START = ecore_event_type_new();
|
||||||
|
ECORE_WL_EVENT_DRAG_STOP = ecore_event_type_new();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* init xkb */
|
/* init xkb */
|
||||||
|
@ -307,6 +309,49 @@ ecore_wl_pointer_xy_get(int *x, int *y)
|
||||||
if (y) *y = _ecore_wl_screen_y;
|
if (y) *y = _ecore_wl_screen_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Ecore_Wl_Drag_Source *
|
||||||
|
ecore_wl_drag_source_create(int hotspot_x, int hotspot_y, int offset_x, int offset_y, const char *mimetype, unsigned int timestamp, void *data)
|
||||||
|
{
|
||||||
|
Ecore_Wl_Drag_Source *source;
|
||||||
|
|
||||||
|
if (!(source = calloc(1, sizeof(Ecore_Wl_Drag_Source)))) return NULL;
|
||||||
|
|
||||||
|
source->data_dev = _ecore_wl_data_dev;
|
||||||
|
source->hotspot_x = hotspot_x;
|
||||||
|
source->hotspot_y = hotspot_y;
|
||||||
|
source->offset_x = offset_x;
|
||||||
|
source->offset_y = offset_y;
|
||||||
|
source->mimetype = mimetype;
|
||||||
|
source->timestamp = timestamp;
|
||||||
|
source->data = data;
|
||||||
|
|
||||||
|
source->data_source =
|
||||||
|
wl_data_device_manager_create_data_source(_ecore_wl_data_manager);
|
||||||
|
|
||||||
|
wl_data_source_add_listener(source->data_source,
|
||||||
|
&_ecore_wl_source_listener, source);
|
||||||
|
|
||||||
|
wl_data_source_offer(source->data_source, source->mimetype);
|
||||||
|
|
||||||
|
/* NB: Do we add some default mimetypes here ?? */
|
||||||
|
/* text/plain, etc */
|
||||||
|
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_wl_drag_start(Ecore_Wl_Drag_Source *source, struct wl_surface *surface)
|
||||||
|
{
|
||||||
|
wl_data_device_start_drag(source->data_dev, source->data_source,
|
||||||
|
surface, source->timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_wl_drag_stop(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* local functions */
|
/* local functions */
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_ecore_wl_shutdown(Eina_Bool close_display)
|
_ecore_wl_shutdown(Eina_Bool close_display)
|
||||||
|
@ -617,6 +662,8 @@ _ecore_wl_cb_handle_touch_down(void *data __UNUSED__, struct wl_input_device *de
|
||||||
{
|
{
|
||||||
Ecore_Event_Mouse_Button *ev;
|
Ecore_Event_Mouse_Button *ev;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
|
||||||
_ecore_wl_touch_surface = surface;
|
_ecore_wl_touch_surface = surface;
|
||||||
_ecore_wl_touch_x = x;
|
_ecore_wl_touch_x = x;
|
||||||
_ecore_wl_touch_y = y;
|
_ecore_wl_touch_y = y;
|
||||||
|
@ -668,6 +715,8 @@ _ecore_wl_cb_handle_touch_up(void *data __UNUSED__, struct wl_input_device *dev
|
||||||
{
|
{
|
||||||
Ecore_Event_Mouse_Button *ev;
|
Ecore_Event_Mouse_Button *ev;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
|
||||||
if (!(ev = malloc(sizeof(Ecore_Event_Mouse_Button)))) return;
|
if (!(ev = malloc(sizeof(Ecore_Event_Mouse_Button)))) return;
|
||||||
|
|
||||||
ev->timestamp = timestamp;
|
ev->timestamp = timestamp;
|
||||||
|
@ -718,6 +767,8 @@ _ecore_wl_cb_handle_touch_motion(void *data __UNUSED__, struct wl_input_device *
|
||||||
{
|
{
|
||||||
Ecore_Event_Mouse_Move *ev;
|
Ecore_Event_Mouse_Move *ev;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
|
||||||
if (!_ecore_wl_touch_surface) return;
|
if (!_ecore_wl_touch_surface) return;
|
||||||
|
|
||||||
if (!(ev = malloc(sizeof(Ecore_Event_Mouse_Move)))) return;
|
if (!(ev = malloc(sizeof(Ecore_Event_Mouse_Move)))) return;
|
||||||
|
@ -760,12 +811,16 @@ _ecore_wl_cb_handle_touch_motion(void *data __UNUSED__, struct wl_input_device *
|
||||||
static void
|
static void
|
||||||
_ecore_wl_cb_handle_touch_frame(void *data __UNUSED__, struct wl_input_device *dev __UNUSED__)
|
_ecore_wl_cb_handle_touch_frame(void *data __UNUSED__, struct wl_input_device *dev __UNUSED__)
|
||||||
{
|
{
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
|
||||||
/* FIXME: Need to get a device and actually test what happens here */
|
/* FIXME: Need to get a device and actually test what happens here */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ecore_wl_cb_handle_touch_cancel(void *data __UNUSED__, struct wl_input_device *dev __UNUSED__)
|
_ecore_wl_cb_handle_touch_cancel(void *data __UNUSED__, struct wl_input_device *dev __UNUSED__)
|
||||||
{
|
{
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
|
||||||
/* FIXME: Need to get a device and actually test what happens here */
|
/* FIXME: Need to get a device and actually test what happens here */
|
||||||
_ecore_wl_touch_surface = NULL;
|
_ecore_wl_touch_surface = NULL;
|
||||||
}
|
}
|
||||||
|
@ -773,25 +828,17 @@ _ecore_wl_cb_handle_touch_cancel(void *data __UNUSED__, struct wl_input_device *
|
||||||
static void
|
static void
|
||||||
_ecore_wl_cb_source_target(void *data, struct wl_data_source *source, const char *mime_type)
|
_ecore_wl_cb_source_target(void *data, struct wl_data_source *source, const char *mime_type)
|
||||||
{
|
{
|
||||||
Ecore_Wl_Event_Drag_Start *ev;
|
/* Ecore_Wl_Drag_Source *source; */
|
||||||
|
|
||||||
if (!(ev = calloc(1, sizeof(Ecore_Wl_Event_Drag_Start)))) return;
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
|
||||||
|
/* if (!(source = data)) return; */
|
||||||
|
|
||||||
// wl_data_device_set_user_data(data_dev, source);
|
// wl_data_device_set_user_data(data_dev, source);
|
||||||
|
|
||||||
/* ev->device = ; */
|
|
||||||
/* ev->surface = ; */
|
|
||||||
/* ev->mime_type = mime_type; */
|
|
||||||
/* ev->timestamp = ; */
|
|
||||||
|
|
||||||
/* will need to pass the device to the callback/event */
|
|
||||||
/* raise a callback/event to have Ecore_Evas do: */
|
|
||||||
|
|
||||||
/* create a surface & buffer to represent the dragging object */
|
/* create a surface & buffer to represent the dragging object */
|
||||||
/* attach buffer to the surface */
|
/* attach buffer to the surface */
|
||||||
/* attach to device */
|
/* attach to device */
|
||||||
|
|
||||||
ecore_event_add(ECORE_WL_EVENT_DRAG_START, ev, NULL, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -877,7 +924,7 @@ _ecore_wl_mouse_move_send(uint32_t timestamp)
|
||||||
{
|
{
|
||||||
Ecore_Event_Mouse_Move *ev;
|
Ecore_Event_Mouse_Move *ev;
|
||||||
|
|
||||||
if (!_ecore_wl_input_surface) return;
|
// if (!_ecore_wl_input_surface) return;
|
||||||
|
|
||||||
if (!(ev = malloc(sizeof(Ecore_Event_Mouse_Move)))) return;
|
if (!(ev = malloc(sizeof(Ecore_Event_Mouse_Move)))) return;
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,27 @@ typedef struct _Ecore_Wl_Dnd_Source
|
||||||
|
|
||||||
typedef struct _Ecore_Wl_Dnd_Target
|
typedef struct _Ecore_Wl_Dnd_Target
|
||||||
{
|
{
|
||||||
|
/* NB: These are not the real fields for this structure,
|
||||||
|
* and it is Bound to change....soon */
|
||||||
|
struct wl_data_offer *offer;
|
||||||
|
int refs;
|
||||||
|
|
||||||
|
Eina_Array *types;
|
||||||
|
|
||||||
|
void *data;
|
||||||
} Ecore_Wl_Dnd_Target;
|
} Ecore_Wl_Dnd_Target;
|
||||||
|
|
||||||
|
struct _Ecore_Wl_Drag_Source
|
||||||
|
{
|
||||||
|
struct wl_data_device *data_dev;
|
||||||
|
|
||||||
|
int32_t hotspot_x, hotspot_y;
|
||||||
|
int32_t offset_x, offset_y;
|
||||||
|
const char *mimetype;
|
||||||
|
uint32_t timestamp;
|
||||||
|
void *data;
|
||||||
|
|
||||||
|
struct wl_data_source *data_source;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue