- Do not close Notepad when 'Save As' dialog is canceled (behaviour correction, makes it as under Windows). Patch by Peter Hater.
- Temporarily fix saving with invalid file name --> now return an error, don't save the file, reset the internal file name to "" (untitled) and keep Notepad opened.
This is due to the lack of file name validation when calling Save-As file box (should be done by default, but it is not under ROS).
CORE-6836 #resolve #comment Committed in r58024. Thanks :)
svn path=/trunk/; revision=58024
-VOID ShowLastError(void)
+VOID ShowLastError(VOID)
{
DWORD error = GetLastError();
if (error != NO_ERROR)
{
DWORD error = GetLastError();
if (error != NO_ERROR)
*/
static void UpdateWindowCaption(void)
{
*/
static void UpdateWindowCaption(void)
{
- TCHAR szCaption[MAX_STRING_LEN] = _T("");
+ TCHAR szCaption[MAX_STRING_LEN];
TCHAR szNotepad[MAX_STRING_LEN];
LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, SIZEOF(szNotepad));
TCHAR szNotepad[MAX_STRING_LEN];
LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, SIZEOF(szNotepad));
- if (Globals.szFileTitle[0] != '\0')
+ if (Globals.szFileTitle[0] != 0)
- StringCchCat(szCaption, MAX_STRING_LEN, Globals.szFileTitle);
+ StringCchCopy(szCaption, SIZEOF(szCaption), Globals.szFileTitle);
}
else
{
LoadString(Globals.hInstance, STRING_UNTITLED, szCaption, SIZEOF(szCaption));
}
}
else
{
LoadString(Globals.hInstance, STRING_UNTITLED, szCaption, SIZEOF(szCaption));
}
- StringCchCat(szCaption, MAX_STRING_LEN, _T(" - "));
- StringCchCat(szCaption, MAX_STRING_LEN, szNotepad);
+ StringCchCat(szCaption, SIZEOF(szCaption), _T(" - "));
+ StringCchCat(szCaption, SIZEOF(szCaption), szNotepad);
SetWindowText(Globals.hMainWnd, szCaption);
}
SetWindowText(Globals.hMainWnd, szCaption);
}
return (hFile != INVALID_HANDLE_VALUE);
}
return (hFile != INVALID_HANDLE_VALUE);
}
BOOL HasFileExtension(LPCTSTR szFilename)
{
LPCTSTR s;
BOOL HasFileExtension(LPCTSTR szFilename)
{
LPCTSTR s;
return _tcsrchr(szFilename, _T('.')) != NULL;
}
return _tcsrchr(szFilename, _T('.')) != NULL;
}
-
-static VOID DoSaveFile(VOID)
+static BOOL DoSaveFile(VOID)
HANDLE hFile;
LPTSTR pTemp;
DWORD size;
HANDLE hFile;
LPTSTR pTemp;
DWORD size;
if(hFile == INVALID_HANDLE_VALUE)
{
ShowLastError();
if(hFile == INVALID_HANDLE_VALUE)
{
ShowLastError();
}
size = GetWindowTextLength(Globals.hEdit) + 1;
}
size = GetWindowTextLength(Globals.hEdit) + 1;
{
CloseHandle(hFile);
ShowLastError();
{
CloseHandle(hFile);
ShowLastError();
}
size = GetWindowText(Globals.hEdit, pTemp, size);
#ifndef UNICODE
pTemp = (LPTSTR)ConvertToUNICODE(pTemp, &size);
}
size = GetWindowText(Globals.hEdit, pTemp, size);
#ifndef UNICODE
pTemp = (LPTSTR)ConvertToUNICODE(pTemp, &size);
/* original "pTemp" already freed */
CloseHandle(hFile);
ShowLastError();
/* original "pTemp" already freed */
CloseHandle(hFile);
ShowLastError();
}
#endif
if (size)
{
if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.iEncoding, Globals.iEoln))
}
#endif
if (size)
{
if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.iEncoding, Globals.iEoln))
SendMessage(Globals.hEdit, EM_SETMODIFY, FALSE, 0);
SendMessage(Globals.hEdit, EM_SETMODIFY, FALSE, 0);
}
CloseHandle(hFile);
HeapFree(GetProcessHeap(), 0, pTemp);
}
CloseHandle(hFile);
HeapFree(GetProcessHeap(), 0, pTemp);
* TRUE - User agreed to close (both save/don't save)
* FALSE - User cancelled close by selecting "Cancel"
*/
* TRUE - User agreed to close (both save/don't save)
* FALSE - User cancelled close by selecting "Cancel"
*/
{
/* prompt user to save changes */
nResult = AlertFileNotSaved(Globals.szFileName);
{
/* prompt user to save changes */
nResult = AlertFileNotSaved(Globals.szFileName);
- switch (nResult) {
- case IDYES: DIALOG_FileSave();
- break;
+ switch (nResult)
+ {
+ case IDYES:
+ if(!DIALOG_FileSave())
+ return FALSE;
+ break;
- case IDCANCEL: return(FALSE);
- break;
+ case IDCANCEL:
+ return FALSE;
- default: return(FALSE);
- break;
- } /* switch */
- } /* if */
+ default:
+ return FALSE;
+ }
+ }
-void DoOpenFile(LPCTSTR szFileName)
+VOID DoOpenFile(LPCTSTR szFileName)
{
static const TCHAR dotlog[] = _T(".LOG");
HANDLE hFile;
{
static const TCHAR dotlog[] = _T(".LOG");
HANDLE hFile;
-VOID DIALOG_FileSave(VOID)
+BOOL DIALOG_FileSave(VOID)
- if (Globals.szFileName[0] == '\0')
- DIALOG_FileSaveAs();
+ if (Globals.szFileName[0] == 0)
+ return DIALOG_FileSaveAs();
}
static UINT_PTR CALLBACK DIALOG_FileSaveAs_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
}
static UINT_PTR CALLBACK DIALOG_FileSaveAs_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-VOID DIALOG_FileSaveAs(VOID)
+BOOL DIALOG_FileSaveAs(VOID)
{
OPENFILENAME saveas;
TCHAR szDir[MAX_PATH];
{
OPENFILENAME saveas;
TCHAR szDir[MAX_PATH];
saveas.lpTemplateName = MAKEINTRESOURCE(DIALOG_ENCODING);
saveas.lpfnHook = DIALOG_FileSaveAs_Hook;
saveas.lpTemplateName = MAKEINTRESOURCE(DIALOG_ENCODING);
saveas.lpfnHook = DIALOG_FileSaveAs_Hook;
- if (GetSaveFileName(&saveas)) {
+ if (GetSaveFileName(&saveas))
+ {
+ // HACK: Because in ROS, Save-As boxes don't check the validity
+ // of file names and thus, here, szPath can be invalid !! We only
+ // see its validity when we call DoSaveFile()...
- UpdateWindowCaption();
- DoSaveFile();
+ if (DoSaveFile())
+ {
+ UpdateWindowCaption();
+ return TRUE;
+ }
+ else
+ {
+ SetFileName(_T(""));
+ return FALSE;
+ }
+ }
+ else
+ {
+ return FALSE;
VOID DIALOG_FileNew(VOID);
VOID DIALOG_FileOpen(VOID);
VOID DIALOG_FileNew(VOID);
VOID DIALOG_FileOpen(VOID);
-VOID DIALOG_FileSave(VOID);
-VOID DIALOG_FileSaveAs(VOID);
+BOOL DIALOG_FileSave(VOID);
+BOOL DIALOG_FileSaveAs(VOID);
VOID DIALOG_FilePrint(VOID);
VOID DIALOG_FilePageSetup(VOID);
VOID DIALOG_FilePrinterSetup(VOID);
VOID DIALOG_FilePrint(VOID);
VOID DIALOG_FilePageSetup(VOID);
VOID DIALOG_FilePrinterSetup(VOID);
INT_PTR CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
/* utility functions */
INT_PTR CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
/* utility functions */
-VOID ShowLastError(void);
+VOID ShowLastError(VOID);
BOOL FileExists(LPCTSTR szFilename);
BOOL HasFileExtension(LPCTSTR szFilename);
BOOL FileExists(LPCTSTR szFilename);
BOOL HasFileExtension(LPCTSTR szFilename);
-BOOL DoCloseFile(void);
-void DoOpenFile(LPCTSTR szFileName);
+BOOL DoCloseFile(VOID);
+VOID DoOpenFile(LPCTSTR szFileName);
VOID DoCreateStatusBar(VOID);
VOID DoCreateEditWindow(VOID);
VOID DoCreateStatusBar(VOID);
VOID DoCreateEditWindow(VOID);