Enlightenment CVS committal

Author  : sndev
Project : e17
Module  : apps/e

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


Modified Files:
        e_mod_config.c e_mod_main.c e_mod_main.h 


Log Message:

Improving ibox.

* New config options that allow to show iconified wins from all zones/current 
zone/all zone desktops/current zone desktop.
* fixing multiple config dialogs issue. Only one config dialog is allowed per 
module instance.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_config.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- e_mod_config.c      25 May 2006 13:25:37 -0000      1.21
+++ e_mod_config.c      3 Jun 2006 00:03:09 -0000       1.22
@@ -7,6 +7,15 @@
 struct _E_Config_Dialog_Data

 {

    int   show_label;

+

+   int  zone_policy;

+   int  desk_policy;

+

+   struct

+     {

+       Evas_Object *o_desk_show_all;

+       Evas_Object *o_desk_show_active;

+     } gui;

 };

 

 /* Protos */

@@ -15,6 +24,11 @@
 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);

 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);

 

+static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);

+static int _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);

+

+static void _cb_zone_policy_change(void *data, Evas_Object *obj);

+

 void 

 _config_ibox_module(Config_Item *ci)

 {

@@ -34,13 +48,15 @@
    /* Create The Dialog */

    cfd = e_config_dialog_new(e_container_current_get(e_manager_current_get()),

                             _("IBox Configuration"), NULL, 0, v, ci);

-   ibox_config->config_dialog = cfd;

+   ibox_config->config_dialog = evas_list_append(ibox_config->config_dialog, 
cfd);

 }

 

 static void 

 _fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata)

 {

    cfdata->show_label = ci->show_label;

+   cfdata->zone_policy = ci->show_zone;

+   cfdata->desk_policy = ci->show_desk;

 }

 

 static void *

@@ -58,32 +74,110 @@
 static void 

 _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)

 {

-   ibox_config->config_dialog = NULL;

+   ibox_config->config_dialog = evas_list_remove(ibox_config->config_dialog, 
cfd);

    free(cfdata);

 }

 

 static Evas_Object *

 _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data 
*cfdata)

 {

-   Evas_Object *o, *of, *ob;

-   

+   E_Radio_Group *rg;

+   Evas_Object *o, *ol, *of, *ob;

+

+   Evas_List *l, *l2;

+   int zone_count;

+   char buf[256];

+

    o = e_widget_list_add(evas, 0, 0);

+

    of = e_widget_framelist_add(evas, _("General Settings"), 0);

    ob = e_widget_check_add(evas, _("Show Icon Label"), &(cfdata->show_label));

    e_widget_framelist_object_append(of, ob);

    e_widget_list_object_append(o, of, 1, 1, 0.5);

-   

+

+   of = e_widget_framelist_add(evas, _("Zone"), 0);

+

+   zone_count = 0;

+   for (l = e_manager_list(); l; l = l->next)

+     {

+       E_Manager *man;

+       man = l->data;

+

+       for (l2 = man->containers; l2; l2 = l2->next)

+         {

+            E_Container *con;

+

+            con = l2->data;

+            zone_count += evas_list_count(con->zones);

+         }

+     }

+

+   if (zone_count <= 1) cfdata->zone_policy = 1;

+

+   rg = e_widget_radio_group_new((int *)&(cfdata->zone_policy));

+   ob = e_widget_radio_add(evas, _("Show windows from all zones"), 0, rg);

+   e_widget_on_change_hook_set(ob, _cb_zone_policy_change, cfdata);

+   e_widget_framelist_object_append(of, ob);

+   if (zone_count <= 1) e_widget_disabled_set(ob, 1);

+

+   ob = e_widget_radio_add(evas, _("Show windows from current zone"), 1, rg);

+   e_widget_on_change_hook_set(ob, _cb_zone_policy_change, cfdata);

+   e_widget_framelist_object_append(of, ob);

+

+   e_widget_list_object_append(o, of, 1, 1, 0.5);

+

+   of = e_widget_framelist_add(evas, _("Desktop"), 0);

+

+   rg = e_widget_radio_group_new((int *)&(cfdata->desk_policy));

+   ob = e_widget_radio_add(evas, _("Show windows from all desktops"), 0, rg);

+   e_widget_framelist_object_append(of, ob);

+   if (cfdata->zone_policy == 0) e_widget_disabled_set(ob, 1);

+   cfdata->gui.o_desk_show_all = ob;

+

+   ob = e_widget_radio_add(evas, _("Show windows from active desktop"), 1, rg);

+   e_widget_framelist_object_append(of, ob);

+   if (cfdata->zone_policy == 0) e_widget_disabled_set(ob, 1);

+   cfdata->gui.o_desk_show_active = ob;

+

+   e_widget_list_object_append(o, of, 1, 1, 0.5);

+

    return o;

 }

 

