Index: source/blender/windowmanager/intern/wm_operators.c =================================================================== --- source/blender/windowmanager/intern/wm_operators.c (revision 26141) +++ source/blender/windowmanager/intern/wm_operators.c (working copy) @@ -1008,6 +1008,9 @@ uiLayout *layout, *split, *col; uiStyle *style= U.uistyles.first; struct RecentFile *recent; + char corrected_display_name[80]; + int displayedlen; + int max_filename_width; int i; #ifdef NAN_BUILDINFO @@ -1069,11 +1072,32 @@ uiItemL(col, "", 0); col = uiLayoutColumn(split, 0); + + /* Compute max allowed filename width */ + max_filename_width = 240 - 2*UI_UNIT_X; + if(WM_key_event_operator_string(C, "WM_OT_open_mainfile", WM_OP_EXEC_DEFAULT, NULL, corrected_display_name, sizeof(corrected_display_name))) + max_filename_width -= BLF_width(corrected_display_name); + uiItemL(col, "Recent", 0); for(recent = G.recent_files.first, i=0; (i<6) && (recent); recent = recent->next, i++) { char *display_name= BLI_last_slash(recent->filename); if(display_name) display_name++; /* skip the slash */ else display_name= recent->filename; + + /* Reduce displayed file name string, if needed */ + if (BLF_width(display_name)>max_filename_width) { + displayedlen=strlen(display_name); + if (displayedlen > 80) displayedlen = 80; /* Avoid buffer overflow */ + do { + displayedlen--; + strncpy(corrected_display_name, display_name, displayedlen-13); + corrected_display_name[displayedlen-13]=0; + strcat(corrected_display_name, "..."); + strncpy(corrected_display_name+displayedlen-10, display_name+strlen(display_name)-10, 10); + corrected_display_name[displayedlen]=0; + } while (BLF_width(corrected_display_name)>max_filename_width); + display_name = corrected_display_name; + } uiItemStringO(col, display_name, ICON_FILE_BLEND, "WM_OT_open_mainfile", "path", recent->filename); }