Hello,

Attached is a patch which will enable the "sort by stacking layer" option on the client list config panel. This was previously named "Z-Order". It will sort the clients within the groups according to their stacking layer. Those clients above will be on top while those below are... well, on the bottom.

Additionally, you can now specify that all iconified apps are in their own section as opposed to with the current desktop or the owning desktop. The section is presently at the bottom of the list. Note that in both the Desktop and Class grouping modes, the iconified apps are ungrouped (other than being in their own section).

Questions/Comments/Complaints welcome.

--
Regards,
Ravenlock
Index: e17/apps/e/src/bin/e_int_config_clientlist.c
===================================================================
RCS file: /var/cvs/e/e17/apps/e/src/bin/e_int_config_clientlist.c,v
retrieving revision 1.1
diff -u -r1.1 e_int_config_clientlist.c
--- e17/apps/e/src/bin/e_int_config_clientlist.c        21 Feb 2007 00:05:27 
-0000      1.1
+++ e17/apps/e/src/bin/e_int_config_clientlist.c        1 Mar 2007 07:08:23 
-0000
@@ -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,22 @@
    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, _("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);
+   ob = e_widget_radio_add(evas, _("Most recently used"), 
E_CLIENTLIST_SORT_MOST_RECENT, rg);
    e_widget_disabled_set(ob, 1);
    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 +130,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;
 }
Index: e17/apps/e/src/bin/e_int_menus.c
===================================================================
RCS file: /var/cvs/e/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.198
diff -u -r1.198 e_int_menus.c
--- e17/apps/e/src/bin/e_int_menus.c    21 Feb 2007 01:03:37 -0000      1.198
+++ e17/apps/e/src/bin/e_int_menus.c    1 Mar 2007 07:08:24 -0000
@@ -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,6 +1013,13 @@
      { 
        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;
+         }
+
        if (strcmp(class, bd->client.icccm.class) != 0 && 
            e_config->clientlist_separate_with != E_CLIENTLIST_GROUP_SEP_NONE) 
          { 
@@ -990,17 +1043,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,7 +1065,13 @@
      {
        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 || 
@@ -1019,7 +1081,8 @@
                  continue;
               }
          }
-       _e_int_menus_clients_item_create(bd, m);
+       else
+            _e_int_menus_clients_item_create(bd, m);
      }
 
    desk = NULL;
@@ -1036,7 +1099,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 +1129,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
@@ -1104,31 +1193,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-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to