Enlightenment CVS committal

Author  : handyande
Project : misc
Module  : engage

Dir     : misc/engage/src/module


Modified Files:
        e_mod_main.c e_mod_main.h 


Log Message:
Added iconified support (not on startup tho) and a few fixes
===================================================================
RCS file: /cvsroot/enlightenment/misc/engage/src/module/e_mod_main.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_mod_main.c        28 Feb 2005 09:14:49 -0000      1.4
+++ e_mod_main.c        28 Feb 2005 12:45:56 -0000      1.5
@@ -11,8 +11,12 @@
  * immediate fixes needed:
  * * resize underlying box properly when zooming (box images are invisible atm)
  * * work on other edges than the bottom
+ * * pick up iconified apps on startup
  * * zoom and unzoom on timer
  * * bounce icons on click ( following e_app exec hints? )
+ *
+ * * add "app rnning" support
+ * * maybe add system tray
  * 
  * * Fix menu
  *
@@ -58,7 +62,7 @@
 static void    _engage_bar_update_policy(Engage_Bar *eb);
 static void    _engage_bar_motion_handle(Engage_Bar *eb, Evas_Coord mx, 
Evas_Coord my);
 
-static Engage_Icon *_engage_icon_new(Engage_Bar *eb, E_App *a);
+static Engage_Icon *_engage_icon_new(Engage_Bar *eb, E_App *a, int min);
 static void    _engage_icon_free(Engage_Icon *ic);
 static Engage_Icon *_engage_icon_find(Engage_Bar *eb, E_App *a);
 static void    _engage_icon_reorder_after(Engage_Icon *ic, Engage_Icon *after);
@@ -320,7 +324,7 @@
                  Engage_Icon *ic;
 
                  e_box_freeze(eb->box_object);
-                 ic = _engage_icon_new(eb, a);
+                 ic = _engage_icon_new(eb, a, 0);
                  if (ic)
                    {
                       for (ll = e->apps->subapps; ll; ll = ll->next)
@@ -356,7 +360,7 @@
                  if (ic) _engage_icon_free(ic);
                  evas_image_cache_flush(eb->evas);
                  evas_image_cache_reload(eb->evas);
-                 ic = _engage_icon_new(eb, a);
+                 ic = _engage_icon_new(eb, a, 0);
                  if (ic)
                    {
                       for (ll = e->apps->subapps; ll; ll = ll->next)
@@ -455,7 +459,7 @@
             Engage_Icon *ic;
 
             a = l->data;
-            ic = _engage_icon_new(eb, a);
+            ic = _engage_icon_new(eb, a, 0);
          }
      }
    eb->align_req = 0.5;
@@ -486,6 +490,9 @@
    edje_object_signal_emit(eb->bar_object, "passive", "");
    */
 
+
+   /* FIXME - these are not really iconify events, we need them to be
+    * added to E before we can hook in "properly" */
    eb->iconify_handler = ecore_event_handler_add(E_EVENT_BORDER_HIDE,
         _engage_cb_event_border_iconify, eb);
    eb->uniconify_handler = ecore_event_handler_add(E_EVENT_BORDER_SHOW,
@@ -502,6 +509,8 @@
 
    while (eb->icons)
      _engage_icon_free(eb->icons->data);
+   while (eb->min_icons)
+     _engage_icon_free(eb->min_icons->data);
 
    evas_object_del(eb->bar_object);
    evas_object_del(eb->box_object);
@@ -573,7 +582,7 @@
 }
 
 static Engage_Icon *
