REVERT commits 60787 and 60788 by tasn. BORK mouse in/out (e17 menus)
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 29 Jun 2011 03:14:57 +0000 (03:14 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 29 Jun 2011 03:14:57 +0000 (03:14 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@60790 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/canvas/evas_events.c

index 9c02b12..281c909 100644 (file)
@@ -204,6 +204,7 @@ EAPI void
 evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data)
 {
    Eina_List *l, *copy;
+   Eina_List *ins;
    Evas_Event_Mouse_Down ev;
    Evas_Object *obj;
 
@@ -233,17 +234,11 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
    ev.event_flags = EVAS_EVENT_FLAG_NONE;
 
    _evas_walk(e);
-   /* If this is the first finger down, i.e no other fingers pressed,
-    * get a new event list, otherwise, keep the current grabbed list. */
-   if (e->pointer.mouse_grabbed == 0)
-     {
-        Eina_List *ins;
-        ins = evas_event_objects_event_list(e, NULL, e->pointer.x, e->pointer.y);
-        /* free our old list of ins */
-        e->pointer.object.in = eina_list_free(e->pointer.object.in);
-        /* and set up the new one */
-        e->pointer.object.in = ins;
-     }
+   ins = evas_event_objects_event_list(e, NULL, e->pointer.x, e->pointer.y);
+   /* free our old list of ins */
+   e->pointer.object.in = eina_list_free(e->pointer.object.in);
+   /* and set up the new one */
+   e->pointer.object.in = ins;
    copy = evas_event_list_copy(e->pointer.object.in);
    EINA_LIST_FOREACH(copy, l, obj)
      {
@@ -354,8 +349,10 @@ _post_up_handle(Evas *e, unsigned int timestamp, const void *data)
      {
         ins = eina_list_free(ins);
      }
-   /* free our cur ins */
-   eina_list_free(ins);
+   /* free our old list of ins */
+   e->pointer.object.in = eina_list_free(e->pointer.object.in);
+   /* and set up the new one */
+   e->pointer.object.in = ins;
    if (e->pointer.inside)
       evas_event_feed_mouse_move(e, e->pointer.x, e->pointer.y, timestamp, data);
    return post_called;
@@ -403,7 +400,7 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
              ev.canvas.y = e->pointer.y;
              _evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed);
             if ((obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB) &&
-                (obj->mouse_grabbed > 0))
+                (obj->mouse_in) && (obj->mouse_grabbed > 0))
               {
                  obj->mouse_grabbed--;
                  e->pointer.mouse_grabbed--;
@@ -741,8 +738,10 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
               }
             if (e->delete_me) break;
          }
-       /* free our current ins */
-       eina_list_free(ins);
+       /* free our old list of ins */
+       eina_list_free(e->pointer.object.in);
+       /* and set up the new one */
+       e->pointer.object.in = ins;
         _evas_post_event_callback_call(e);
      }
    _evas_unwalk(e);
@@ -923,7 +922,7 @@ evas_event_feed_multi_down(Evas *e,
        if (obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB)
          {
             obj->mouse_grabbed++;
-             e->pointer.mouse_grabbed++;
+            e->pointer.mouse_grabbed++;
          }
        if (e->events_frozen <= 0)
          evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_DOWN, &ev);
@@ -989,7 +988,7 @@ evas_event_feed_multi_up(Evas *e,
         if (y != ev.canvas.y)
           ev.canvas.ysub = ev.canvas.y; // fixme - lost precision
         if ((obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB) &&
-            (obj->mouse_grabbed > 0))
+            (obj->mouse_in) && (obj->mouse_grabbed > 0))
           {
              obj->mouse_grabbed--;
              e->pointer.mouse_grabbed--;
@@ -1135,8 +1134,10 @@ evas_event_feed_multi_move(Evas *e,
             if (e->delete_me) break;
          }
        if (copy) copy = eina_list_free(copy);
-       /* free our current ins */
-       eina_list_free(ins);
+       /* free our old list of ins */
+       eina_list_free(e->pointer.object.in);
+       /* and set up the new one */
+       e->pointer.object.in = ins;
         _evas_post_event_callback_call(e);
      }
    _evas_unwalk(e);