Enlightenment CVS committal

Author  : devilhorns
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_int_config_clientlist.c e_int_menus.c 


Log Message:
Patch from ravenlock for client list sorting by Most Recently Used &
stacking layer.

Nice Work :)

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_clientlist.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- e_int_config_clientlist.c   21 Feb 2007 00:05:27 -0000      1.1
+++ e_int_config_clientlist.c   1 Mar 2007 21:39:06 -0000       1.2
@@ -81,11 +81,12 @@
 static Evas_Object *
 _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data 
*cfdata) 
 {
-   Evas_Object *o, *of, *ob;
+   Evas_Object *o, *of, *ob, *ot;
    E_Radio_Group *rg;
 
    o = e_widget_list_add(evas, 0, 0);
-   
+   ot = e_widget_table_add(evas, 0);
+
    of = e_widget_framelist_add(evas, _("Group By"), 0);
    rg = e_widget_radio_group_new(&(cfdata->group_by));
    ob = e_widget_radio_add(evas, _("None"), E_CLIENTLIST_GROUP_NONE, rg);
@@ -94,7 +95,8 @@
    e_widget_framelist_object_append(of, ob);
    ob = e_widget_radio_add(evas, _("Window Class"), E_CLIENTLIST_GROUP_CLASS, 
rg);
    e_widget_framelist_object_append(of, ob);
-   e_widget_list_object_append(o, of, 1, 1, 0.5);
+   //e_widget_list_object_append(o, of, 1, 1, 0.5);
+   e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 1);
    
    of = e_widget_framelist_add(evas, _("Separate Groups By"), 0);
    rg = e_widget_radio_group_new(&(cfdata->separate_with));
@@ -104,21 +106,21 @@
    e_widget_framelist_object_append(of, ob);
    ob = e_widget_radio_add(evas, _("Using menus"), 
E_CLIENTLIST_GROUP_SEP_MENU, rg);
    e_widget_framelist_object_append(of, ob);
-   e_widget_list_object_append(o, of, 1, 1, 0.5);
+   //e_widget_list_object_append(o, of, 1, 1, 0.5);
+   e_widget_table_object_append(ot, of, 1, 0, 1, 1, 1, 1, 1, 1);
    
-   of = e_widget_framelist_add(evas, _("Sort Order"), 0);
+   of = e_widget_framelist_add(evas, _("Client Sort Order"), 0);
    rg = e_widget_radio_group_new(&(cfdata->sort_by));
    ob = e_widget_radio_add(evas, _("None"), E_CLIENTLIST_SORT_NONE, rg);
    e_widget_framelist_object_append(of, ob);
    ob = e_widget_radio_add(evas, _("Alphabetical"), E_CLIENTLIST_SORT_ALPHA, 
rg);
    e_widget_framelist_object_append(of, ob);
-   ob = e_widget_radio_add(evas, _("Most recently used"), 
E_CLIENTLIST_SORT_MOST_RECENT, rg);
-   e_widget_disabled_set(ob, 1);
+   ob = e_widget_radio_add(evas, _("Window stacking layer"), 
E_CLIENTLIST_SORT_ZORDER, rg);
    e_widget_framelist_object_append(of, ob);
-   ob = e_widget_radio_add(evas, _("Z-Order"), E_CLIENTLIST_SORT_ZORDER, rg);
-   e_widget_disabled_set(ob, 1);
+   ob = e_widget_radio_add(evas, _("Most recently used"), 
E_CLIENTLIST_SORT_MOST_RECENT, rg);
    e_widget_framelist_object_append(of, ob);
-   e_widget_list_object_append(o, of, 1, 1, 0.5);
+   //e_widget_list_object_append(o, of, 1, 1, 0.5);
+   e_widget_table_object_append(ot, of, 0, 1, 1, 1, 1, 1, 1, 1);
    
    of = e_widget_framelist_add(evas, _("Iconified Windows"), 0);
    rg = e_widget_radio_group_new(&(cfdata->separate_iconified_apps));
@@ -127,11 +129,13 @@
    ob = e_widget_radio_add(evas, _("Group with current desktop"), 
E_CLIENTLIST_GROUPICONS_CURRENT, rg);
    e_widget_framelist_object_append(of, ob);
    ob = e_widget_radio_add(evas, _("Separate group"), 
E_CLIENTLIST_GROUPICONS_SEP, rg);
-   e_widget_disabled_set(ob, 1);
    e_widget_framelist_object_append(of, ob);
    ob = e_widget_check_add(evas, _("Warp to owning desktop"), 
&(cfdata->warp_to_iconified_desktop));
    e_widget_framelist_object_append(of, ob);
