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