Enlightenment CVS committal

Author  : rephorm
Project : e17
Module  : apps/e

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


Modified Files:
        e_mod_main.c e_mod_main.h 


Log Message:



the start of pager window dnd. currently only lets you move windows from one 
desktop to another. 

===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/pager/e_mod_main.c,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -3 -r1.117 -r1.118
--- e_mod_main.c        7 Sep 2005 14:55:46 -0000       1.117
+++ e_mod_main.c        10 Sep 2005 05:20:58 -0000      1.118
@@ -64,6 +64,14 @@
 static void        _pager_desk_cb_intercept_move(void *data, Evas_Object *o, 
Evas_Coord x, Evas_Coord y);
 static void        _pager_desk_cb_intercept_resize(void *data, Evas_Object *o, 
Evas_Coord w, Evas_Coord h);
 
+static void        _pager_window_cb_mouse_in(void *data, Evas *e, Evas_Object 
*obj, void *event_info);
+static void        _pager_window_cb_mouse_out(void *data, Evas *e, Evas_Object 
*obj, void *event_info);
+static void        _pager_window_cb_mouse_down(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
+static void        _pager_window_cb_mouse_up(void *data, Evas *e, Evas_Object 
*obj, void *event_info);
+static void        _pager_window_cb_mouse_move(void *data, Evas *e, 
Evas_Object *obj, void *event_info);
+
+static void        _pager_window_cb_drag_finished(E_Drag *drag, int dropped);
+
 static void        _pager_face_cb_enter(void *data, const char *type, void 
*drop);
 static void        _pager_face_cb_move(void *data, const char *type, void 
*drop);
 static void        _pager_face_cb_leave(void *data, const char *type, void 
*drop);
@@ -526,6 +534,12 @@
                                           "enlightenment/border",
                                           face->fx, face->fy, face->fw, 
face->fh);
    
+   face->drop_handler = e_drop_handler_add(face,
+                                          _pager_face_cb_enter, 
_pager_face_cb_move,
+                                          _pager_face_cb_leave, 
_pager_face_cb_drop,
+                                          "enlightenment/pager_win",
+                                          face->fx, face->fy, face->fw, 
face->fh);
+
    face->gmc = e_gadman_client_new(zone->container->gadman);
    _pager_face_zone_set(face, zone);
    
@@ -785,6 +799,7 @@
    e_theme_edje_object_set(o, "base/theme/modules/pager",
                           "modules/pager/window");
    if (visible) evas_object_show(o);
+
    e_layout_pack(pd->layout_object, pw->window_object);
    e_layout_child_raise(pw->window_object);
    o = e_border_icon_add(border, pd->face->evas);
@@ -795,6 +810,23 @@
        edje_object_part_swallow(pw->window_object, "icon", o);
      }
 
+   /* add an event object */
+   
+   o = evas_object_rectangle_add(pd->face->evas);
+   pw->event_object = o;
+   evas_object_layer_set(o, 2);
+   evas_object_repeat_events_set(o, 1);
+   evas_object_color_set(o, 0, 0, 0, 0);
+   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_IN,  
_pager_window_cb_mouse_in,  pw);
+   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_OUT, 
_pager_window_cb_mouse_out, pw);
+   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, 
_pager_window_cb_mouse_down, pw);
+   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, 
_pager_window_cb_mouse_up, pw);
+   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, 
_pager_window_cb_mouse_move, pw);
+   evas_object_show(o);
+   e_layout_pack(pd->layout_object, pw->event_object);
+   e_layout_child_raise(pw->event_object);
+
+
    _pager_window_move(pd->face, pw);
    return pw;
 }
@@ -817,6 +849,12 @@
    e_layout_child_resize(pw->window_object,
                         pw->border->w,
                         pw->border->h);
+   e_layout_child_move(pw->event_object,
+                      pw->border->x - pw->desk->desk->zone->x,
+                      pw->border->y - pw->desk->desk->zone->y);
+   e_layout_child_resize(pw->event_object,
+                        pw->border->w,
+                        pw->border->h);
 }
 
 static Pager_Win *
