diff options
Diffstat (limited to 'indra/newview/llfilepicker.cpp')
-rw-r--r-- | indra/newview/llfilepicker.cpp | 68 |
1 files changed, 47 insertions, 21 deletions
diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp index 1ad55ae35c..8f5882615f 100644 --- a/indra/newview/llfilepicker.cpp +++ b/indra/newview/llfilepicker.cpp @@ -38,6 +38,7 @@ #include "llkeyboard.h" #include "lldir.h" #include "llframetimer.h" +#include "lltrans.h" #if LL_SDL #include "llwindowsdl.h" // for some X/GTK utils to help with filepickers @@ -893,19 +894,45 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename) return success; } -#elif LL_LINUX +#elif LL_LINUX || LL_SOLARIS # if LL_GTK // static void LLFilePicker::add_to_selectedfiles(gpointer data, gpointer user_data) { + // We need to run g_filename_to_utf8 in the user's locale + std::string saved_locale(setlocale(LC_ALL, NULL)); + setlocale(LC_ALL, ""); + LLFilePicker* picker = (LLFilePicker*) user_data; + GError *error = NULL; gchar* filename_utf8 = g_filename_to_utf8((gchar*)data, - -1, NULL, NULL, NULL); - picker->mFiles.push_back(std::string(filename_utf8)); - lldebugs << "ADDED FILE " << filename_utf8 << llendl; - g_free(filename_utf8); + -1, NULL, NULL, &error); + if (error) + { + // *FIXME. + // This condition should really be notified to the user, e.g. + // through a message box. Just logging it is inappropriate. + + // g_filename_display_name is ideal, but >= glib 2.6, so: + // a hand-rolled hacky makeASCII which disallows control chars + std::string display_name; + for (const gchar *str = (const gchar *)data; *str; str++) + { + display_name += (char)((*str >= 0x20 && *str <= 0x7E) ? *str : '?'); + } + llwarns << "g_filename_to_utf8 failed on \"" << display_name << "\": " << error->message << llendl; + } + + if (filename_utf8) + { + picker->mFiles.push_back(std::string(filename_utf8)); + lldebugs << "ADDED FILE " << filename_utf8 << llendl; + g_free(filename_utf8); + } + + setlocale(LC_ALL, saved_locale.c_str()); } // static @@ -934,8 +961,7 @@ void LLFilePicker::chooser_responder(GtkWidget *widget, gint response, gpointer GtkWindow* LLFilePicker::buildFilePicker(bool is_save, bool is_folder, std::string context) { - if (LLWindowSDL::ll_try_gtk_init() && - ! gViewerWindow->getWindow()->getFullscreen()) + if (LLWindowSDL::ll_try_gtk_init()) { GtkWidget *win = NULL; GtkFileChooserAction pickertype = @@ -1017,7 +1043,7 @@ static void add_common_filters_to_gtkchooser(GtkFileFilter *gfilter, gfilter); GtkFileFilter *allfilter = gtk_file_filter_new(); gtk_file_filter_add_pattern(allfilter, "*"); - gtk_file_filter_set_name(allfilter, "All Files"); + gtk_file_filter_set_name(allfilter, LLTrans::getString("all_files").c_str()); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(picker), allfilter); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(picker), gfilter); } @@ -1045,13 +1071,13 @@ static std::string add_simple_mime_filter_to_gtkchooser(GtkWindow *picker, static std::string add_wav_filter_to_gtkchooser(GtkWindow *picker) { return add_simple_mime_filter_to_gtkchooser(picker, "audio/x-wav", - "Sounds (*.wav)"); + LLTrans::getString("sound_files") + " (*.wav)"); } static std::string add_bvh_filter_to_gtkchooser(GtkWindow *picker) { return add_simple_pattern_filter_to_gtkchooser(picker, "*.bvh", - "Animations (*.bvh)"); + LLTrans::getString("animation_files") + " (*.bvh)"); } static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker) @@ -1061,7 +1087,7 @@ static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker) gtk_file_filter_add_mime_type(gfilter, "image/jpeg"); gtk_file_filter_add_mime_type(gfilter, "image/png"); gtk_file_filter_add_mime_type(gfilter, "image/bmp"); - std::string filtername = "Images (*.tga; *.bmp; *.jpg; *.png)"; + std::string filtername = LLTrans::getString("image_files") + " (*.tga; *.bmp; *.jpg; *.png)"; add_common_filters_to_gtkchooser(gfilter, picker, filtername); return filtername; } @@ -1081,7 +1107,7 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename { std::string suggest_name = "untitled"; std::string suggest_ext = ""; - std::string caption = "Save "; + std::string caption = LLTrans::getString("save_file_verb") + " "; switch (filter) { case FFSAVE_WAV: @@ -1090,39 +1116,39 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename break; case FFSAVE_TGA: caption += add_simple_pattern_filter_to_gtkchooser - (picker, "*.tga", "Targa Images (*.tga)"); + (picker, "*.tga", LLTrans::getString("targa_image_files") + " (*.tga)"); suggest_ext = ".tga"; break; case FFSAVE_BMP: caption += add_simple_mime_filter_to_gtkchooser - (picker, "image/bmp", "Bitmap Images (*.bmp)"); + (picker, "image/bmp", LLTrans::getString("bitmap_image_files") + " (*.bmp)"); suggest_ext = ".bmp"; break; case FFSAVE_AVI: caption += add_simple_mime_filter_to_gtkchooser (picker, "video/x-msvideo", - "AVI Movie File (*.avi)"); + LLTrans::getString("avi_movie_file") + " (*.avi)"); suggest_ext = ".avi"; break; case FFSAVE_ANIM: caption += add_simple_pattern_filter_to_gtkchooser - (picker, "*.xaf", "XAF Anim File (*.xaf)"); + (picker, "*.xaf", LLTrans::getString("xaf_animation_file") + " (*.xaf)"); suggest_ext = ".xaf"; break; case FFSAVE_XML: caption += add_simple_pattern_filter_to_gtkchooser - (picker, "*.xml", "XML File (*.xml)"); + (picker, "*.xml", LLTrans::getString("xml_file") + " (*.xml)"); suggest_ext = ".xml"; break; case FFSAVE_RAW: caption += add_simple_pattern_filter_to_gtkchooser - (picker, "*.raw", "RAW File (*.raw)"); + (picker, "*.raw", LLTrans::getString("raw_file") + " (*.raw)"); suggest_ext = ".raw"; break; case FFSAVE_J2C: caption += add_simple_mime_filter_to_gtkchooser (picker, "images/jp2", - "Compressed Images (*.j2c)"); + LLTrans::getString("compressed_image_files") + " (*.j2c)"); suggest_ext = ".j2c"; break; default:; @@ -1168,7 +1194,7 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter ) if (picker) { - std::string caption = "Load "; + std::string caption = LLTrans::getString("load_file_verb") + " "; std::string filtername = ""; switch (filter) { @@ -1215,7 +1241,7 @@ BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter ) gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER(picker), TRUE); - gtk_window_set_title(GTK_WINDOW(picker), "Load Files"); + gtk_window_set_title(GTK_WINDOW(picker), LLTrans::getString("load_files").c_str()); gtk_widget_show_all(GTK_WIDGET(picker)); gtk_main(); |