ecore-wl2: Add event and structure for dnd motion events
authorChris Michael <cp.michael@samsung.com>
Fri, 25 Sep 2015 14:41:08 +0000 (10:41 -0400)
committerChris Michael <cp.michael@samsung.com>
Thu, 3 Dec 2015 17:02:40 +0000 (12:02 -0500)
Signed-off-by: Chris Michael <cp.michael@samsung.com>
src/lib/ecore_wl2/Ecore_Wl2.h
src/lib/ecore_wl2/ecore_wl2.c
src/lib/ecore_wl2/ecore_wl2_dnd.c
src/lib/ecore_wl2/ecore_wl2_input.c

index ef6ccd1..3af9273 100644 (file)
@@ -73,6 +73,12 @@ typedef struct _Ecore_Wl2_Event_Dnd_Leave
    unsigned int win, source;
 } Ecore_Wl2_Event_Dnd_Leave;
 
+typedef struct _Ecore_Wl2_Event_Dnd_Motion
+{
+   unsigned int win, source, serial;
+   int x, y;
+} Ecore_Wl2_Event_Dnd_Motion;
+
 typedef enum _Ecore_Wl2_Window_Type
 {
    ECORE_WL2_WINDOW_TYPE_NONE,
@@ -91,6 +97,7 @@ EAPI extern int ECORE_WL2_EVENT_FOCUS_IN;
 EAPI extern int ECORE_WL2_EVENT_FOCUS_OUT;
 EAPI extern int ECORE_WL2_EVENT_DND_ENTER;
 EAPI extern int ECORE_WL2_EVENT_DND_LEAVE;
+EAPI extern int ECORE_WL2_EVENT_DND_MOTION;
 
 /**
  * @file
index d291b39..9ab17de 100644 (file)
@@ -17,6 +17,7 @@ EAPI int ECORE_WL2_EVENT_FOCUS_IN = 0;
 EAPI int ECORE_WL2_EVENT_FOCUS_OUT = 0;
 EAPI int ECORE_WL2_EVENT_DND_ENTER = 0;
 EAPI int ECORE_WL2_EVENT_DND_LEAVE = 0;
+EAPI int ECORE_WL2_EVENT_DND_MOTION = 0;
 
 static void
 _cb_wl_log_print(const char *format, va_list args)
@@ -65,6 +66,7 @@ ecore_wl2_init(void)
         ECORE_WL2_EVENT_FOCUS_OUT = ecore_event_type_new();
         ECORE_WL2_EVENT_DND_ENTER = ecore_event_type_new();
         ECORE_WL2_EVENT_DND_LEAVE = ecore_event_type_new();
+        ECORE_WL2_EVENT_DND_MOTION = ecore_event_type_new();
      }
 
    wl_log_set_handler_server(_cb_wl_log_print);
index ac315d6..4909142 100644 (file)
@@ -111,10 +111,24 @@ _ecore_wl2_dnd_leave(Ecore_Wl2_Input *input)
 void
 _ecore_wl2_dnd_motion(Ecore_Wl2_Input *input, int x, int y, unsigned int timestamp)
 {
+   Ecore_Wl2_Event_Dnd_Motion *ev;
+
    input->pointer.sx = x;
    input->pointer.sy = y;
 
-   /* TODO: raise dnd motion event */
+   ev = calloc(1, sizeof(Ecore_Wl2_Event_Dnd_Motion));
+   if (!ev) return;
+
+   if (input->focus.pointer)
+     ev->win = input->focus.pointer->id;
+   if (input->focus.keyboard)
+     ev->source = input->focus.keyboard->id;
+
+   ev->x = x;
+   ev->y = y;
+   ev->serial = timestamp;
+
+   ecore_event_add(ECORE_WL2_EVENT_DND_MOTION, ev, NULL, NULL);
 }
 
 void
index 0807efe..fbac931 100644 (file)
@@ -983,7 +983,7 @@ _data_cb_leave(void *data, struct wl_data_device *data_device EINA_UNUSED)
 }
 
 static void
-_data_cb_motion(void *data, struct wl_data_device *data_device, unsigned int timestamp, wl_fixed_t x, wl_fixed_t y)
+_data_cb_motion(void *data, struct wl_data_device *data_device EINA_UNUSED, unsigned int timestamp, wl_fixed_t x, wl_fixed_t y)
 {
    Ecore_Wl2_Input *input;