@@ -1242,11 +1280,13 @@
                  /* remove it from whatever desk it was on */
                  pw->desk->wins = evas_list_remove(pw->desk->wins, pw);
                  e_layout_unpack(pw->window_object);
+                 e_layout_unpack(pw->event_object);
 
                  /* add it to the one its MEANT to be on */
                  pw->desk = pd;
                  pd->wins = evas_list_append(pd->wins, pw);
                  e_layout_pack(pd->layout_object, pw->window_object);
+                 e_layout_pack(pd->layout_object, pw->event_object);
                  e_layout_child_raise(pw->window_object);
                  _pager_window_move(face, pw);
               }
@@ -1312,16 +1352,28 @@
                  if (ev->type == E_STACKING_ABOVE)
                    {
                       if (pw2)
-                        e_layout_child_raise_above(pw->window_object, 
pw2->window_object);
+                        {
+                           e_layout_child_raise_above(pw->window_object, 
pw2->window_object);
+                           e_layout_child_raise_above(pw->event_object, 
pw2->event_object);
+                        }
                       else
-                        e_layout_child_raise(pw->window_object);
+                        {
+                           e_layout_child_raise(pw->window_object);
+                           e_layout_child_raise(pw->event_object);
+                        }
                    }
                  else if (ev->type == E_STACKING_BELOW)
                    {
                       if (pw2)
-                        e_layout_child_lower_below(pw->window_object, 
pw2->window_object);
+                        {
+                           e_layout_child_lower_below(pw->window_object, 
pw2->window_object);
+                           e_layout_child_lower_below(pw->event_object, 
pw2->event_object);
+                        }
                       else
-                        e_layout_child_lower(pw->window_object);
+                        {
+                           e_layout_child_lower(pw->window_object);
+                           e_layout_child_lower(pw->event_object);
+                        }
                    }
               }
          }
@@ -1695,10 +1747,6 @@
                              E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
        e_util_container_fake_mouse_up_all_later(pd->face->zone->container);
      }
-   else if (ev->button == 1)
-     {
-       e_desk_show(pd->desk);
-     }
 }
 
 static void
@@ -1709,6 +1757,11 @@
    
    ev = event_info;
    desk = data;
+
+   if ((ev->button == 1) && !(desk->face->dragging))
+     {
+       e_desk_show(desk->desk);
+     }
 }
 
 static void
@@ -1743,6 +1796,153 @@
    evas_object_resize(desk->event_object, w, h);
 }
 
