Enlightenment CVS committal

Author  : devilhorns
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        Makefile.am e_config.c e_config.h e_configure.c e_includes.h 
        e_int_menus.c 
Added Files:
        e_int_config_clientlist.c e_int_config_clientlist.h 


Log Message:
Ravenlocks 'Client List Configuration' patch. Allows users to configure
different options for the Client List Menu: Grouping, Separators, Sort
Order, etc, etc.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/Makefile.am,v
retrieving revision 1.174
retrieving revision 1.175
diff -u -3 -r1.174 -r1.175
--- Makefile.am 13 Feb 2007 16:33:35 -0000      1.174
+++ Makefile.am 21 Feb 2007 00:05:27 -0000      1.175
@@ -185,6 +185,7 @@
 e_widget_desk_preview.h \
 e_int_config_borders.h \
 e_int_config_desk.h \
+e_int_config_clientlist.h \
 e_fm_prop.h
  
 enlightenment_src = \
@@ -347,6 +348,7 @@
 e_int_config_borders.c \
 e_int_config_desk.c \
 e_fm_prop.c \
+e_int_config_clientlist.c \
 $(ENLIGHTENMENTHEADERS)
 
 enlightenment_SOURCES = \
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_config.c,v
retrieving revision 1.226
retrieving revision 1.227
diff -u -3 -r1.226 -r1.227
--- e_config.c  13 Feb 2007 16:33:35 -0000      1.226
+++ e_config.c  21 Feb 2007 00:05:27 -0000      1.227
@@ -77,7 +77,8 @@
        else
          _e_config_profile = strdup("default");
      }
-   else _e_config_profile = strdup(_e_config_profile);
+   else 
+     _e_config_profile = strdup(_e_config_profile);
 
    _e_config_gadcon_client_edd = E_CONFIG_DD_NEW("E_Config_Gadcon_Client", 
E_Config_Gadcon_Client);
 #undef T
@@ -503,6 +504,12 @@
    E_CONFIG_VAL(D, T, dpms_suspend_timeout, INT);
    E_CONFIG_VAL(D, T, dpms_off_timeout, INT);
    
+   E_CONFIG_VAL(D, T, clientlist_group_by, INT);
+   E_CONFIG_VAL(D, T, clientlist_separate_with, INT);
+   E_CONFIG_VAL(D, T, clientlist_sort_by, INT);
+   E_CONFIG_VAL(D, T, clientlist_separate_iconified_apps, INT);
+   E_CONFIG_VAL(D, T, clientlist_warp_to_iconified_desktop, INT);
+   
    E_CONFIG_VAL(D, T, border_raise_on_mouse_action, INT);
    E_CONFIG_VAL(D, T, border_raise_on_focus, INT);
    E_CONFIG_VAL(D, T, desk_flip_wrap, INT);
@@ -1319,7 +1326,15 @@
    e_config->screensaver_blanking = 2;
    e_config->screensaver_expose = 2;
    IFCFGEND;
-     
+    
+   IFCFG(0x0110);
+   e_config->clientlist_group_by = 0;
+   e_config->clientlist_separate_with = 0;
+   e_config->clientlist_sort_by = 0;
+   e_config->clientlist_separate_iconified_apps = 0;
+   e_config->clientlist_warp_to_iconified_desktop = 0;
+   IFCFGEND;
+
    e_config->config_version = E_CONFIG_FILE_VERSION;   
      
 #if 0 /* example of new config */
@@ -1431,6 +1446,12 @@
    E_CONFIG_LIMIT(e_config->screensaver_interval, 0, 5400);
    E_CONFIG_LIMIT(e_config->screensaver_blanking, 0, 2);
    E_CONFIG_LIMIT(e_config->screensaver_expose, 0, 2);
+   
+   E_CONFIG_LIMIT(e_config->clientlist_group_by, 0, 2);
+   E_CONFIG_LIMIT(e_config->clientlist_separate_with, 0, 2);
+   E_CONFIG_LIMIT(e_config->clientlist_sort_by, 0, 3);
+   E_CONFIG_LIMIT(e_config->clientlist_separate_iconified_apps, 0, 2);
+   E_CONFIG_LIMIT(e_config->clientlist_warp_to_iconified_desktop, 0, 1);
    
    /* FIXME: disabled auto apply because it causes problems */
    e_config->cfgdlg_auto_apply = 0;
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_config.h,v
retrieving revision 1.141
retrieving revision 1.142
diff -u -3 -r1.141 -r1.142
--- e_config.h  13 Feb 2007 16:33:35 -0000      1.141
+++ e_config.h  21 Feb 2007 00:05:27 -0000      1.142
@@ -52,7 +52,7 @@
 /* increment this whenever a new set of config values are added but the users
  * config doesn't need to be wiped - simply new values need to be put in
  */
