diff --git a/src/bin/e_config.c b/src/bin/e_config.c index cd58fd473..b305e77dd 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -511,6 +511,7 @@ e_config_init(void) 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, clientlist_max_caption_len, INT); E_CONFIG_VAL(D, T, mouse_accel_numerator, INT); E_CONFIG_VAL(D, T, mouse_accel_denominator, INT); @@ -1357,6 +1358,10 @@ e_config_init(void) if (!e_config->icon_theme) e_config->icon_theme = evas_stringshare_add("hicolor"); + IFCFG(0x111) + e_config->clientlist_max_caption_len = 0; + IFCFGEND; + e_config->config_version = E_CONFIG_FILE_VERSION; #if 0 /* example of new config */ @@ -1475,6 +1480,7 @@ e_config_init(void) 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); + E_CONFIG_LIMIT(e_config->clientlist_max_caption_len, 0, E_CLIENTLIST_MAX_CAPTION_LEN); E_CONFIG_LIMIT(e_config->mouse_accel_numerator, 1, 10); E_CONFIG_LIMIT(e_config->mouse_accel_denominator, 1, 10); diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 74300775e..9f0f0f4fb 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -253,6 +253,7 @@ struct _E_Config int clientlist_sort_by; // GUI int clientlist_separate_iconified_apps; // GUI int clientlist_warp_to_iconified_desktop; // GUI + int clientlist_max_caption_len; int mouse_accel_numerator; // GUI int mouse_accel_denominator; // GUI diff --git a/src/bin/e_int_config_clientlist.c b/src/bin/e_int_config_clientlist.c index 7067e0324..de7b88294 100644 --- a/src/bin/e_int_config_clientlist.c +++ b/src/bin/e_int_config_clientlist.c @@ -17,6 +17,7 @@ struct _E_Config_Dialog_Data int sort_by; int separate_iconified_apps; int warp_to_iconified_desktop; + int max_caption_len; }; EAPI E_Config_Dialog * @@ -50,6 +51,7 @@ _fill_data(E_Config_Dialog_Data *cfdata) cfdata->sort_by = e_config->clientlist_sort_by; cfdata->separate_iconified_apps = e_config->clientlist_separate_iconified_apps; cfdata->warp_to_iconified_desktop = e_config->clientlist_warp_to_iconified_desktop; + cfdata->max_caption_len = e_config->clientlist_max_caption_len; } static void * @@ -77,6 +79,7 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) e_config->clientlist_sort_by = cfdata->sort_by; e_config->clientlist_separate_iconified_apps = cfdata->separate_iconified_apps; e_config->clientlist_warp_to_iconified_desktop = cfdata->warp_to_iconified_desktop; + e_config->clientlist_max_caption_len = cfdata->max_caption_len; e_config_save_queue(); return 1; } @@ -137,6 +140,11 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf e_widget_framelist_object_append(of, ob); e_widget_table_object_append(ot, of, 1, 1, 1, 1, 1, 1, 1, 1); + of = e_widget_framelist_add(evas, _("Maximum Caption Length"), 0); + ob = e_widget_slider_add(evas, 1, 0, _("%1.0f Chars"), 0.0, E_CLIENTLIST_MAX_CAPTION_LEN, 2.0, 0, NULL, &(cfdata->max_caption_len), 200); + e_widget_framelist_object_append(of, ob); + e_widget_table_object_append(ot, of, 0, 2, 2, 1, 1, 1, 1, 0); + e_widget_list_object_append(o, ot, 1, 1, 0.5); return o; diff --git a/src/bin/e_int_config_clientlist.h b/src/bin/e_int_config_clientlist.h index 9413b0913..2c0b0503b 100644 --- a/src/bin/e_int_config_clientlist.h +++ b/src/bin/e_int_config_clientlist.h @@ -20,6 +20,8 @@ #define E_CLIENTLIST_GROUPICONS_CURRENT 1 #define E_CLIENTLIST_GROUPICONS_SEP 2 +#define E_CLIENTLIST_MAX_CAPTION_LEN 256 + EAPI E_Config_Dialog *e_int_config_clientlist(E_Container *con); #endif diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index 7f6e2b7b0..2dac1d666 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -55,6 +55,7 @@ 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 const char *_e_int_menus_clients_title_abbrv (const char *title); 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); @@ -1250,13 +1251,36 @@ _e_int_menus_clients_pre_cb(void *data, E_Menu *m) e_object_data_set(E_OBJECT(m), borders); } +static const char * +_e_int_menus_clients_title_abbrv(const char *title) +{ + char *abbv, *left, *right; + int max_len; + + max_len = e_config->clientlist_max_caption_len; + if ((max_len != 0) && (strlen(title) > max_len)) + { + abbv = calloc(E_CLIENTLIST_MAX_CAPTION_LEN+4, sizeof(char)); + left = title; + right = title + (strlen(title) - (max_len/2)); + + strncpy(abbv, left, max_len/2); + strncat(abbv, "...", 3); + strncat(abbv, right, max_len/2); + + return abbv; + } + else + return title; +} + static void _e_int_menus_clients_item_create(E_Border *bd, E_Menu *m) { E_Menu_Item *mi; const char *title; - title = e_border_name_get(bd); + title = _e_int_menus_clients_title_abbrv(e_border_name_get(bd)); mi = e_menu_item_new(m); e_menu_item_check_set(mi, 1); if ((title) && (title[0]))