-   e_widget_list_object_append(o, of, 1, 1, 0.5);
-   
+   //e_widget_list_object_append(o, of, 1, 1, 0.5);
+   e_widget_table_object_append(ot, of, 1, 1, 1, 1, 1, 1, 1, 1);
+
+   e_widget_list_object_append(o, ot, 1, 1, 0.5); 
+
    return o;
 }
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.198
retrieving revision 1.199
diff -u -3 -r1.198 -r1.199
--- e_int_menus.c       21 Feb 2007 01:03:37 -0000      1.198
+++ e_int_menus.c       1 Mar 2007 21:39:06 -0000       1.199
@@ -49,6 +49,14 @@
 static void _e_int_menus_clients_item_cb     (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_clients_icon_cb     (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_clients_cleanup_cb  (void *data, E_Menu *m, 
E_Menu_Item *mi);
+static int  _e_int_menus_clients_group_desk_cb    (void *d1, void *d2);
+static int  _e_int_menus_clients_group_class_cb   (void *d1, void *d2);
+static int  _e_int_menus_clients_sort_alpha_cb    (void *d1, void *d2);
+static int  _e_int_menus_clients_sort_z_order_cb  (void *d1, void *d2);
+static void _e_int_menus_clients_add_by_class   (Evas_List *borders, E_Menu 
*m);
+static void _e_int_menus_clients_add_by_desk    (E_Desk *curr_desk, Evas_List 
*borders, E_Menu *m);
+static void _e_int_menus_clients_add_by_none    (Evas_List *borders, E_Menu 
*m);
+static void _e_int_menus_clients_menu_add_iconified  (Evas_List *borders, 
E_Menu *m);
 static void _e_int_menus_virtuals_pre_cb     (void *data, E_Menu *m);
 static void _e_int_menus_virtuals_item_cb    (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_themes_about        (void *data, E_Menu *m, 
E_Menu_Item *mi);
@@ -954,10 +962,48 @@
    return 0;
 }
 
+static int
+_e_int_menus_clients_sort_z_order_cb(void *d1, void *d2)
+{
+   E_Border *bd1;
+   E_Border *bd2;
+
+   if (!d1) return 1;
+   if (!d2) return -1;
+
+   bd1 = d1;
+   bd2 = d2;
+
+   if (bd1->layer < bd2->layer) return 1;
+   if (bd1->layer > bd2->layer) return -1;
+   return 0;   
+}
+
+static void
+_e_int_menus_clients_menu_add_iconified(Evas_List *borders, E_Menu *m)
+{
+   Evas_List *l;
+   E_Menu_Item *mi;
+
+   if (evas_list_count(borders) > 0)
+     { 
+       mi = e_menu_item_new(m); 
+       e_menu_item_separator_set(mi, 1); 
+
+       for (l = borders; l; l = l->next)
+         { 
+            E_Border *bd; 
+            bd = l->data; 
+            
+            _e_int_menus_clients_item_create(bd, m);
+         }
+     }
+}
+
 static void
 _e_int_menus_clients_add_by_class(Evas_List *borders, E_Menu *m)
 {
-   Evas_List *l = NULL;
+   Evas_List *l = NULL, *ico = NULL;
    E_Menu *subm = NULL;
    E_Menu_Item *mi;
    char *class = NULL;
@@ -967,8 +1013,16 @@
      { 
        E_Border *bd; 
        bd = l->data; 
-       if (strcmp(class, bd->client.icccm.class) != 0 && 
-           e_config->clientlist_separate_with != E_CLIENTLIST_GROUP_SEP_NONE) 
+
+       if ((bd->iconic) && 
+           (e_config->clientlist_separate_iconified_apps == 
E_CLIENTLIST_GROUPICONS_SEP))
+         { 
+            ico = evas_list_append(ico, bd); 
+            continue;
+         }
+
+       if (((strcmp(class, bd->client.icccm.class) != 0) && 
+           e_config->clientlist_separate_with != E_CLIENTLIST_GROUP_SEP_NONE))
          { 
             if (e_config->clientlist_separate_with == 
E_CLIENTLIST_GROUP_SEP_MENU) 
               { 
@@ -990,17 +1044,20 @@
          _e_int_menus_clients_item_create(bd, subm); 
        else  
          _e_int_menus_clients_item_create(bd, m); 
-     } 
+     }
+
    if ((e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU) 
        && subm && mi) 
      e_menu_item_submenu_set(mi, subm);
+
+   _e_int_menus_clients_menu_add_iconified(ico, m);
 }
 
 static void
 _e_int_menus_clients_add_by_desk(E_Desk *curr_desk, Evas_List *borders, E_Menu 
*m)
 {
    E_Desk *desk = NULL;
-   Evas_List *l = NULL, *alt = NULL;
+   Evas_List *l = NULL, *alt = NULL, *ico = NULL;
    E_Menu *subm;
    E_Menu_Item *mi;
 
@@ -1009,17 +1066,25 @@
      {
        E_Border *bd;
        
-       bd = l->data;
+       bd = l->data; 
+       if (bd->iconic && e_config->clientlist_separate_iconified_apps && 
E_CLIENTLIST_GROUPICONS_SEP) 
+         { 
+            ico = evas_list_append(ico, bd); 
+            continue; 
+         }
+
        if (bd->desk != curr_desk)
          {
-            if (!bd->iconic || 
-               (bd->iconic && e_config->clientlist_separate_iconified_apps == 
E_CLIENTLIST_GROUPICONS_OWNER))
+            if ((!bd->iconic) || 
+                (bd->iconic && e_config->clientlist_separate_iconified_apps == 
+                 E_CLIENTLIST_GROUPICONS_OWNER))
               {
                  alt = evas_list_append(alt, bd); 
                  continue;
               }
          }
-       _e_int_menus_clients_item_create(bd, m);
+       else
+         _e_int_menus_clients_item_create(bd, m);
      }
 
    desk = NULL;
@@ -1036,7 +1101,8 @@
          { 
             E_Border *bd;
             
-            bd = l->data;
+            bd = l->data; 
+
             if (bd->desk != desk && 
                 e_config->clientlist_separate_with != 
E_CLIENTLIST_GROUP_SEP_NONE)
               {
@@ -1065,6 +1131,31 @@
            && subm && mi) 
          e_menu_item_submenu_set(mi, subm);
      }
+   
+   _e_int_menus_clients_menu_add_iconified(ico, m);
+}
+
+static void
+_e_int_menus_clients_add_by_none(Evas_List *borders, E_Menu *m)
+{
+   Evas_List *l = NULL, *ico = NULL;
+   E_Menu *subm;
+   E_Menu_Item *mi;
+   
+   for (l = borders; l; l = l->next)
+     {
+       E_Border *bd;
+
+       bd = l->data;
+       if (bd->iconic && e_config->clientlist_separate_iconified_apps && 
E_CLIENTLIST_GROUPICONS_SEP) 
+         { 
+            ico = evas_list_append(ico, bd); 
+            continue; 
+         }
+       _e_int_menus_clients_item_create(bd, m);
+     }
+
+   _e_int_menus_clients_menu_add_iconified(ico, m);
 }
 
 static void
@@ -1080,8 +1171,13 @@
    e_menu_pre_activate_callback_set(m, NULL, NULL);
    /* get the current clients */
    zone = e_zone_current_get(e_container_current_get(e_manager_current_get()));
-   desk = e_desk_current_get(zone);
-   for (l = e_border_client_list(); l; l = l->next)
+   desk = e_desk_current_get(zone); 
+
+   if (e_config->clientlist_sort_by == E_CLIENTLIST_SORT_MOST_RECENT) 
+     l = e_border_focus_stack_get(); 
+   else
+     l = e_border_client_list();
+   for (; l; l = l->next)
      {
        E_Border *border;
 
@@ -1104,31 +1200,31 @@
 
    if (borders) 
      {
+       /* Sort the borders */
        if (e_config->clientlist_sort_by == E_CLIENTLIST_SORT_ALPHA)
           borders = evas_list_sort(borders, evas_list_count(borders), 
                               _e_int_menus_clients_sort_alpha_cb);
 
+       if (e_config->clientlist_sort_by == E_CLIENTLIST_SORT_ZORDER)
+         borders = evas_list_sort(borders, evas_list_count(borders),
+                             _e_int_menus_clients_sort_z_order_cb);
+
+       /* Group the borders */
         if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_DESK)
          { 
-            borders = evas_list_sort(borders, evas_list_count(borders), 
+             borders = evas_list_sort(borders, evas_list_count(borders), 
                           _e_int_menus_clients_group_desk_cb);
-            _e_int_menus_clients_add_by_desk(desk, borders, m);
+             _e_int_menus_clients_add_by_desk(desk, borders, m);
          }
         if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_CLASS) 
-         {
-            borders = evas_list_sort(borders, evas_list_count(borders), 
-                          _e_int_menus_clients_group_class_cb);
-            _e_int_menus_clients_add_by_class(borders, m);
+         { 
+            borders = evas_list_sort(borders, evas_list_count(borders), 
+                  _e_int_menus_clients_group_class_cb); 
+            _e_int_menus_clients_add_by_class(borders, m);
          }
        if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_NONE)
          {
-            for (l = borders; l; l = l->next)
-              {
-                E_Border *bd;
-       
-                bd = l->data;
-                _e_int_menus_clients_item_create(bd, m);
-              }
+            _e_int_menus_clients_add_by_none(borders, m);
          }
      }
    



-------------------------------------------------------------------------
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