-static int 

+static int

 _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)

 {

    Config_Item *ci;

    

    ci = cfd->data;

    ci->show_label = cfdata->show_label;

+

+   ci->show_zone = cfdata->zone_policy;

+   ci->show_desk = cfdata->desk_policy;

+

    _ibox_config_update();

    e_config_save_queue();

    return 1;

+}

+

+

+/****** callbacks **********/

+

+static void

+_cb_zone_policy_change(void *data, Evas_Object *obj)

+{

+   E_Config_Dialog_Data *cfdata;

+

+   cfdata = data;

+

+   if (cfdata->zone_policy == 0)

+     {

+       e_widget_disabled_set(cfdata->gui.o_desk_show_all, 1);

+       e_widget_disabled_set(cfdata->gui.o_desk_show_active, 1);

+     }

+   else

+     {

+       e_widget_disabled_set(cfdata->gui.o_desk_show_all, 0);

+       e_widget_disabled_set(cfdata->gui.o_desk_show_active, 0);

+     }

 }

===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_main.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -3 -r1.50 -r1.51
--- e_mod_main.c        1 Jun 2006 06:44:37 -0000       1.50
+++ e_mod_main.c        3 Jun 2006 00:03:09 -0000       1.51
@@ -53,6 +53,8 @@
    int             drop_before;
    Evas_List      *icons;
    int             show_label;
+   int            show_zone;
+   int            show_desk;
    E_Zone          *zone;
 };
 
@@ -88,7 +90,8 @@
 static void _ibox_icon_fill(IBox_Icon *ic);
 static void _ibox_icon_empty(IBox_Icon *ic);
 static void _ibox_icon_signal_emit(IBox_Icon *ic, char *sig, char *src);
-static IBox *_ibox_zone_find(E_Zone *zone);
+//static IBox *_ibox_zone_find(E_Zone *zone);
+static Evas_List *_ibox_zone_find(E_Zone *zone);
 static int _ibox_cb_timer_drop_recalc(void *data);
 static void _ibox_cb_obj_moveresize(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
 static void _ibox_cb_menu_post(void *data, E_Menu *m);
@@ -111,6 +114,7 @@
 static int _ibox_cb_event_border_uniconify(void *data, int type, void *event);
 static int _ibox_cb_event_border_icon_change(void *data, int type, void 
*event);
 static int _ibox_cb_event_border_zone_set(void *data, int type, void *event);
+static int _ibox_cb_event_desk_show(void *data, int type, void *event);
 static Config_Item *_ibox_config_item_get(const char *id);
 
 static E_Config_DD *conf_edd = NULL;
@@ -137,6 +141,10 @@
    
    b = _ibox_new(gc->evas, gc->zone);
    b->show_label = ci->show_label;
+   b->show_zone = ci->show_zone;
+   b->show_desk = ci->show_desk;
+   _ibox_fill(b);
+
    b->inst = inst;
    inst->ibox = b;
    o = b->o_box;
@@ -249,7 +257,6 @@
    e_box_orientation_set(b->o_box, 1);
    e_box_align_set(b->o_box, 0.5, 0.5);
    b->zone = zone;
-   _ibox_fill(b);
    return b;
 }
 
@@ -344,15 +351,34 @@
    IBox_Icon *ic;
    E_Border_List *bl;
    E_Border *bd;
+   int ok;
    
    bl = e_container_border_list_first(b->zone->container);
    while ((bd = e_container_border_list_next(bl)))
      {
-       if ((bd->zone == b->zone) && (bd->iconic))
+       ok = 0;
+       if ((b->show_zone == 0) && (bd->iconic))
          {
+            ok = 1;
+         }
+       else if((b->show_zone == 1) && (bd->iconic))
+         { 
+            if ((b->show_desk == 0) && (bd->zone == b->zone))
+              {
+                 ok = 1;
+              }
+            else if((b->show_desk == 1) && (bd->zone == b->zone) &&
+                    (bd->desk == e_desk_current_get(b->zone)))
+              {
+                 ok = 1;
+              }
+         }
+
+       if (ok)
+         { 
             ic = _ibox_icon_new(b, bd);
-            b->icons = evas_list_append(b->icons, ic);
-            e_box_pack_end(b->o_box, ic->o_holder);
+            b->icons = evas_list_append(b->icons, ic); 
+            e_box_pack_end(b->o_box, ic->o_holder); 
          }
      }
    
