Browse Source

Adjust default directory for configuration file save and load

tags/v1.12.90
Johannes 2 years ago
parent
commit
6c8dc447ce
4 changed files with 69 additions and 13 deletions
  1. 25
    4
      common/os/os.cxx
  2. 14
    0
      common/os/os.h
  3. 28
    9
      vncviewer/ServerDialog.cxx
  4. 2
    0
      vncviewer/ServerDialog.h

+ 25
- 4
common/os/os.cxx View File

@@ -36,7 +36,7 @@
#include <shlobj.h>
#endif

int getvnchomedir(char **dirp)
static int gethomedir(char **dirp, bool userDir)
{
#ifndef WIN32
char *homedir, *dir;
@@ -68,19 +68,40 @@ int getvnchomedir(char **dirp)
return -1;

memcpy(dir, homedir, len);
memcpy(dir + len, "/.vnc/\0", 7);
if (userDir)
dir[len]='\0';
else
memcpy(dir + len, "/.vnc/\0", 7);
#else
dir = new TCHAR[MAX_PATH];
if (dir == NULL)
return -1;

ret = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, FALSE);
if (userDir)
ret = SHGetSpecialFolderPath(NULL, dir, CSIDL_PROFILE, FALSE);
else
ret = SHGetSpecialFolderPath(NULL, dir, CSIDL_APPDATA, FALSE);

if (ret == FALSE) {
delete [] dir;
return -1;
}
memcpy(dir+strlen(dir), (TCHAR *)"\\vnc\\\0", 6);
if (userDir)
dir[strlen(dir)+1] = '\0';
else
memcpy(dir+strlen(dir), (TCHAR *)"\\vnc\\\0", 6);
#endif
*dirp = dir;
return 0;
}

int getvnchomedir(char **dirp)
{
return gethomedir(dirp, false);
}

int getuserhomedir(char **dirp)
{
return gethomedir(dirp, true);
}


+ 14
- 0
common/os/os.h View File

@@ -39,4 +39,18 @@
*/
int getvnchomedir(char **dirp);

/*
* Get user home directory.
* If HOME environment variable is set then it is used.
* Otherwise home directory is obtained via getpwuid function.
*
* Note for Windows:
* This functions returns array of TCHARs, not array of chars.
*
* Returns:
* 0 - Success
* -1 - Failure
*/
int getuserhomedir(char **dirp);

#endif /* OS_OS_H */

+ 28
- 9
vncviewer/ServerDialog.cxx View File

@@ -23,6 +23,7 @@

#include <errno.h>
#include <algorithm>
#include <libgen.h>

#include <FL/Fl.H>
#include <FL/Fl_Input.H>
@@ -67,6 +68,7 @@ ServerDialog::ServerDialog()
y = margin;
serverName = new Fl_Input_Choice(x, y, w() - margin*2 - server_label_width, INPUT_HEIGHT, _("VNC server:"));
usedDir = NULL;

int adjust = (w() - 20) / 4;
int button_width = adjust - margin/2;
@@ -119,6 +121,8 @@ ServerDialog::ServerDialog()

ServerDialog::~ServerDialog()
{
if (usedDir)
free(usedDir);
}


@@ -164,8 +168,12 @@ void ServerDialog::handleOptions(Fl_Widget *widget, void *data)
void ServerDialog::handleLoad(Fl_Widget *widget, void *data)
{
ServerDialog *dialog = (ServerDialog*)data;
Fl_File_Chooser* file_chooser = new Fl_File_Chooser("", _("TigerVNC configuration (*.tigervnc)"),
0, _("Select a TigerVNC configuration file"));

if (!dialog->usedDir)
getuserhomedir(&(dialog->usedDir));

Fl_File_Chooser* file_chooser = new Fl_File_Chooser(dialog->usedDir, _("TigerVNC configuration (*.tigervnc)"),
0, _("Select a TigerVNC configuration file"));
file_chooser->preview(0);
file_chooser->previewButton->hide();
file_chooser->show();
@@ -181,6 +189,7 @@ void ServerDialog::handleLoad(Fl_Widget *widget, void *data)
}
const char* filename = file_chooser->value();
dialog->updateUsedDir(filename);

try {
dialog->serverName->value(loadViewerParameters(filename));
@@ -199,9 +208,11 @@ void ServerDialog::handleSaveAs(Fl_Widget *widget, void *data)
ServerDialog *dialog = (ServerDialog*)data;
const char* servername = dialog->serverName->value();
const char* filename;

Fl_File_Chooser* file_chooser = new Fl_File_Chooser("", _("TigerVNC configuration (*.tigervnc)"),
2, _("Save the TigerVNC configuration to file"));
if (!dialog->usedDir)
getuserhomedir(&dialog->usedDir);
Fl_File_Chooser* file_chooser = new Fl_File_Chooser(dialog->usedDir, _("TigerVNC configuration (*.tigervnc)"),
2, _("Save the TigerVNC configuration to file"));
file_chooser->preview(0);
file_chooser->previewButton->hide();
@@ -220,6 +231,7 @@ void ServerDialog::handleSaveAs(Fl_Widget *widget, void *data)
}
filename = file_chooser->value();
dialog->updateUsedDir(filename);
FILE* f = fopen(filename, "r");
if (f) {
@@ -227,12 +239,12 @@ void ServerDialog::handleSaveAs(Fl_Widget *widget, void *data)
// The file already exists.
fclose(f);
int overwrite_choice = fl_choice(_("%s already exists. Do you want to overwrite?"),
_("Overwrite"), _("No"), NULL, filename);
_("Overwrite"), _("No"), NULL, filename);
if (overwrite_choice == 1) {

// If the user doesn't want to overwrite:
file_chooser->show();
continue;
// If the user doesn't want to overwrite:
file_chooser->show();
continue;
}
}

@@ -388,3 +400,10 @@ void ServerDialog::saveServerHistory()

fclose(f);
}

void ServerDialog::updateUsedDir(const char* filename)
{
char * name = strdup(filename);
usedDir = strdup(dirname(name));
free(name);
}

+ 2
- 0
vncviewer/ServerDialog.h View File

@@ -45,10 +45,12 @@ protected:
private:
void loadServerHistory();
void saveServerHistory();
void updateUsedDir(const char* filename);

protected:
Fl_Input_Choice *serverName;
std::vector<std::string> serverHistory;
char *usedDir;
};

#endif

Loading…
Cancel
Save