+
+/*****/
+
+static void
+_pager_window_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void 
*event_info)
+{
+   Evas_Event_Mouse_In *ev;
+   Pager_Win *pw;
+   
+   ev = event_info;
+   pw = data;
+
+}
+
+static void
+_pager_window_cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void 
*event_info)
+{
+   Evas_Event_Mouse_Out *ev;
+   Pager_Win *pw;
+   
+   ev = event_info;
+   pw = data;
+
+}
+
+static void
+_pager_window_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void 
*event_info)
+{
+   Evas_Event_Mouse_Down *ev;
+   Pager_Win *pw;
+   
+   ev = event_info;
+   pw = data;
+   if (!pw) return;
+
+   /* make this configurable */
+   if ((ev->button == 1))
+     {
+       printf("DN: %d\n", pw);
+       pw->drag.start = 1;
+       pw->drag.x = -1;
+       pw->drag.y = -1;
+     }
+}
+
+static void
+_pager_window_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void 
*event_info)
+{
+   Evas_Event_Mouse_Up *ev;
+   Pager_Win *pw;
+   
+   ev = event_info;
+   pw = data;
+   if (!pw) return;
+
+   printf("UP: %d\n", pw);
+   pw->drag.start = 0;
+}
+
+static void
+_pager_window_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void 
*event_info)
+{
+   Evas_Event_Mouse_Move *ev;
+   Pager_Win *pw;
+   
+   ev = event_info;
+   pw = data;
+
+   if (!pw) return;
+   if (pw->drag.start)
+     {
+       printf("DRAG: %d\n", pw);
+       if ((pw->drag.x == -1) && (pw->drag.y == -1))
+         {
+            pw->drag.x = ev->cur.output.x;
+            pw->drag.y = ev->cur.output.y;
+         }
+       else
+         {
+            int dx, dy;
+
+            dx = pw->drag.x - ev->cur.output.x;
+            dy = pw->drag.y - ev->cur.output.y;
+            if (((dx * dx) + (dy * dy)) >
+                  (e_config->drag_resist * e_config->drag_resist))
+              {
+                 /* start drag! */
+                 
+                 if (pw->window_object)
+                   {
+                      E_Drag *drag;
+                      Evas_Object *o, *oo;
+                      Evas_Coord x, y, w, h;
+                      const char *file, *part;
+
+                      evas_object_geometry_get(pw->window_object,
+                            &x, &y, &w, &h);
+
+                      drag = e_drag_new(pw->desk->face->zone->container,
+                                        x,
+                                        y, "enlightenment/pager_win",
+                                        pw, _pager_window_cb_drag_finished);
+
+                      o = edje_object_add(drag->evas);
+                      edje_object_file_get(pw->window_object, &file, &part);
+                      edje_object_file_set(o, file, part);
+                      oo = o;
+
+                      o = edje_object_add(drag->evas);
+                      edje_object_file_get(pw->icon_object, &file, &part);
+                      edje_object_file_set(o, file, part);
+                      edje_object_part_swallow(oo, "icon", o);
+
+                      e_drag_object_set(drag, oo);
+
+                      e_drag_resize(drag, w, h);
+                      e_drag_start(drag, pw->drag.x, pw->drag.y);
+       
+                      /* this prevents the desk from switching on drags */
+                      pw->desk->face->dragging = 1;
+                      evas_event_feed_mouse_up(pw->desk->face->evas, 1,
+                            EVAS_BUTTON_NONE, ecore_time_get(), NULL);
+                   }
+                 pw->drag.start = 0;
+                 
+              }
+         }
+
+     }
+}
+
+static void
+_pager_window_cb_drag_finished(E_Drag *drag, int dropped)
+{
+   Pager_Win *pw;
+
+   pw = drag->data;
+
+   if (pw && pw->desk && pw->desk->face)
+     {
+       pw->desk->face->dragging = 0;
+     }
+
+}
+
+/*****/
+
 static void
 _pager_face_cb_enter(void *data, const char *type, void *event_info)
 {
@@ -1830,7 +2030,20 @@
    y = (ev->y - (face->fy + face->inset.t)) / h;
 
    desk = e_desk_at_xy_get(face->zone, x, y);
-   bd = ev->data;
+
+
+   if (!strcmp(type, "enlightenment/pager_win"))
+     {
+       bd = ((Pager_Win *)(ev->data))->border;
+     }
+   else if (!strcmp(type, "enlightenment/border"))
+     {
+       bd = ev->data;
+     }
+   else
+     {
+       return;
+     }
 
    if ((bd) && (desk))
      {
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/modules/pager/e_mod_main.h,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -3 -r1.30 -r1.31
--- e_mod_main.h        7 Sep 2005 14:55:46 -0000       1.30
+++ e_mod_main.h        10 Sep 2005 05:20:58 -0000      1.31
@@ -97,6 +97,8 @@
    E_Drop_Handler *drop_handler;
 
    Pager_Popup *current_popup;
+
+   unsigned char dragging:1;
 };
 
 struct _Pager_Desk
@@ -121,6 +123,12 @@
 
    Evas_Object *window_object;
    Evas_Object *icon_object;
+   Evas_Object *event_object;
+
+   struct {
+       unsigned char start : 1;
+       int x, y;
+   } drag;
 };
 
 struct _Pager_Popup




-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to