@@ -547,19 +573,29 @@
      edje_object_signal_emit(ic->o_icon2, sig, src);
 }
 
-static IBox *
+static Evas_List *
 _ibox_zone_find(E_Zone *zone)
 {
+   Evas_List *ibox = NULL;
    Evas_List *l;
-   
+
    for (l = ibox_config->instances; l; l = l->next)
      {
        Instance *inst;
+       Config_Item *ci;
 
        inst = l->data;
-       if (inst->ibox->zone == zone) return inst->ibox;
+       ci = _ibox_config_item_get(inst->gcc->id);
+       if (!ci) continue;
+
+       if (ci->show_zone == 0)
+         ibox = evas_list_append(ibox, inst->ibox);
+       else if (ci->show_zone == 1)
+         { 
+            if (inst->ibox->zone == zone) ibox = evas_list_append(ibox, 
inst->ibox);
+         }
      }
-   return NULL;
+   return ibox;
 }
 
 static int
@@ -971,6 +1007,7 @@
 static int
 _ibox_cb_event_border_add(void *data, int type, void *event)
 {
+   int ok;
    E_Event_Border_Add *ev;
    IBox *b;
    IBox_Icon *ic;
@@ -979,16 +1016,23 @@
    /* add if iconic */
    if (ev->border->iconic)
      {
-       b = _ibox_zone_find(ev->border->zone);
-       if (!b) return 1;
-       if (_ibox_icon_find(b, ev->border)) return 1;
-       ic = _ibox_icon_new(b, ev->border);
-       if (!ic) return 1;
-       b->icons = evas_list_append(b->icons, ic);
-       e_box_pack_end(b->o_box, ic->o_holder);
-       _ibox_empty_handle(b);
-       _ibox_resize_handle(b);
-       _gc_orient(b->inst->gcc);
+       Evas_List *l, *ibox;
+       ibox = _ibox_zone_find(ev->border->zone);
+       for (l = ibox; l; l = l->next)
+         { 
+            b = l->data; 
+            if (_ibox_icon_find(b, ev->border)) continue;
+            ic = _ibox_icon_new(b, ev->border); 
+            if (!ic) continue; 
+            b->icons = evas_list_append(b->icons, ic); 
+            e_box_pack_end(b->o_box, ic->o_holder); 
+            _ibox_empty_handle(b); 
+            _ibox_resize_handle(b); 
+            _gc_orient(b->inst->gcc);
+         }
+
+       while (ibox)
+         ibox = evas_list_remove_list(ibox, ibox);
      }
    return 1;
 }
@@ -999,18 +1043,25 @@
    E_Event_Border_Remove *ev;
    IBox *b;
    IBox_Icon *ic;
+   Evas_List *l, *ibox;
    
    ev = event;
    /* find icon and remove if there */
-   b = _ibox_zone_find(ev->border->zone);
-   if (!b) return 1;
-   ic = _ibox_icon_find(b, ev->border);
-   if (!ic) return 1;
-   _ibox_icon_free(ic);
-   b->icons = evas_list_remove(b->icons, ic);
-   _ibox_empty_handle(b);
-   _ibox_resize_handle(b);
-   _gc_orient(b->inst->gcc);
+   ibox = _ibox_zone_find(ev->border->zone);
+   for (l = ibox; l; l = l->next)
+     { 
+       b = l->data;
+       ic = _ibox_icon_find(b, ev->border); 
+       if (!ic) continue; 
+       _ibox_icon_free(ic); 
+       b->icons = evas_list_remove(b->icons, ic); 
+       _ibox_empty_handle(b); 
+       _ibox_resize_handle(b); 
+       _gc_orient(b->inst->gcc); 
+     }
+   while (ibox)
+     ibox = evas_list_remove_list(ibox, ibox);
+
    return 1;
 }
 
@@ -1020,20 +1071,27 @@
    E_Event_Border_Iconify *ev;
    IBox *b;
    IBox_Icon *ic;