-#define E_CONFIG_FILE_GENERATION 0x0109
+#define E_CONFIG_FILE_GENERATION 0x0110
 #define E_CONFIG_FILE_VERSION    ((E_CONFIG_FILE_EPOCH << 16) | 
E_CONFIG_FILE_GENERATION)
 
 #define E_EVAS_ENGINE_DEFAULT      0
@@ -246,6 +246,12 @@
    int         dpms_suspend_timeout;
    int         dpms_off_enable;
    int         dpms_off_timeout;
+
+   int         clientlist_group_by;
+   int         clientlist_separate_with;
+   int         clientlist_sort_by;
+   int         clientlist_separate_iconified_apps;
+   int         clientlist_warp_to_iconified_desktop;
 
    int         display_res_restore; // GUI
    int         display_res_width; // GUI
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_configure.c,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -3 -r1.89 -r1.90
--- e_configure.c       13 Feb 2007 16:33:35 -0000      1.89
+++ e_configure.c       21 Feb 2007 00:05:27 -0000      1.90
@@ -431,6 +431,7 @@
    _e_configure_item_add(cat, _("Applications Menu"), 
"enlightenment/applications", e_int_config_apps);
 #endif
    _e_configure_item_add(cat, _("Menu Settings"), 
"enlightenment/menu_settings", e_int_config_menus);
+   _e_configure_item_add(cat, _("Client List Menu"), "enlightenment/windows", 
e_int_config_clientlist);
 
    cat = _e_configure_category_add(eco, _("Language"), "enlightenment/intl");
    _e_configure_item_add(cat, _("Language Settings"), "enlightenment/intl", 
e_int_config_intl);
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_includes.h,v
retrieving revision 1.147
retrieving revision 1.148
diff -u -3 -r1.147 -r1.148
--- e_includes.h        13 Feb 2007 16:33:35 -0000      1.147
+++ e_includes.h        21 Feb 2007 00:05:27 -0000      1.148
@@ -161,4 +161,5 @@
 #include "e_widget_desk_preview.h"
 #include "e_int_config_borders.h"
 #include "e_int_config_desk.h"
+#include "e_int_config_clientlist.h"
 #include "e_fm_prop.h"
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.196
retrieving revision 1.197
diff -u -3 -r1.196 -r1.197
--- e_int_menus.c       18 Feb 2007 11:46:56 -0000      1.196
+++ e_int_menus.c       21 Feb 2007 00:05:27 -0000      1.197
@@ -890,7 +890,7 @@
 }
 
 static int
-_e_int_menus_clients_sort_border_cb(void *d1, void *d2)
+_e_int_menus_clients_group_desk_cb(void *d1, void *d2)
 {
    E_Border *bd1;
    E_Border *bd2;
@@ -907,10 +907,153 @@
 
    if (j > k) return 1;
    if (j < k) return -1;
+   return -1;   /* Returning '-1' on equal is intentional */
+}
+
+static int
+_e_int_menus_clients_group_class_cb(void *d1, void *d2)
+{
+   E_Border *bd1;
+   E_Border *bd2;
+
+   if (!d1) return 1;
+   if (!d2) return -1;
+
+   bd1 = d1;
+   bd2 = d2;
+   
+   if (strcmp((const char*)bd1->client.icccm.class, (const 
char*)bd2->client.icccm.class) > 0) return 1;
+   if (strcmp((const char*)bd1->client.icccm.class, (const 
char*)bd2->client.icccm.class) < 0) return -1;
+   return -1;   /* Returning '-1' on equal is intentional */
+}
+
+static int
+_e_int_menus_clients_sort_alpha_cb(void *d1, void *d2)
+{
+   E_Border *bd1;
+   E_Border *bd2;
+
+   if (!d1) return 1;
+   if (!d2) return -1;
+
+   bd1 = d1;
+   bd2 = d2;
+
+   if (strcasecmp(e_border_name_get(bd1), e_border_name_get(bd2)) > 0) return 
1;
+   if (strcasecmp(e_border_name_get(bd1), e_border_name_get(bd2)) < 0) return 
-1;
    return 0;
 }
 
 static void
