Skip to content

Commit 3f6a3b9

Browse files
committed
[BUG_FiXED] Fix the crash issue while execute "Add Files from Directory" command (Project Manager).
- Notepad-plus svn trunk @ 835
1 parent 8cd5d1b commit 3f6a3b9

File tree

4 files changed

+38
-22
lines changed

4 files changed

+38
-22
lines changed

PowerEditor/src/MISC/Common/Common.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void writeLog(const TCHAR *logFileName, const char *log2write)
4545
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/callbackfunctions/browsecallbackproc.asp
4646
static int __stdcall BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM, LPARAM pData)
4747
{
48-
if (uMsg == BFFM_INITIALIZED)
48+
if (uMsg == BFFM_INITIALIZED && pData != 0)
4949
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, pData);
5050
return 0;
5151
};
@@ -100,7 +100,7 @@ void folderBrowser(HWND parent, int outputCtrlID, const TCHAR *defaultStr)
100100
}
101101

102102

103-
generic_string getFolderName(HWND parent)
103+
generic_string getFolderName(HWND parent, const TCHAR *defaultDir)
104104
{
105105
generic_string folderName(TEXT(""));
106106
LPMALLOC pShellMalloc = 0;
@@ -115,6 +115,7 @@ generic_string getFolderName(HWND parent)
115115
info.lpszTitle = TEXT("Select a folder");
116116
info.ulFlags = 0;
117117
info.lpfn = BrowseCallbackProc;
118+
info.lParam = reinterpret_cast<LPARAM>(defaultDir);
118119

119120
// Execute the browsing dialog.
120121
LPITEMIDLIST pidl = ::SHBrowseForFolder(&info);

PowerEditor/src/MISC/Common/Common.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ const bool dirDown = false;
7474
typedef std::basic_string<TCHAR> generic_string;
7575

7676
void folderBrowser(HWND parent, int outputCtrlID, const TCHAR *defaultStr = NULL);
77-
generic_string getFolderName(HWND parent);
77+
generic_string getFolderName(HWND parent, const TCHAR *defaultDir = NULL);
7878

7979
void printInt(int int2print);
8080
void printStr(const TCHAR *str2print);

PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,12 +1092,25 @@ void ProjectPanel::recursiveAddFilesFrom(const TCHAR *folderPath, HTREEITEM hTre
10921092

10931093
void ProjectPanel::addFilesFromDirectory(HTREEITEM hTreeItem)
10941094
{
1095-
generic_string folderName = getFolderName(_hSelf);
1096-
if (folderName != TEXT(""))
1095+
if (_selDirOfFilesFromDirDlg == TEXT("") && _workSpaceFilePath != TEXT(""))
10971096
{
1098-
recursiveAddFilesFrom(folderName.c_str(), hTreeItem);
1097+
TCHAR dir[MAX_PATH];
1098+
lstrcpy(dir, _workSpaceFilePath.c_str());
1099+
::PathRemoveFileSpec(dir);
1100+
_selDirOfFilesFromDirDlg = dir;
1101+
}
1102+
generic_string dirPath;
1103+
if (_selDirOfFilesFromDirDlg != TEXT(""))
1104+
dirPath = getFolderName(_hSelf, _selDirOfFilesFromDirDlg.c_str());
1105+
else
1106+
dirPath = getFolderName(_hSelf);
1107+
1108+
if (dirPath != TEXT(""))
1109+
{
1110+
recursiveAddFilesFrom(dirPath.c_str(), hTreeItem);
10991111
_treeView.expand(hTreeItem);
11001112
setWorkSpaceDirty(true);
1113+
_selDirOfFilesFromDirDlg = dirPath;
11011114
}
11021115
}
11031116

PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.h

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,23 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
3333
#define PM_NEWFOLDERNAME TEXT("Folder Name")
3434
#define PM_NEWPROJECTNAME TEXT("Project Name")
3535

36-
#define PM_NEWWORKSPACE TEXT("New Workspace")
37-
#define PM_OPENWORKSPACE TEXT("Open Workspace")
38-
#define PM_RELOADWORKSPACE TEXT("Reload Workspace")
39-
#define PM_SAVEWORKSPACE TEXT("Save")
40-
#define PM_SAVEASWORKSPACE TEXT("Save As...")
41-
#define PM_SAVEACOPYASWORKSPACE TEXT("Save a Copy As...")
42-
#define PM_NEWPROJECTWORKSPACE TEXT("Add New Project")
43-
44-
#define PM_EDITRENAME TEXT("Rename")
45-
#define PM_EDITNEWFOLDER TEXT("Add Folder")
46-
#define PM_EDITADDFILES TEXT("Add Files...")
36+
#define PM_NEWWORKSPACE TEXT("New Workspace")
37+
#define PM_OPENWORKSPACE TEXT("Open Workspace")
38+
#define PM_RELOADWORKSPACE TEXT("Reload Workspace")
39+
#define PM_SAVEWORKSPACE TEXT("Save")
40+
#define PM_SAVEASWORKSPACE TEXT("Save As...")
41+
#define PM_SAVEACOPYASWORKSPACE TEXT("Save a Copy As...")
42+
#define PM_NEWPROJECTWORKSPACE TEXT("Add New Project")
43+
44+
#define PM_EDITRENAME TEXT("Rename")
45+
#define PM_EDITNEWFOLDER TEXT("Add Folder")
46+
#define PM_EDITADDFILES TEXT("Add Files...")
4747
#define PM_EDITADDFILESRECUSIVELY TEXT("Add Files from Directory...")
48-
#define PM_EDITREMOVE TEXT("Remove")
49-
#define PM_EDITMODIFYFILE TEXT("Modify File Path")
48+
#define PM_EDITREMOVE TEXT("Remove")
49+
#define PM_EDITMODIFYFILE TEXT("Modify File Path")
5050

51-
#define PM_WORKSPACEMENUENTRY TEXT("Workspace")
52-
#define PM_EDITMENUENTRY TEXT("Edit")
51+
#define PM_WORKSPACEMENUENTRY TEXT("Workspace")
52+
#define PM_EDITMENUENTRY TEXT("Edit")
5353

5454
enum NodeType {
5555
nodeType_root = 0, nodeType_project = 1, nodeType_folder = 2, nodeType_file = 3
@@ -60,7 +60,8 @@ class TiXmlNode;
6060
class ProjectPanel : public DockingDlgInterface {
6161
public:
6262
ProjectPanel(): DockingDlgInterface(IDD_PROJECTPANEL),\
63-
_hToolbarMenu(NULL), _hWorkSpaceMenu(NULL), _hProjectMenu(NULL), _hFolderMenu(NULL), _hFileMenu(NULL){};
63+
_hToolbarMenu(NULL), _hWorkSpaceMenu(NULL), _hProjectMenu(NULL),\
64+
_hFolderMenu(NULL), _hFileMenu(NULL){};
6465

6566

6667
void init(HINSTANCE hInst, HWND hPere) {
@@ -96,6 +97,7 @@ class ProjectPanel : public DockingDlgInterface {
9697
HWND _hToolbarMenu;
9798
HMENU _hWorkSpaceMenu, _hProjectMenu, _hFolderMenu, _hFileMenu;
9899
generic_string _workSpaceFilePath;
100+
generic_string _selDirOfFilesFromDirDlg;
99101
bool _isDirty;
100102

101103
void initMenus();

0 commit comments

Comments
 (0)