-_engage_icon_new(Engage_Bar *eb, E_App *a)
+_engage_icon_new(Engage_Bar *eb, E_App *a, int min)
 {
    Engage_Icon *ic;
    char *str;
@@ -586,7 +595,11 @@
    ic->app = a;
    ic->scale = 1.0;
    e_object_ref(E_OBJECT(a));
-   eb->icons = evas_list_append(eb->icons, ic);
+   ic->min = min?1:0;
+   if (min)
+     eb->min_icons = evas_list_append(eb->min_icons, ic);
+   else
+     eb->icons = evas_list_append(eb->icons, ic);
 
    o = evas_object_rectangle_add(eb->evas);
    ic->event_object = o;
@@ -650,7 +663,10 @@
 static void
 _engage_icon_free(Engage_Icon *ic)
 {
-   ic->eb->icons = evas_list_remove(ic->eb->icons, ic);
+   if (ic->min)
+     ic->eb->min_icons = evas_list_remove(ic->eb->min_icons, ic);
+   else
+     ic->eb->icons = evas_list_remove(ic->eb->icons, ic);
    if (ic->bg_object) evas_object_del(ic->bg_object);
    if (ic->overlay_object) evas_object_del(ic->overlay_object);
    if (ic->icon_object) evas_object_del(ic->icon_object);
@@ -712,13 +728,30 @@
 static int
 _engage_cb_event_border_iconify(void *data, int type, void *event)
 {
-   printf("not implemented iconify listener\n");
+   Engage_Bar *eb;
+   Engage_Icon *ic;
+   E_Event_Border_Hide *e;
+   E_App *app;
 
+   e = event;
+   eb = data;
    /*FIXME
     * check that were are the bar in the right zone
-    *
-    * add icon to list, marking as iconified (instances of ++)
     */
+   
+   if (!e->border->iconic)
+     return;
+   app = e_app_window_name_class_find(e->border->client.icccm.name,
+                                     e->border->client.icccm.class);
+   if (app)
+     {
+       ic = _engage_icon_new(eb, app, 1);
+       _engage_bar_frame_resize(eb);
+       ic->border = e->border;
+       e_object_ref(E_OBJECT(e->border));
+     }
+   else
+     printf("FIXME WE HAVE NO ICON TO DISPLAY\n");
 }
 
 static int
@@ -726,11 +759,31 @@
 {
    printf("not implemented uniconify listener\n");
 
+   Engage_Bar *eb;
+   Engage_Icon *ic;
+   E_Event_Border_Show *e;
+   E_App *app;
+   Evas_List *icons;
+
+   e = event;
+   eb = data;
+
    /*FIXME
     * check that were are the bar in the right zone
-    *
-    * remove icon from list, if instances == 0 and it is only an iconic icon
     */
+   icons = eb->min_icons;
+   while (icons)
+     {
+       ic = icons->data;
+       if (ic->border == e->border)
+         {
+            e_object_unref(E_OBJECT(ic->border));
+             _engage_icon_free(ic);
+             _engage_bar_frame_resize(eb);
+             break;
+         }
+       icons = icons->next;
+     }
 }
 
 
@@ -824,6 +877,7 @@
    Evas_Object *o;
    E_Gadman_Policy policy;
    int changed;
+   int done_min;
 
    evas_event_freeze(eb->evas);
    o = eb->bar_object;
@@ -831,8 +885,9 @@
    edje_object_message_signal_process(o);
 
    e_box_freeze(eb->box_object);
-
-   for (l = eb->icons; l; l = l->next)
+   done_min = 0;
+   l = eb->icons;
+   while (l)
      {
        Engage_Icon *ic;
 
@@ -853,6 +908,13 @@
                               bw, bh, /* min */
                               bw, bh /* max */
                               );
+
+       l = l->next;
+       if (!l->next && !done_min)
+         {
+            done_min = 1;
+            l = eb->min_icons;
+         }
      }
 
    eb->align_req = 0.5;
@@ -919,8 +981,9 @@
 _engage_bar_motion_handle(Engage_Bar *eb, Evas_Coord mx, Evas_Coord my)
 {
    Evas_Coord x, y, w, h;
-   double relx, rely;
+   double relx, rely, left, right, dummy;
    Evas_List *items;
+   int bordersize, counter, done_min;
 
    evas_object_geometry_get(eb->box_object, &x, &y, &w, &h);
    if (w > 0) relx = (double)(mx - x) / (double)w;
@@ -942,15 +1005,17 @@
    
    e_box_freeze(eb->box_object);
    items = eb->icons;
-   int bordersize = eb->engage->iconbordersize - eb->engage->conf->iconsize;
-   int counter = x + (eb->engage->iconbordersize / 2);
+   
+   bordersize = eb->engage->iconbordersize - eb->engage->conf->iconsize;
+   counter = x + (eb->engage->iconbordersize / 2);
+   done_min = 0;
    while (items)
      {
-       Engage_Icon *icon = (Engage_Icon *) items->data;
+       Engage_Icon *icon;
+       double          distance, new_zoom, relative_x, size;
 
-       double          distance = (double) (counter - mx) /
-           (eb->engage->iconbordersize);
-       double          new_zoom, relative_x, size;
+       icon = (Engage_Icon *) items->data;
+       distance = (double) (counter - mx) / (eb->engage->iconbordersize);
 
        zoom_function(distance, &new_zoom, &relative_x, eb);
        size = icon->scale * new_zoom * eb->engage->iconbordersize;
@@ -961,9 +1026,14 @@
 
        items = items->next;
        counter += eb->engage->iconbordersize;
+
+       if (!items && !done_min) 
+         {
+            done_min = 1;
+            items = eb->min_icons;
+         }
      }
 
-   double left, right, dummy;
    zoom_function((double) (x - mx) / (eb->engage->iconbordersize),
        &dummy, &left, eb);
    zoom_function((double) ((x + w) - mx) / (eb->engage->iconbordersize),
@@ -1011,15 +1081,21 @@
 _engage_bar_cb_intercept_resize(void *data, Evas_Object *o, Evas_Coord w, 
Evas_Coord h)
 {
    Engage_Bar *eb;
+   E_Gadman_Edge edge;
 
    eb = data;
 
    evas_object_resize(o, w, h);
    evas_object_resize(eb->event_object, w, h);
+   
+   if (eb->gmc)
+     edge = e_gadman_client_edge_get(eb->gmc);
+   else
+     edge = E_GADMAN_EDGE_BOTTOM;
 
    /* FIXME "8" should not be hardcoded, difference between engage->conf->icon
     * and engage->iconbordersize */
-   if (e_box_orientation_get(eb->box_object) == 1)
+   if (edge == E_GADMAN_EDGE_TOP || edge == E_GADMAN_EDGE_BOTTOM)
      eb->engage->conf->iconsize = h - 8;
    else
      eb->engage->conf->iconsize = w - 8;
@@ -1065,9 +1141,14 @@
    ic = data;
    if (ev->button == 1)
      {
-       edje_object_signal_emit(ic->bg_object, "start", "");
-       edje_object_signal_emit(ic->overlay_object, "start", "");
-       e_app_exec(ic->app);
+       if (ic->min)
+         e_border_uniconify(ic->border);
+       else
+         {
+            edje_object_signal_emit(ic->bg_object, "start", "");
+            edje_object_signal_emit(ic->overlay_object, "start", "");
+            e_app_exec(ic->app);
+         }
      }
 }
 
@@ -1193,9 +1274,12 @@
 {
    Evas_List *l;
    Evas_Coord border;
+   int done_mins;
 
    e_box_freeze(eb->box_object);
-   for (l = eb->icons; l; l = l->next)
+   done_mins = 0;
+   l = eb->icons;
+   while (l)
      {
        Engage_Icon *ic;
        Evas_Object *o;
@@ -1218,6 +1302,13 @@
              bw, bh, /* min */
              bw, bh /* max */
              );
+
+       l = l->next;
+       if (!l && !done_mins)
+         {
+            done_mins = 1;
+            l = eb->min_icons;
+         }
      }
    eb->engage->iconbordersize = border;
    
===================================================================
RCS file: /cvsroot/enlightenment/misc/engage/src/module/e_mod_main.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_mod_main.h        28 Feb 2005 00:03:46 -0000      1.2
+++ e_mod_main.h        28 Feb 2005 12:45:56 -0000      1.3
@@ -50,6 +50,7 @@
    Evas_Object *event_object;
    
    Evas_List   *icons;
+   Evas_List   *min_icons;
    
    double          align, align_req;
    
@@ -74,6 +75,8 @@
    Evas_List     *extra_icons;
 
    double         scale;
+   int            min;
+   E_Border      *border;
 };
 
 EAPI void *init     (E_Module *m);




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to