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