devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a80d4ef5a54b9252c3017c858de87ac6a2a39c16

commit a80d4ef5a54b9252c3017c858de87ac6a2a39c16
Author: Chris Michael <cp.mich...@samsung.com>
Date:   Tue Oct 25 14:18:58 2016 -0400

    ecore-wl2: Remove usage of libwayland-cursor
    
    This commit removes usage of libwayland-cursor inside Ecore_Wl2
    library. This is done so that EFL Wayland applications can use EFL
    mouse pointers and not look ugly :)
    
    @feature
    
    Signed-off-by: Chris Michael <cp.mich...@samsung.com>
---
 src/lib/ecore_wl2/ecore_wl2_input.c   | 115 +++-------------------------------
 src/lib/ecore_wl2/ecore_wl2_private.h |   8 +--
 src/lib/ecore_wl2/ecore_wl2_window.c  |   8 ++-
 3 files changed, 17 insertions(+), 114 deletions(-)

diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c 
b/src/lib/ecore_wl2/ecore_wl2_input.c
index 919d424..93fdb21 100644
--- a/src/lib/ecore_wl2/ecore_wl2_input.c
+++ b/src/lib/ecore_wl2/ecore_wl2_input.c
@@ -671,14 +671,7 @@ _pointer_cb_frame(void *data, struct wl_callback 
*callback, unsigned int timesta
         input->cursor.frame_cb = NULL;
      }
 