+_e_int_menus_clients_add_by_class(Evas_List *borders, E_Menu *m)
+{
+   Evas_List *l = NULL;
+   E_Menu *subm = NULL;
+   E_Menu_Item *mi;
+   char *class = NULL;
+
+   class = strdup("");
+   for (l = borders; l; l = l->next) 
+     { 
+       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 (e_config->clientlist_separate_with == 
E_CLIENTLIST_GROUP_SEP_MENU) 
+              { 
+                 if (subm && mi) 
+                   e_menu_item_submenu_set(mi, subm); 
+                 mi = e_menu_item_new(m); 
+                 e_menu_item_label_set(mi, bd->client.icccm.class); 
+                 e_util_menu_item_edje_icon_set(mi, "enlightenment/windows"); 
+                 subm = e_menu_new(); 
+              } 
+            else 
+              { 
+                 mi = e_menu_item_new(m); 
+                 e_menu_item_separator_set(mi, 1); 
+              } 
+            class = strdup(bd->client.icccm.class); 
+         } 
+       if (e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU) 
+         _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);
+}
+
+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;
+   E_Menu *subm;
+   E_Menu_Item *mi;
+
+   /* Deal with present desk first */
+   for (l = borders; l; l = l->next)
+     {
+       E_Border *bd;
+       
+       bd = l->data;
+       if (bd->desk != curr_desk)
+         {
+            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);
+     }
+
+   desk = NULL;
+   subm = NULL;
+   if (evas_list_count(alt) > 0) 
+     {
+       if (e_config->clientlist_separate_with == E_CLIENTLIST_GROUP_SEP_MENU)
+         {
+            mi = e_menu_item_new(m);
+            e_menu_item_separator_set(mi, 1);
+         }
+       
+       for (l = alt; l; l = l->next)
+         { 
+            E_Border *bd;
+            
+            bd = l->data;
+            if ( bd->desk != desk && e_config->clientlist_separate_with != 
E_CLIENTLIST_GROUP_SEP_NONE)
+              {
+                 if (e_config->clientlist_separate_with == 
E_CLIENTLIST_GROUP_SEP_MENU)
+                   { 
+                      if (subm && mi) 
+                        e_menu_item_submenu_set(mi, subm); 
+                      mi = e_menu_item_new(m); 
+                      e_menu_item_label_set(mi, bd->desk->name); 
+                      e_util_menu_item_edje_icon_set(mi, 
"enlightenment/desktops"); 
+                      subm = e_menu_new(); 
+                   }
+                   else
+                   { 
+                      mi = e_menu_item_new(m); 
+                      e_menu_item_separator_set(mi, 1);
+                   }
+                 desk = bd->desk;
+              } 
+            if (e_config->clientlist_separate_with == 
E_CLIENTLIST_GROUP_SEP_MENU) 
+              _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);
+     }
+}
+
+static void
 _e_int_menus_clients_pre_cb(void *data, E_Menu *m)
 {
    E_Menu *subm;
@@ -922,8 +1065,7 @@
 
    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()));
+   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)
      {
@@ -945,49 +1087,37 @@
        mi = e_menu_item_new(m);
        e_menu_item_label_set(mi, _("(No Windows)"));
      }
-   for (l = borders; l; l = l->next)
+
+   if (borders) 
      {
-       E_Border *bd;
-       
-       bd = l->data;
-       if (bd->desk != desk)
+       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_group_by == E_CLIENTLIST_GROUP_DESK)
+         { 
+            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);
+         }
+        if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_CLASS) 
          {
-            alt = evas_list_append(alt, bd);
-            continue;
+            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);
          }
-       _e_int_menus_clients_item_create(bd, m);
-     }
-
-   alt = evas_list_sort(alt, evas_list_count(alt), 
-                        _e_int_menus_clients_sort_border_cb);
-
-   desk = NULL;
-   subm = NULL;
-   if (evas_list_count(alt) > 0) 
-     {
-       mi = e_menu_item_new(m);
-       e_menu_item_separator_set(mi, 1);
-       for (l = alt; l; l = l->next)
+       if (e_config->clientlist_group_by == E_CLIENTLIST_GROUP_NONE)
          {
-            E_Border *bd;
-            
-            bd = l->data;
-            if (bd->desk != desk)
-              { 
-                 if (subm && mi) 
-                   e_menu_item_submenu_set(mi, subm);
-                 mi = e_menu_item_new(m);
-                  e_menu_item_label_set(mi, bd->desk->name);
-                 e_util_menu_item_edje_icon_set(mi, "enlightenment/desktops");
-                 subm = e_menu_new();
-                 desk = bd->desk;
-              }
-            _e_int_menus_clients_item_create(bd, subm);
+            for (l = borders; l; l = l->next)
+              {
+                E_Border *bd;
+       
+                bd = l->data;
+                _e_int_menus_clients_item_create(bd, m);
+              }
          }
-       if (subm && mi) 
-         e_menu_item_submenu_set(mi, subm);
      }
-
+   
    mi = e_menu_item_new(m);
    e_menu_item_separator_set(mi, 1);
    
@@ -1061,12 +1191,18 @@
    
    bd = data;
    E_OBJECT_CHECK(bd);
+
    if (bd->iconic)
      {
+        if (e_config->clientlist_warp_to_iconified_desktop == 1)
+          e_desk_show(bd->desk);
+
        if (!bd->lock_user_iconify)
          e_border_uniconify(bd);
      }
-   e_desk_show(bd->desk);
+
+   if (!bd->iconic) e_desk_show(bd->desk);
+
    if (!bd->lock_user_stacking)
      e_border_raise(bd);
    if (!bd->lock_focus_out)



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