Add pointer_grab_start and end functions
authorChris Michael <cp.michael@samsung.com>
Fri, 14 Jun 2013 06:30:21 +0000 (07:30 +0100)
committerChris Michael <cp.michael@samsung.com>
Fri, 14 Jun 2013 06:30:21 +0000 (07:30 +0100)
Signed-off-by: Chris Michael <cp.michael@samsung.com>
src/bin/e_wayland/e_input.c
src/bin/e_wayland/e_input.h

index 55ac044a0092c3f9299ea7e84016780cd986ccf3..e71b4788610f086c09d843dafe2e9aa672a44852 100644 (file)
@@ -153,6 +153,31 @@ e_input_pointer_focus_set(E_Input_Pointer *pointer, E_Surface *surface, Evas_Coo
    wl_signal_emit(&pointer->signals.focus, pointer);
 }
 
+EAPI void 
+e_input_pointer_grab_start(E_Input_Pointer *pointer)
+{
+   if (!pointer) return;
+
+   if ((pointer->grab) && (pointer->grab->interface))
+     {
+        if (pointer->grab->interface->focus)
+          pointer->grab->interface->focus(pointer->grab);
+     }
+}
+
+EAPI void 
+e_input_pointer_grab_end(E_Input_Pointer *pointer)
+{
+   if (!pointer) return;
+
+   pointer->grab = &pointer->default_grab;
+   if ((pointer->grab) && (pointer->grab->interface))
+     {
+        if (pointer->grab->interface->focus)
+          pointer->grab->interface->focus(pointer->grab);
+     }
+}
+
 /* local functions */
 static void 
 _e_input_capabilities_update(E_Input *seat)
@@ -296,7 +321,8 @@ _e_input_pointer_grab_cb_button(E_Input_Pointer_Grab *grab, unsigned int timesta
         wl_pointer_send_button(res, serial, timestamp, button, state);
      }
 
-   if ((ptr->button_count == 0) && (state == WL_POINTER_BUTTON_STATE_RELEASED))
+   if ((ptr->grab->button_count == 0) && 
+       (state == WL_POINTER_BUTTON_STATE_RELEASED))
      {
         E_Surface *es;
 
index 12ae78df551f7ed9f48834f6d8c661e353f7c37a..e45ba00a86a53897f7ddbfdeca2b5840c4b0a8b2 100644 (file)
@@ -47,6 +47,14 @@ struct _E_Input_Pointer_Grab
 {
    E_Input_Pointer *pointer;
    E_Input_Pointer_Grab_Interface *interface;
+
+   Evas_Coord x, y;
+   unsigned int button, button_count;
+   unsigned int serial, timestamp;
+   Eina_Bool up : 1;
+
+   struct wl_client *client;
+   struct wl_list surfaces;
 };
 
 struct _E_Input_Pointer
@@ -67,10 +75,6 @@ struct _E_Input_Pointer
 
    E_Input_Pointer_Grab *grab;
    E_Input_Pointer_Grab default_grab;
-
-   Evas_Coord grab_x, grab_y;
-   unsigned int grab_button, button_count;
-   unsigned int grab_serial, grab_time;
 };
 
 EAPI Eina_Bool e_input_init(E_Compositor *comp, E_Input *seat, const char *name);
@@ -80,6 +84,8 @@ EAPI Eina_Bool e_input_keyboard_init(E_Input *seat);
 EAPI Eina_Bool e_input_touch_init(E_Input *seat);
 
 EAPI void e_input_pointer_focus_set(E_Input_Pointer *pointer, E_Surface *surface, Evas_Coord x, Evas_Coord y);
+EAPI void e_input_pointer_grab_start(E_Input_Pointer *pointer);
+EAPI void e_input_pointer_grab_end(E_Input_Pointer *pointer);
 
 # endif
 #endif