diff --git a/rtdata/languages/default b/rtdata/languages/default index 88ae486a1..7f8cbf567 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -56,7 +56,7 @@ FILEBROWSER_ARRANGEMENTHINT;Change between vertical/horizontal alignment of thum FILEBROWSER_AUTODARKFRAME;Auto dark frame FILEBROWSER_AUTOFLATFIELD;Auto flat field FILEBROWSER_BROWSEPATHBUTTONHINT;Click to browse to the chosen path -FILEBROWSER_BROWSEPATHHINT;Type path to browse (Ctrl-o set focus,Ctrl-Enter to browse in File Browser) +FILEBROWSER_BROWSEPATHHINT;Type path to browse (Ctrl-o set focus,Ctrl-Enter to browse in File Browser);\nPath shortcuts: ~ - user's home directory, ! - user's pictures directory FILEBROWSER_CACHE;Cache FILEBROWSER_CACHECLEARFROMFULL;Clear from cache - full FILEBROWSER_CACHECLEARFROMPARTIAL;Clear from cache - partial diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index e27cc217a..d60e6c573 100644 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -1079,10 +1079,31 @@ void FileCatalog::trashChanged () { } void FileCatalog::buttonBrowsePathPressed () { - Glib::ustring sel = BrowsePath->get_text(); + Glib::ustring BrowsePathValue = BrowsePath->get_text(); + Glib::ustring DecodedPathPrefix=""; + Glib::ustring FirstChar; + + // handle shortcuts in the BrowsePath -- START + // read the 1-st character from the path + FirstChar = BrowsePathValue.substr (0,1); + + if (FirstChar=="~"){ // home directory + DecodedPathPrefix = Glib::get_home_dir(); + } + else if (FirstChar=="!"){ // user's pictures directory + //DecodedPathPrefix = g_get_user_special_dir(G_USER_DIRECTORY_PICTURES); + DecodedPathPrefix = Glib::get_user_special_dir (G_USER_DIRECTORY_PICTURES); + } + + if (DecodedPathPrefix!=""){ + BrowsePathValue = Glib::ustring::compose ("%1%2",DecodedPathPrefix,BrowsePathValue.substr (1,BrowsePath->get_text_length()-1)); + BrowsePath->set_text(BrowsePathValue); + } + // handle shortcuts in the BrowsePath -- END + // validate the path - if (safe_file_test(sel, Glib::FILE_TEST_IS_DIR) && dirlistener){ - dirlistener->selectDir (sel); + if (safe_file_test(BrowsePathValue, Glib::FILE_TEST_IS_DIR) && dirlistener){ + dirlistener->selectDir (BrowsePathValue); } else // error, likely path not found: show red arrow