diff --git a/src/factory.c b/src/factory.c index 31801301..1999c67f 100644 --- a/src/factory.c +++ b/src/factory.c @@ -64,6 +64,8 @@ char * Bound_script[10]; #define putenv _putenv #endif +#include "unicode.h" + /// /// Number of characters for name in fileselector. /// Window is adjusted according to it. @@ -2161,7 +2163,10 @@ void Draw_script_name(word x, word y, word index, byte highlighted) } } - Print_in_window(x, y, current_item->Short_name, fg,bg); + if (current_item->Unicode_short_name != NULL) + Print_in_window_unicode(x, y, current_item->Unicode_short_name, fg, bg); + else + Print_in_window(x, y, current_item->Short_name, fg,bg); Update_window_area(x,y,NAME_WIDTH*8,8); } @@ -2258,8 +2263,8 @@ void Draw_script_information(T_Fileselector_item * script_item, const char *full static void Add_script(void * pdata, const char *file_name, const word *unicode_name, byte is_file, byte is_directory, byte is_hidden) { int len; + T_Fileselector_item * item; (void)pdata; - (void)unicode_name; if (is_file) { @@ -2271,7 +2276,12 @@ static void Add_script(void * pdata, const char *file_name, const word *unicode_ if (is_hidden && !Config.Show_hidden_files) return; - Add_element_to_list(&Scripts_selector, file_name, Format_filename(file_name, NAME_WIDTH+1, 0), 0, ICON_NONE); + item = Add_element_to_list(&Scripts_selector, file_name, Format_filename(file_name, NAME_WIDTH+1, 0), 0, ICON_NONE); + if (item != NULL && unicode_name != NULL) + { + item->Unicode_full_name = Unicode_strdup(unicode_name); + item->Unicode_short_name = Unicode_strdup(Format_filename_unicode(unicode_name, NAME_WIDTH+1, 1)); + } } else if (is_directory) { @@ -2285,7 +2295,12 @@ static void Add_script(void * pdata, const char *file_name, const word *unicode_ if (is_hidden && !Config.Show_hidden_directories) return; - Add_element_to_list(&Scripts_selector, file_name, Format_filename(file_name, NAME_WIDTH+1, 1), 1, ICON_NONE); + item = Add_element_to_list(&Scripts_selector, file_name, Format_filename(file_name, NAME_WIDTH+1, 1), 1, ICON_NONE); + if (item != NULL && unicode_name != NULL) + { + item->Unicode_full_name = Unicode_strdup(unicode_name); + item->Unicode_short_name = Unicode_strdup(Format_filename_unicode(unicode_name, NAME_WIDTH+1, 1)); + } } } diff --git a/src/filesel.c b/src/filesel.c index 3c2a02f0..8bca082d 100644 --- a/src/filesel.c +++ b/src/filesel.c @@ -498,8 +498,11 @@ static void Read_dir_callback(void * pdata, const char *file_name, const word *u // Add to list item = Add_element_to_list(p->list, file_name, Format_filename(file_name, 19, 1), 1, ICON_NONE); - item->Unicode_full_name = Unicode_strdup(unicode_name); - item->Unicode_short_name = Unicode_strdup(Format_filename_unicode(unicode_name, 19, 1)); + if (item != NULL && unicode_name != NULL) + { + item->Unicode_full_name = Unicode_strdup(unicode_name); + item->Unicode_short_name = Unicode_strdup(Format_filename_unicode(unicode_name, 19, 1)); + } p->list->Nb_directories++; } else if (is_file && // It's a file @@ -512,8 +515,11 @@ static void Read_dir_callback(void * pdata, const char *file_name, const word *u { // Add to list item = Add_element_to_list(p->list, file_name, Format_filename(file_name, 19, 0), 0, ICON_NONE); - item->Unicode_full_name = Unicode_strdup(unicode_name); - item->Unicode_short_name = Unicode_strdup(Format_filename_unicode(unicode_name, 19, 0)); + if (item != NULL && unicode_name != NULL) + { + item->Unicode_full_name = Unicode_strdup(unicode_name); + item->Unicode_short_name = Unicode_strdup(Format_filename_unicode(unicode_name, 19, 0)); + } p->list->Nb_files++; // Stop searching break; diff --git a/src/filesel.h b/src/filesel.h index 98162db7..4f7c7d9b 100644 --- a/src/filesel.h +++ b/src/filesel.h @@ -38,6 +38,8 @@ T_Fileselector_item * Add_element_to_list(T_Fileselector *list, const char * ful /// including the '\\0'. char * Format_filename(const char * fname, word max_length, int type); +word * Format_filename_unicode(const word * fname, word max_length, int type); + void Free_fileselector_list(T_Fileselector *list); void Sort_list_of_files(T_Fileselector *list);