new attempt to fix the hidden object event thing without breaking
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 25 Sep 2011 04:43:02 +0000 (04:43 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 25 Sep 2011 04:43:02 +0000 (04:43 +0000)
dnd... this makes for consistent behavior. :)

git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@63599 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/canvas/evas_object_main.c

index 3009224..96c6340 100644 (file)
@@ -413,6 +413,12 @@ evas_object_del(Evas_Object *obj)
    _evas_object_event_new();
    evas_object_event_callback_call(obj, EVAS_CALLBACK_DEL, NULL);
    _evas_post_event_callback_call(obj->layer->evas);
+   if (obj->mouse_grabbed > 0)
+      obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
+   if ((obj->mouse_in) || (obj->mouse_grabbed > 0))
+      obj->layer->evas->pointer.object.in = eina_list_remove(obj->layer->evas->pointer.object.in, obj);
+   obj->mouse_grabbed = 0;
+   obj->mouse_in = 0;
    if (obj->name) evas_object_name_set(obj, NULL);
    if (!obj->layer)
      {
@@ -907,15 +913,14 @@ evas_object_hide(Evas_Object *obj)
                                                obj->layer->evas->last_timestamp,
                                                NULL);
                   if (obj->delete_me) return;
+/* this is at odds to handling events when an obj is moved out of the mouse
+ * ore resized out or clipped out. if mouse is grabbed - regardless of
+ * visibility, mouse move events should keep happening and mouse up.
+ * for better or worse it's at least consistent.
                   if (obj->mouse_grabbed > 0)
-                    {
-//                    if (obj->layer->evas->pointer.mouse_grabbed >= obj->mouse_grabbed)
-                       obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
-                    }
+                    obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
                   if ((obj->mouse_in) || (obj->mouse_grabbed > 0))
-                    {
-                       obj->layer->evas->pointer.object.in = eina_list_remove(obj->layer->evas->pointer.object.in, obj);
-                    }
+                    obj->layer->evas->pointer.object.in = eina_list_remove(obj->layer->evas->pointer.object.in, obj);
                   obj->mouse_grabbed = 0;
                   if (obj->layer->evas->events_frozen > 0)
                     {
@@ -942,20 +947,20 @@ evas_object_hide(Evas_Object *obj)
                        evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev);
                        _evas_post_event_callback_call(obj->layer->evas);
                     }
+ */
                }
           }
      }
    else
      {
+/*        
         if (obj->mouse_grabbed > 0)
-          {
-//             if (obj->layer->evas->pointer.mouse_grabbed >= obj->mouse_grabbed)
-             obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
-          }
+          obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
         if ((obj->mouse_in) || (obj->mouse_grabbed > 0))
           obj->layer->evas->pointer.object.in = eina_list_remove(obj->layer->evas->pointer.object.in, obj);
         obj->mouse_grabbed = 0;
         obj->mouse_in = 0;
+ */
      }
    evas_object_inform_call_hide(obj);
 }