+   Evas_List *l, *ibox;
    
    ev = event;
    /* add icon for ibox for right zone */
    /* do some sort of anim when iconifying */
-   b = _ibox_zone_find(ev->border->zone);
-   if (!b) return 1;
-   if (_ibox_icon_find(b, ev->border)) return 1;
-   ic = _ibox_icon_new(b, ev->border);
-   if (!ic) return 1;
-   b->icons = evas_list_append(b->icons, ic);
-   e_box_pack_end(b->o_box, ic->o_holder);
-   _ibox_empty_handle(b);
-   _ibox_resize_handle(b);
-   _gc_orient(b->inst->gcc);
+   ibox = _ibox_zone_find(ev->border->zone);
+   for (l = ibox; l; l = l->next)
+     { 
+       b = l->data; 
+       if (_ibox_icon_find(b, ev->border)) continue; 
+       ic = _ibox_icon_new(b, ev->border); 
+       if (!ic) continue; 
+       b->icons = evas_list_append(b->icons, ic); 
+       e_box_pack_end(b->o_box, ic->o_holder); 
+       _ibox_empty_handle(b); 
+       _ibox_resize_handle(b); 
+       _gc_orient(b->inst->gcc);
+     }
+
+   while (ibox)
+     ibox = evas_list_remove_list(ibox, ibox);
    return 1;
 }
 
@@ -1043,19 +1101,27 @@
    E_Event_Border_Uniconify *ev;
    IBox *b;
    IBox_Icon *ic;
+   Evas_List *l, *ibox;
    
    ev = event;
    /* del icon for ibox for right zone */
    /* do some sort of anim when uniconifying */
-   b = _ibox_zone_find(ev->border->zone);
-   if (!b) return 1;
-   ic = _ibox_icon_find(b, ev->border);
-   if (!ic) return 1;
-   _ibox_icon_free(ic);
-   b->icons = evas_list_remove(b->icons, ic);
-   _ibox_empty_handle(b);
-   _ibox_resize_handle(b);
-   _gc_orient(b->inst->gcc);
+   ibox = _ibox_zone_find(ev->border->zone);
+   for (l = ibox; l; l = l->next)
+     { 
+       b = l->data; 
+       ic = _ibox_icon_find(b, ev->border); 
+       if (!ic) continue; 
+       _ibox_icon_free(ic); 
+       b->icons = evas_list_remove(b->icons, ic); 
+       _ibox_empty_handle(b); 
+       _ibox_resize_handle(b); 
+       _gc_orient(b->inst->gcc);
+     }
+
+   while (ibox)
+     ibox = evas_list_remove_list(ibox, ibox);
+
    return 1;
 }
 
@@ -1065,15 +1131,23 @@
    E_Event_Border_Icon_Change *ev;
    IBox *b;
    IBox_Icon *ic;
+   Evas_List *l, *ibox;
    
    ev = event;
    /* update icon */
-   b = _ibox_zone_find(ev->border->zone);
-   if (!b) return 1;
-   ic = _ibox_icon_find(b, ev->border);
-   if (!ic) return 1;
-   _ibox_icon_empty(ic);
-   _ibox_icon_fill(ic);
+   ibox = _ibox_zone_find(ev->border->zone);
+   for (l = ibox; l; l = l->next)
+     {
+       b = l->data; 
+       ic = _ibox_icon_find(b, ev->border); 
+       if (!ic) continue; 
+       _ibox_icon_empty(ic); 
+       _ibox_icon_fill(ic);
+     }
+
+   while (ibox)
+     ibox = evas_list_remove_list(ibox, ibox);
+
    return 1;
 }
 
@@ -1092,6 +1166,30 @@
    return 1;
 }
 
+static int _ibox_cb_event_desk_show(void *data, int type, void *event)
+{
+   E_Event_Desk_Show *ev;
+   IBox *b;
+   Evas_List *l, *ibox;
+
+   ev = event;
+   /* delete all wins from ibox and add only for current desk */
+   ibox = _ibox_zone_find(ev->desk->zone);
+   for (l = ibox; l; l = l->next)
+     {
+       b = l->data;
+       _ibox_empty(b);
+       _ibox_fill(b);
+       _ibox_resize_handle(b); 
+       _gc_orient(b->inst->gcc);
+     }
+
+   while (ibox)
+     ibox = evas_list_remove_list(ibox, ibox);
+
+   return 1;
+}
+
 static Config_Item *
 _ibox_config_item_get(const char *id) 
 {
@@ -1107,6 +1205,8 @@
    ci = E_NEW(Config_Item, 1);
    ci->id = evas_stringshare_add(id);
    ci->show_label = 0;
+   ci->show_zone = 1;
+   ci->show_desk = 0;
    ibox_config->items = evas_list_append(ibox_config->items, ci);
    return ci;
 }
