Enlightenment CVS committal

Author  : urandom
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_int_shelf_config.c e_shelf.c e_shelf.h 


Log Message:
patch by Hannes Janetzek for checking whether the mouse is over the shelf

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_shelf_config.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -3 -r1.27 -r1.28
--- e_int_shelf_config.c        11 Apr 2007 15:37:04 -0000      1.27
+++ e_int_shelf_config.c        23 Apr 2007 17:21:38 -0000      1.28
@@ -240,6 +240,7 @@
    e_shelf_orient(cfdata->es, cfdata->escfg->orient);
    e_shelf_position_calc(cfdata->es);
    e_shelf_populate(cfdata->es);
+   e_shelf_toggle(cfdata->es, 1);
    e_shelf_show(cfdata->es);
    e_config_save_queue();
    cfdata->es->config_dialog = cfd;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_shelf.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -3 -r1.56 -r1.57
--- e_shelf.c   11 Apr 2007 15:37:04 -0000      1.56
+++ e_shelf.c   23 Apr 2007 17:21:38 -0000      1.57
@@ -19,7 +19,6 @@
 static void _e_shelf_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
 static void _e_shelf_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
 static void _e_shelf_cb_mouse_in(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
-static void _e_shelf_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, 
void *event_info);
 static int  _e_shelf_cb_id_sort(void *data1, void *data2);
 static int  _e_shelf_cb_hide_timer(void *data);
 static int  _e_shelf_cb_hide_animator(void *data);
@@ -142,8 +141,7 @@
    evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_DOWN, 
_e_shelf_cb_mouse_down, es);
    evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_UP, 
_e_shelf_cb_mouse_up, es);
    evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_IN, 
_e_shelf_cb_mouse_in, es);
-   evas_object_event_callback_add(es->o_event, EVAS_CALLBACK_MOUSE_OUT, 
_e_shelf_cb_mouse_out, es);
-
+ 
    es->o_base = edje_object_add(es->evas);
    es->name = evas_stringshare_add(name);
    snprintf(buf, sizeof(buf), "e/shelf/%s/base", es->style);
@@ -271,36 +269,47 @@
 EAPI void
 e_shelf_toggle(E_Shelf *es, int show)
 {
-   E_OBJECT_CHECK(es);
-   E_OBJECT_TYPE_CHECK(es, E_SHELF_TYPE);
-   if (show)
-     {
-       if (es->hide_timer)
-         {
-            ecore_timer_del(es->hide_timer);
-            es->hide_timer = NULL;
-         }
-       if (es->hidden && !es->instant_timer)
-         {  
-            es->hidden = 0;
-            edje_object_signal_emit(es->o_base, "e,state,visible", "e");
-            if (es->instant_delay >= 0.0)
-              {
-                 if (!es->instant_timer)
-                   _e_shelf_cb_instant_hide_timer(es);
-              }
-            else
-              {
-                 if(!es->hide_animator)
-                   es->hide_animator = 
ecore_animator_add(_e_shelf_cb_hide_animator, es);
-              }
-         }
-     }
-   else if (!show && es->cfg->autohide && !es->hidden)
-     {
-       if(!es->hide_timer)
-         es->hide_timer = ecore_timer_add(es->cfg->hide_timeout, 
_e_shelf_cb_hide_timer, es);
-     }
+  E_OBJECT_CHECK(es);
+  E_OBJECT_TYPE_CHECK(es, E_SHELF_TYPE);
+
+  if(!es->cfg->autohide && !es->hidden) return;
+   
+  if (show)
+    {
+
+      if(!es->hide_timer) es->hide_timer = ecore_timer_add(0.1, 
_e_shelf_cb_hide_timer, es);
+
+      if (es->hidden && !es->instant_timer)
+       {  
+         es->hidden = 0;
+         edje_object_signal_emit(es->o_base, "e,state,visible", "e");
+         if (es->instant_delay >= 0.0)
+           {
+             if (!es->instant_timer)
+               _e_shelf_cb_instant_hide_timer(es);
+           }
+         else
+           {
+             if(!es->hide_animator)
+               es->hide_animator = 
ecore_animator_add(_e_shelf_cb_hide_animator, es);
+           }
+       }
+    }
+  else if (!show && es->cfg->autohide && !es->hidden)  
+    {
+      es->hidden = 1; 
+      edje_object_signal_emit(es->o_base, "e,state,hidden", "e");
+      if (es->instant_delay >= 0.0)
+       {
+         if (!es->instant_timer)
+           es->instant_timer = ecore_timer_add(es->instant_delay, 
_e_shelf_cb_instant_hide_timer, es);
+       }
+      else
+       {
+         if (!es->hide_animator)
+           es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, 
es);
+       }
+    }
 }
 
 EAPI void