-   if (!input->cursor.name)
-     {
-        _ecore_wl2_input_cursor_set(input, NULL);
-        return;
-     }
-
-   if ((input->cursor.wl_cursor->image_count > 1) &&
-       (!input->cursor.frame_cb))
+   if (!input->cursor.frame_cb)
      {
         input->cursor.frame_cb = wl_surface_frame(input->cursor.surface);
         wl_callback_add_listener(input->cursor.frame_cb,
@@ -1146,18 +1139,9 @@ _seat_cb_capabilities(void *data, struct wl_seat *seat, 
enum wl_seat_capability
         input->wl.pointer = wl_seat_get_pointer(seat);
         wl_pointer_set_user_data(input->wl.pointer, input);
         wl_pointer_add_listener(input->wl.pointer, &_pointer_listener, input);
-
-        if (!input->cursor.surface)
-          {
-             input->cursor.surface =
-               wl_compositor_create_surface(input->display->wl.compositor);
-          }
      }
    else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && (input->wl.pointer))
      {
-        if (input->cursor.surface) wl_surface_destroy(input->cursor.surface);
-        input->cursor.surface = NULL;
-
 #ifdef WL_POINTER_RELEASE_SINCE_VERSION
         if (input->seat_version >= WL_POINTER_RELEASE_SINCE_VERSION)
           wl_pointer_release(input->wl.pointer);
@@ -1225,73 +1209,25 @@ _ecore_wl2_input_cursor_setup(Ecore_Wl2_Input *input)
    tmp = getenv("ECORE_WL_CURSOR_SIZE");
    if (tmp) input->cursor.size = atoi(tmp);
 
-   tmp = getenv("ECORE_WL_CURSOR_THEME_NAME");
-   eina_stringshare_replace(&input->cursor.theme_name, tmp);
-
    if (!input->cursor.name)
      input->cursor.name = eina_stringshare_add("left_ptr");
-
-   if (input->display->wl.shm)
-     {
-        input->cursor.theme =
-          wl_cursor_theme_load(input->cursor.theme_name, input->cursor.size,
-                               input->display->wl.shm);
-     }
 }
 
-static Eina_Bool
+Eina_Bool
 _ecore_wl2_input_cursor_update(void *data)
 {
    Ecore_Wl2_Input *input;
-   struct wl_cursor_image *image;
-   struct wl_buffer *buffer;
-   unsigned int delay = 0;
 
    input = data;
    if (!input) return EINA_FALSE;
 
-   image = input->cursor.wl_cursor->images[input->cursor.index];
-   if (!image) return EINA_FALSE;
-
-   buffer = wl_cursor_image_get_buffer(image);
-   if (buffer)
-     {
-        if (input->wl.pointer)
-          wl_pointer_set_cursor(input->wl.pointer, input->pointer.enter_serial,
-                                input->cursor.surface,
-                                image->hotspot_x, image->hotspot_y);
-
-        wl_surface_attach(input->cursor.surface, buffer, 0, 0);
-#ifdef WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION
-        if (input->display->wl.compositor_version >= 
WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION)
-           wl_surface_damage_buffer(input->cursor.surface,
-                                    0, 0, image->width, image->height);
-        else
-#endif
-           wl_surface_damage(input->cursor.surface,
-                             0, 0, image->width, image->height);
-        wl_surface_commit(input->cursor.surface);
-
-        if ((input->cursor.wl_cursor->image_count > 1) &&
-            (!input->cursor.frame_cb))
-          _pointer_cb_frame(input, NULL, 0);
-     }
-
-   if (input->cursor.wl_cursor->image_count <= 1)
-     return ECORE_CALLBACK_CANCEL;
-
-   delay = image->delay;
-   input->cursor.index =
-     (input->cursor.index + 1) % input->cursor.wl_cursor->image_count;
+   if (input->wl.pointer)
+     wl_pointer_set_cursor(input->wl.pointer, input->pointer.enter_serial,
+                           input->cursor.surface,
+                           input->cursor.hot_x, input->cursor.hot_y);
 
-   if (!input->cursor.timer)
-     {
-        input->cursor.timer =
-          ecore_timer_loop_add(delay / 1000.0,
-                               _ecore_wl2_input_cursor_update, input);
-     }
-   else
-     ecore_timer_interval_set(input->cursor.timer, delay / 1000.0);
+   if (!input->cursor.frame_cb)
+     _pointer_cb_frame(input, NULL, 0);
 
    return ECORE_CALLBACK_RENEW;
 }
@@ -1356,11 +1292,7 @@ _ecore_wl2_input_del(Ecore_Wl2_Input *input)
 
    _ecore_wl2_input_cursor_update_stop(input);
 
-   if (input->cursor.theme) wl_cursor_theme_destroy(input->cursor.theme);
-   if (input->cursor.surface) wl_surface_destroy(input->cursor.surface);
    if (input->cursor.name) eina_stringshare_del(input->cursor.name);
-   if (input->cursor.theme_name)
-     eina_stringshare_del(input->cursor.theme_name);
 
    if (input->data.types.data)
      {
@@ -1392,41 +1324,10 @@ _ecore_wl2_input_del(Ecore_Wl2_Input *input)
 void
 _ecore_wl2_input_cursor_set(Ecore_Wl2_Input *input, const char *cursor)
 {
-   struct wl_cursor *wl_cursor;
-
    _ecore_wl2_input_cursor_update_stop(input);
 
    eina_stringshare_replace(&input->cursor.name, cursor);
    if (!cursor) eina_stringshare_replace(&input->cursor.name, "left_ptr");
-
-   wl_cursor =
-     wl_cursor_theme_get_cursor(input->cursor.theme, input->cursor.name);
-   if (!wl_cursor)
-     {
-        wl_cursor =
-          wl_cursor_theme_get_cursor(input->cursor.theme, "left_ptr");
-     }
-
-   if (!wl_cursor)
-     {
-        ERR("Could not get Wayland Cursor from Cursor Theme: %s",
-            input->cursor.theme_name);
-        return;
-     }
-
-   input->cursor.wl_cursor = wl_cursor;
-
-   if ((!wl_cursor->images) || (!wl_cursor->images[0]))
-     {
-        if (input->wl.pointer)
-          wl_pointer_set_cursor(input->wl.pointer, input->pointer.enter_serial,
-                                NULL, 0, 0);
-        return;
-     }
-
-   input->cursor.index = 0;
-
-   _ecore_wl2_input_cursor_update(input);
 }
 
 void
diff --git a/src/lib/ecore_wl2/ecore_wl2_private.h 
b/src/lib/ecore_wl2/ecore_wl2_private.h
index f7055cf..ff5cdbf 100644
--- a/src/lib/ecore_wl2/ecore_wl2_private.h
+++ b/src/lib/ecore_wl2/ecore_wl2_private.h
@@ -353,12 +353,11 @@ struct _Ecore_Wl2_Input
 
    struct
      {
-        const char *name, *theme_name;
-        unsigned int index, size;
-        struct wl_cursor *wl_cursor;
-        struct wl_cursor_theme *theme;
+        const char *name;
+        unsigned int size;
         struct wl_surface *surface;
         struct wl_callback *frame_cb;
+        int hot_x, hot_y;
         Ecore_Timer *timer;
      } cursor;
 
@@ -447,6 +446,7 @@ void _ecore_wl2_input_ungrab(Ecore_Wl2_Input *input);
 void _ecore_wl2_input_grab(Ecore_Wl2_Input *input, Ecore_Wl2_Window *window, 
unsigned int button);
 
 void _ecore_wl2_input_cursor_set(Ecore_Wl2_Input *input, const char *cursor);
+Eina_Bool _ecore_wl2_input_cursor_update(void *data);
 void _ecore_wl2_input_cursor_update_stop(Ecore_Wl2_Input *input);
 
 void _ecore_wl2_dnd_add(Ecore_Wl2_Input *input, struct wl_data_offer *offer);
diff --git a/src/lib/ecore_wl2/ecore_wl2_window.c 
b/src/lib/ecore_wl2/ecore_wl2_window.c
index 31cf199..564d532 100644
--- a/src/lib/ecore_wl2/ecore_wl2_window.c
+++ b/src/lib/ecore_wl2/ecore_wl2_window.c
@@ -949,9 +949,11 @@ ecore_wl2_window_pointer_set(Ecore_Wl2_Window *window, 
struct wl_surface *surfac
 
    _ecore_wl2_input_cursor_update_stop(input);
 
-   if (input->wl.pointer)
-     wl_pointer_set_cursor(input->wl.pointer, input->pointer.enter_serial,
-                           surface, hot_x, hot_y);
+   input->cursor.surface = surface;
+   input->cursor.hot_x = hot_x;
+   input->cursor.hot_y = hot_y;
+
+   _ecore_wl2_input_cursor_update(input);
 }
 
 EAPI void

-- 


Reply via email to