@@ -1123,6 +1223,13 @@
        inst = l->data;
        ci = _ibox_config_item_get(inst->gcc->id);
        inst->ibox->show_label = ci->show_label;
+       inst->ibox->show_zone = ci->show_zone;
+       inst->ibox->show_desk = ci->show_desk;
+
+       _ibox_empty(inst->ibox);
+       _ibox_fill(inst->ibox);
+       _ibox_resize_handle(inst->ibox); 
+       _gc_orient(inst->gcc);
      }
 }
 
@@ -1131,10 +1238,23 @@
 {
    IBox *b;
    Config_Item *ci;
+   int ok = 1;
+   Evas_List *l;
    
    b = data;
    ci = _ibox_config_item_get(b->inst->gcc->id);
-   _config_ibox_module(ci);
+   for (l = ibox_config->config_dialog; l; l = l->next)
+     {
+       E_Config_Dialog *cfd;
+
+       cfd = l->data;
+       if (cfd->data == ci)
+         {
+            ok = 0;
+            break;
+         }
+     }
+   if (ok) _config_ibox_module(ci);
 }
 
 /***************************************************************************/
@@ -1156,6 +1276,8 @@
    #define D conf_item_edd
    E_CONFIG_VAL(D, T, id, STR);
    E_CONFIG_VAL(D, T, show_label, INT);
+   E_CONFIG_VAL(D, T, show_zone, INT);
+   E_CONFIG_VAL(D, T, show_desk, INT);
    
    conf_edd = E_CONFIG_DD_NEW("IBox_Config", Config);
    #undef T
@@ -1174,6 +1296,8 @@
        ci = E_NEW(Config_Item, 1);
        ci->id = evas_stringshare_add("0");
        ci->show_label = 0;
+       ci->show_zone = 1;
+       ci->show_desk = 0;
        ibox_config->items = evas_list_append(ibox_config->items, ci);
      }
    
@@ -1197,6 +1321,9 @@
    ibox_config->handlers = evas_list_append
      (ibox_config->handlers, ecore_event_handler_add
       (E_EVENT_BORDER_ZONE_SET, _ibox_cb_event_border_zone_set, NULL));
+   ibox_config->handlers = evas_list_append
+     (ibox_config->handlers, ecore_event_handler_add
+      (E_EVENT_DESK_SHOW, _ibox_cb_event_desk_show, NULL));
    
 /* FIXME: add these later for things taskbar-like functionality   
    ibox_config->handlers = evas_list_append
@@ -1224,14 +1351,18 @@
 {
    e_gadcon_provider_unregister(&_gadcon_class);
 
-   if (ibox_config->config_dialog)
-     e_object_del(E_OBJECT(ibox_config->config_dialog));
-   
    while (ibox_config->handlers)
      {
        ecore_event_handler_del(ibox_config->handlers->data);
        ibox_config->handlers = evas_list_remove_list(ibox_config->handlers, 
ibox_config->handlers);
      }
+
+   while (ibox_config->config_dialog)
+     /* there is no need to eves_list_remove_list. It is done implicitly in
+      * dialog _free_data function
+      */
+     e_object_del(E_OBJECT(ibox_config->config_dialog->data));
+
    if (ibox_config->menu)
      {
        e_menu_post_deactivate_callback_set(ibox_config->menu, NULL, NULL);
===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_main.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- e_mod_main.h        1 Jun 2006 06:44:37 -0000       1.16
+++ e_mod_main.h        3 Jun 2006 00:03:09 -0000       1.17
@@ -15,13 +15,15 @@
    E_Menu          *menu;
    Evas_List       *handlers;
    Evas_List       *items;
-   E_Config_Dialog *config_dialog;
+   Evas_List      *config_dialog;//E_Config_Dialog *;
 };
 
 struct _Config_Item 
 {
    const char *id;
    int show_label;
+   int show_zone;
+   int show_desk;
 };
 
 EAPI extern E_Module_Api e_modapi;




_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to