Add ecore_win32_cursor_show() API and ecore_evas_win32_cursor_(un)set() functions
authorVincent Torri <vincent.torri@gmail.com>
Fri, 7 Jul 2017 14:54:34 +0000 (16:54 +0200)
committerMarcel Hollerbach <marcel-hollerbach@t-online.de>
Sun, 9 Jul 2017 11:34:09 +0000 (13:34 +0200)
This fixes double mouse cursor in elm entries on Windows (for example)

@feature
@fix

src/lib/ecore_win32/Ecore_Win32.h
src/lib/ecore_win32/ecore_win32_cursor.c
src/modules/ecore_evas/engines/win32/ecore_evas_win32.c

index 34e8596..356200f 100644 (file)
@@ -675,6 +675,8 @@ EAPI const Ecore_Win32_Cursor *ecore_win32_cursor_x11_shaped_get(Ecore_Win32_Cur
 
 EAPI void                ecore_win32_cursor_size_get(int *width, int *height);
 
+EAPI void                ecore_win32_cursor_show(Eina_Bool show);
+
 
 
 /* Drag and drop */
index cb95a53..490e4f4 100644 (file)
@@ -355,6 +355,14 @@ ecore_win32_cursor_size_get(int *width, int *height)
    if (*height) *height = GetSystemMetrics(SM_CYCURSOR);
 }
 
+EAPI void
+ecore_win32_cursor_show(Eina_Bool show)
+{
+   INF("show cursor");
+
+   ShowCursor(show ? TRUE : FALSE);
+}
+
 /**
  * @}
  */
index 2cdc1b5..2f8a684 100644 (file)
@@ -909,6 +909,22 @@ _ecore_evas_win32_size_step_set(Ecore_Evas *ee, int width, int height)
 }
 
 static void
+_ecore_evas_win32_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj,
+                                    int layer EINA_UNUSED,
+                                    int hot_x EINA_UNUSED,
+                                    int hot_y EINA_UNUSED)
+{
+   if (obj != _ecore_evas_default_cursor_image_get(ee))
+     ecore_win32_cursor_show(EINA_FALSE);
+}
+
+static void
+_ecore_evas_win32_object_cursor_unset(Ecore_Evas *ee)
+{
+   ecore_win32_cursor_show(EINA_TRUE);
+}
+
+static void
 _ecore_evas_win32_focus_set(Ecore_Evas *ee, Eina_Bool on EINA_UNUSED)
 {
    ecore_win32_window_focus((Ecore_Win32_Window *)ee->prop.window);
@@ -1212,8 +1228,8 @@ static Ecore_Evas_Engine_Func _ecore_win32_engine_func =
      _ecore_evas_win32_size_max_set,
      _ecore_evas_win32_size_base_set,
      _ecore_evas_win32_size_step_set,
-     NULL,
-     NULL,
+     _ecore_evas_win32_object_cursor_set,
+     _ecore_evas_win32_object_cursor_unset,
      NULL, /* _ecore_evas_x_layer_set */
      _ecore_evas_win32_focus_set,
      _ecore_evas_win32_iconified_set,