devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=1eddc939434b60c1855c560d528fd913534cb9f3

commit 1eddc939434b60c1855c560d528fd913534cb9f3
Author: Christopher Michael <devilho...@comcast.net>
Date:   Thu Jan 21 12:07:15 2021 -0500

    e_pointer: Reset mouse pointer when we return from blanking or desklock
    
    This should fix the issue of mouse pointer getting stuck in
    move/resize mode if mouse over move/resize area when desklock or
    blanking kicks in
---
 src/bin/e_desklock.c    |  2 ++
 src/bin/e_pointer.c     | 17 ++++++++++++++++-
 src/bin/e_pointer.h     |  2 ++
 src/bin/e_screensaver.c |  4 ++++
 4 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/bin/e_desklock.c b/src/bin/e_desklock.c
index 15a242aef..b78a93988 100644
--- a/src/bin/e_desklock.c
+++ b/src/bin/e_desklock.c
@@ -407,6 +407,8 @@ _desklock_hide_internal(void)
      }
 
    if (getenv("E_START_MANAGER")) kill(getppid(), SIGHUP);
+
+   e_pointer_reset(e_comp->pointer);
 }
 
 E_API int
diff --git a/src/bin/e_pointer.c b/src/bin/e_pointer.c
index 93865c3ea..a8d9918cc 100644
--- a/src/bin/e_pointer.c
+++ b/src/bin/e_pointer.c
@@ -682,7 +682,7 @@ e_pointer_type_pop(E_Pointer *ptr, void *obj, const char 
*type)
 
    _e_pointer_type_set(ptr, stack->type);
 
-   eina_stringshare_replace(&ptr->type, stack->type);
+   /* eina_stringshare_replace(&ptr->type, stack->type); */
 }
 
 E_API void
@@ -887,6 +887,21 @@ e_pointer_grab_set(E_Pointer *ptr, Eina_Bool grab)
      }
 }
 
+E_API void
+e_pointer_reset(E_Pointer *ptr)
+{
+   EINA_SAFETY_ON_NULL_RETURN(ptr);
+
+   /* free stack of pointer types */
+   E_FREE_LIST(ptr->stack, _e_pointer_stack_free);
+
+   eina_stringshare_del(ptr->type);
+   eina_stringshare_del(ptr->deferred_type);
+
+   /* reset pointer to default */
+   e_pointer_type_push(ptr, ptr, "default");
+}
+
 EINTERN void
 e_pointers_freeze_set(Eina_Bool set)
 {
diff --git a/src/bin/e_pointer.h b/src/bin/e_pointer.h
index 1ce0dc8c6..1b7ce579d 100644
--- a/src/bin/e_pointer.h
+++ b/src/bin/e_pointer.h
@@ -84,5 +84,7 @@ E_API void e_pointer_idler_before(void);
 E_API void e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int 
y);
 E_API void e_pointer_window_add(E_Pointer *ptr, Ecore_Window win);
 E_API void e_pointer_grab_set(E_Pointer *ptr, Eina_Bool grab);
+E_API void e_pointer_reset(E_Pointer *ptr);
+
 # endif
 #endif
diff --git a/src/bin/e_screensaver.c b/src/bin/e_screensaver.c
index 5a6fd930d..60b142ffa 100644
--- a/src/bin/e_screensaver.c
+++ b/src/bin/e_screensaver.c
@@ -227,6 +227,10 @@ _e_screensaver_handler_screensaver_off_cb(void *data 
EINA_UNUSED, int type EINA_
         ecore_timer_del(_e_screensaver_suspend_timer);
         _e_screensaver_suspend_timer = NULL;
      }
+
+   if (!e_desklock_state_get())
+     e_pointer_reset(e_comp->pointer);
+
    return ECORE_CALLBACK_PASS_ON;
 }
 

-- 


Reply via email to