e_dnd: ungrab input once when drag end 55/299555/1
authorJunseok Kim <juns.kim@samsung.com>
Wed, 4 Oct 2023 07:19:27 +0000 (16:19 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 5 Oct 2023 02:22:37 +0000 (11:22 +0900)
Change-Id: Ie59abe44d2cf0cad488e07b805499f085add235f

src/bin/e_dnd.c
src/bin/e_dnd.h

index 0eeeaa1..582a8d2 100644 (file)
@@ -112,6 +112,7 @@ _e_drag_finalize(E_Drag *drag, int x, int y)
         _drag_win = 0;
         return 0;
      }
+   drag->input_grab = EINA_TRUE;
 
    if (!drag->object)
      {
@@ -267,14 +268,20 @@ _e_drag_end(E_Drag *drag, E_Dnd_Drop_Type type)
      drag->cb.finished(drag, type);
    drag->cb.finished = NULL;
 
-   e_object_del(E_OBJECT(drag));
+   if (drag->input_grab)
+     {
+        e_comp_ungrab_input(1, 1);
+        drag->input_grab = EINA_FALSE;
+     }
 
-   e_comp_ungrab_input(1, 1);
+   e_object_del(E_OBJECT(drag));
 }
 
 static void
 _e_drag_free(E_Drag *drag)
 {
+   Eina_Bool input_grab = drag->input_grab;
+
    if (drag == _drag_current)
      {
         e_grabinput_release(_drag_win, _drag_win);
@@ -289,7 +296,8 @@ _e_drag_free(E_Drag *drag)
    evas_object_hide(drag->comp_object);
    E_FREE_FUNC(drag->comp_object, evas_object_del);
    free(drag);
-   e_comp_ungrab_input(1, 1);
+   if (input_grab)
+     e_comp_ungrab_input(1, 1);
    _drag_win = 0;
 }
 
index 4b623e1..1efe1bd 100644 (file)
@@ -43,6 +43,7 @@ struct _E_Drag
    unsigned int       button_mask;
 
    unsigned char      visible : 1;
+   Eina_Bool          input_grab;
 };
 
 EINTERN int          e_dnd_init(void);