Change the way we change to bookmarked directories

fixes http://pulkomandy.tk/projects/GrafX2/ticket/12
This commit is contained in:
Thomas Bernard 2018-09-15 13:59:52 +02:00
parent c65f9f8903
commit 44f24b3508
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C

View File

@ -1566,11 +1566,11 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
byte has_clicked_ok=0;// Indique si on a clické sur Load ou Save ou sur byte has_clicked_ok=0;// Indique si on a clické sur Load ou Save ou sur
//un bouton enclenchant Load ou Save juste après. //un bouton enclenchant Load ou Save juste après.
byte initial_back_color; // preview destroys it (how nice) byte initial_back_color; // preview destroys it (how nice)
char previous_directory[MAX_PATH_CHARACTERS]; // Répertoire d'où l'on vient après un CHDIR
char save_filename[MAX_PATH_CHARACTERS]; char save_filename[MAX_PATH_CHARACTERS];
word save_filename_unicode[MAX_PATH_CHARACTERS]; word save_filename_unicode[MAX_PATH_CHARACTERS];
char initial_comment[COMMENT_SIZE+1]; char initial_comment[COMMENT_SIZE+1];
short window_shortcut; short window_shortcut;
const char * directory_to_change_to = NULL;
Selector=settings; Selector=settings;
@ -1879,6 +1879,7 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
pos_last_dot!=-1 && pos_last_dot!=-1 &&
Selector_filename[pos_last_dot+1]!='\0') Selector_filename[pos_last_dot+1]!='\0')
{ {
GFX2_Log(GFX2_DEBUG, "extension %s => %s\n", Selector_filename + pos_last_dot + 1, Get_fileformat(Selector->Format_filter)->Default_extension);
strcpy(Selector_filename + pos_last_dot + 1, strcpy(Selector_filename + pos_last_dot + 1,
Get_fileformat(Selector->Format_filter)->Default_extension); Get_fileformat(Selector->Format_filter)->Default_extension);
Unicode_char_strlcpy(Selector_filename_unicode + pos_last_dot + 1, Unicode_char_strlcpy(Selector_filename_unicode + pos_last_dot + 1,
@ -2078,13 +2079,11 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
case -1: // bouton lui-même: aller au répertoire mémorisé case -1: // bouton lui-même: aller au répertoire mémorisé
if (Config.Bookmark_directory[clicked_button-10]) if (Config.Bookmark_directory[clicked_button-10])
{ {
GFX2_Log(GFX2_DEBUG,"Go to bookmark %s\n", Config.Bookmark_directory[clicked_button-10]);
// backup the currently selected filename // backup the currently selected filename
strncpy(save_filename, Selector_filename, sizeof(save_filename)); strncpy(save_filename, Selector_filename, sizeof(save_filename));
// simulate a click on the bookmarked directory // simulate a click on the bookmarked directory
strncpy(Selector_filename,Config.Bookmark_directory[clicked_button-10], sizeof(Selector_filename)); directory_to_change_to = Config.Bookmark_directory[clicked_button-10];
Selector_filename[sizeof(Selector_filename)-1] = '\0';
Selected_type=1;
has_clicked_ok=1;
Reset_quicksearch(); Reset_quicksearch();
} }
break; break;
@ -2246,25 +2245,30 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
Reset_quicksearch(); Reset_quicksearch();
} }
if (has_clicked_ok) if (has_clicked_ok || (directory_to_change_to != NULL))
{ {
// Si c'est un répertoire, on annule "has_clicked_ok" et on passe // Si c'est un répertoire, on annule "has_clicked_ok" et on passe
// dedans. // dedans.
if (Selected_type!=0) if (Selected_type!=0 || (directory_to_change_to != NULL))
{ {
Hide_cursor(); Hide_cursor();
has_clicked_ok=0; has_clicked_ok=0;
if (directory_to_change_to == NULL)
directory_to_change_to = Selector_filename;
// We must enter the directory // We must enter the directory
if (Change_directory(Selector_filename) == 0) if (Change_directory(directory_to_change_to) == 0)
{ {
short pos;
char previous_directory[MAX_PATH_CHARACTERS]; // Répertoire d'où l'on vient après un CHDIR
#if defined (__MINT__) #if defined (__MINT__)
static char path[1024]={0}; static char path[1024]={0};
char currentDrive='A'; char currentDrive='A';
#endif #endif
// save the previous current directory // save the previous current directory
if (strcmp(Selector_filename,PARENT_DIR) != 0) if (strcmp(directory_to_change_to,PARENT_DIR) != 0)
{ {
strcpy(previous_directory,PARENT_DIR); strcpy(previous_directory,PARENT_DIR);
} }
@ -2292,12 +2296,13 @@ byte Button_Load_or_Save(T_Selector_settings *settings, byte load, T_IO_Context
{ {
char warn_msg[MAX_PATH_CHARACTERS]; char warn_msg[MAX_PATH_CHARACTERS];
Display_cursor(); Display_cursor();
snprintf(warn_msg, sizeof(warn_msg), "cannot chdir to \"%s\" !", Selector_filename); snprintf(warn_msg, sizeof(warn_msg), "cannot chdir to \"%s\" !", directory_to_change_to);
Warning(warn_msg); Warning(warn_msg);
// restore Selector_filename // restore Selector_filename
strncpy(Selector_filename, save_filename, sizeof(Selector_filename)); strncpy(Selector_filename, save_filename, sizeof(Selector_filename));
Error(0); Error(0);
} }
directory_to_change_to = NULL;
} }
else // Sinon on essaye de charger ou sauver le fichier else // Sinon on essaye de charger ou sauver le fichier
{ {