Enlightenment CVS committal

Author  : metrics
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/modules/pager


Modified Files:
        e_mod_main.c 


Log Message:
More fixes of the autoscroll/drag and drop behaviour for gadgets in
shelves. Added callback to allow the current drop position to be
dynamically updated as the gadget scrolling is animated.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/pager/e_mod_main.c,v
retrieving revision 1.193
retrieving revision 1.194
diff -u -3 -r1.193 -r1.194
--- e_mod_main.c        15 Nov 2006 02:49:49 -0000      1.193
+++ e_mod_main.c        15 Nov 2006 06:24:30 -0000      1.194
@@ -55,6 +55,7 @@
    E_Drag          *drag;
    unsigned char    dragging : 1;
    unsigned char    just_dragged : 1;
+   Evas_Coord       dnd_x, dnd_y;
 };
 
 struct _Pager_Desk
@@ -124,6 +125,8 @@
 static void _pager_inst_cb_move(void *data, const char *type, void 
*event_info);
 static void _pager_inst_cb_leave(void *data, const char *type, void 
*event_info);
 static void _pager_inst_cb_drop(void *data, const char *type, void 
*event_info);
+static void _pager_inst_cb_scroll(void *data);
+static void _pager_update_drop_position(Instance *inst, Evas_Coord x, 
Evas_Coord y);
 static void _pager_desk_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
 static void _pager_desk_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
 static void _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
@@ -1503,30 +1506,27 @@
 }
 
 static void
-_pager_inst_cb_enter(void *data, const char *type, void *event_info)
+_pager_inst_cb_scroll(void *data)
 {
-   E_Event_Dnd_Enter *ev;
-   Instance *inst;
+   Instance * inst;
 
-   ev = event_info;
    inst = data;
+   _pager_update_drop_position(inst, inst->pager->dnd_x, inst->pager->dnd_y);
 }
 
 static void
-_pager_inst_cb_move(void *data, const char *type, void *event_info)
+_pager_update_drop_position(Instance *inst, Evas_Coord x, Evas_Coord y)
 {
-   E_Event_Dnd_Move *ev;
-   Instance *inst;
    Pager_Desk *pd, *pd2;
-   Evas_List *l;
    Evas_Coord xx, yy;
-   int x, y;
+   int ox, oy;
+   Evas_List *l;
 
-   ev = event_info;
-   inst = data;
+   inst->pager->dnd_x = x;
+   inst->pager->dnd_y = y;
    evas_object_geometry_get(inst->pager->o_table, &xx, &yy, NULL, NULL);
-   e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y);
-   pd = _pager_desk_at_coord(inst->pager, ev->x + xx + x, ev->y + yy + y);
+   e_box_align_pixel_offset_get(inst->gcc->o_box, &ox, &oy);
+   pd = _pager_desk_at_coord(inst->pager, x + xx + ox, y + yy + oy);
    /* FIXME: keep track which one its over so we only emit drag in/out
     * when it actually goes form one desk to another */
    for (l = inst->pager->desks; l; l = l->next)
@@ -1537,6 +1537,30 @@
        else
          edje_object_signal_emit(pd2->o_desk, "e,action,drag,out", "e");
      }
+}
+
+static void
+_pager_inst_cb_enter(void *data, const char *type, void *event_info)
+{
+   E_Event_Dnd_Enter *ev;
+   Instance *inst;
+
+   ev = event_info;
+   inst = data;
+   _pager_update_drop_position(inst, ev->x, ev->y);
+   e_gadcon_client_autoscroll_cb_set(inst->gcc, _pager_inst_cb_scroll, inst);
+   e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y);
+}
+
+static void
+_pager_inst_cb_move(void *data, const char *type, void *event_info)
+{
+   E_Event_Dnd_Move *ev;
+   Instance *inst;
+
+   ev = event_info;
+   inst = data;
+   _pager_update_drop_position(inst, ev->x, ev->y);
    e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y);
 }
 
@@ -1558,6 +1582,8 @@
        pd = l->data;
        edje_object_signal_emit(pd->o_desk, "e,action,drag,out", "e");
      }
+
+   e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL);
 }
 
 static void
@@ -1627,6 +1653,8 @@
        pd = l->data;
        edje_object_signal_emit(pd->o_desk, "e,action,drag,out", "e");
      }
+
+   e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL);
 }
 
 static void



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to