@@ -1149,25 +1158,6 @@
    e_shelf_toggle(es, 1);
 }
 
-static void
-_e_shelf_cb_mouse_out(void *data, Evas *evas, Evas_Object *obj, void 
*event_info)
-{
-   Evas_Event_Mouse_Out *ev;
-   E_Shelf *es;
-
-   es = data;
-   ev = event_info;
-   if (es->cfg->autohide)
-     {
-       Evas_Coord x, y, w, h;
-
-       evas_object_geometry_get(es->o_base, &x, &y, &w, &h);
-       if (!E_INSIDE(ev->canvas.x, ev->canvas.y, x, y, w, h))
-         e_shelf_toggle(es, 0);
-     }
-   edje_object_signal_emit(es->o_base, "e,state,unfocused", "e");
-}
-
 static int
 _e_shelf_cb_id_sort(void *data1, void *data2)
 {
@@ -1178,28 +1168,39 @@
    return (es1->id) > (es2->id);
 }
 
-static int
+static int 
 _e_shelf_cb_hide_timer(void *data)
 {
-   E_Shelf *es;
+  Evas_Coord x, y, w, h, px, py;
 
-   es = data;
-
-   es->hidden = 1; 
-   edje_object_signal_emit(es->o_base, "e,state,hidden", "e");
-   if (es->instant_delay >= 0.0)
-     {
-       if (!es->instant_timer)
-         es->instant_timer = ecore_timer_add(es->instant_delay, 
_e_shelf_cb_instant_hide_timer, es);
-     }
-   else
-     {
-       if (!es->hide_animator)
-         es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, es);
-     }
-   es->hide_timer = NULL;
+  E_Shelf *es = data;
 
-   return 0;
+  evas_object_geometry_get(es->o_base, &x, &y, &w, &h);
+  if (es->popup)
+    ecore_x_pointer_xy_get(es->popup->evas_win, &px, &py);
+  else
+    evas_pointer_canvas_xy_get(es->evas, &px, &py);
+  
+  if (E_INSIDE(px, py, x, y, w, h))
+    {
+      es->last_in = ecore_time_get();
+      return 1;
+    }
+  else
+    {
+      if(es->last_in + es->cfg->hide_timeout < ecore_time_get()) 
+       {
+         e_shelf_toggle(es, 0);
+          if(es->hide_timer)
+           {    
+             ecore_timer_del(es->hide_timer);
+             es->hide_timer = NULL;
+           }     
+         return 0;
+       }
+      else
+       return 1;
+    }
 }
 
 static int
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_shelf.h,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- e_shelf.h   8 Apr 2007 09:32:48 -0000       1.20
+++ e_shelf.h   23 Apr 2007 17:21:38 -0000      1.21
@@ -40,6 +40,7 @@
    int                 hide_origin;
    float                instant_delay;
    Ecore_Timer         *instant_timer;
+   double               last_in; /* last time the pointer was in the shelf */ 
 };
 
 EAPI int              e_shelf_init(void);



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to