Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
f99da3f3
Commit
f99da3f3
authored
Jul 06, 2016
by
Lauri Kenttä
Committed by
Alexandre Julliard
Jul 08, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
comdlg32: Avoid generating filenames twice in filedlg.
Signed-off-by:
Lauri Kenttä
<
lauri.kentta@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
86a993ea
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
46 additions
and
64 deletions
+46
-64
filedlg.c
dlls/comdlg32/filedlg.c
+46
-64
No files found.
dlls/comdlg32/filedlg.c
View file @
f99da3f3
...
...
@@ -3647,9 +3647,8 @@ void FILEDLG95_FILENAME_FillFromSelection (HWND hwnd)
{
FileOpenDlgInfos
*
fodInfos
;
LPITEMIDLIST
pidl
;
UINT
nFiles
=
0
,
nFileToOpen
,
nFileSelected
,
nLength
=
0
;
WCHAR
lpstrTemp
[
MAX_PATH
];
LPWSTR
lpstrAllFile
,
lpstrCurrFile
;
LPWSTR
lpstrAllFiles
,
lpstrTmp
;
UINT
nFiles
=
0
,
nFileToOpen
,
nFileSelected
,
nAllFilesLength
=
0
,
nThisFileLength
,
nAllFilesMaxLength
;
TRACE
(
"
\n
"
);
fodInfos
=
GetPropA
(
hwnd
,
FileOpenDlgInfosStr
);
...
...
@@ -3657,74 +3656,57 @@ void FILEDLG95_FILENAME_FillFromSelection (HWND hwnd)
/* Count how many files we have */
nFileSelected
=
GetNumSelected
(
fodInfos
->
Shell
.
FOIDataObject
);
/* calculate the string length, count files */
if
(
nFileSelected
>=
1
)
/* Allocate a buffer */
nAllFilesMaxLength
=
MAX_PATH
+
3
;
lpstrAllFiles
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
nAllFilesMaxLength
*
sizeof
(
WCHAR
));
if
(
!
lpstrAllFiles
)
goto
ret
;
/* Loop through the selection, handle only files (not folders) */
for
(
nFileToOpen
=
0
;
nFileToOpen
<
nFileSelected
;
nFileToOpen
++
)
{
nLength
+=
3
;
/* first and last quotes, trailing \0 */
for
(
nFileToOpen
=
0
;
nFileToOpen
<
nFileSelected
;
nFileToOpen
++
)
{
pidl
=
GetPidlFromDataObject
(
fodInfos
->
Shell
.
FOIDataObject
,
nFileToOpen
+
1
);
if
(
pidl
)
{
/* get the total length of the selected file names */
lpstrTemp
[
0
]
=
'\0'
;
GetName
(
fodInfos
->
Shell
.
FOIShellFolder
,
pidl
,
SHGDN_INFOLDER
|
SHGDN_FORPARSING
,
lpstrTemp
);
if
(
!
IsPidlFolder
(
fodInfos
->
Shell
.
FOIShellFolder
,
pidl
)
)
/* Ignore folders */
{
nLength
+=
lstrlenW
(
lpstrTemp
)
+
3
;
nFiles
++
;
}
COMDLG32_SHFree
(
pidl
);
}
}
{
if
(
!
IsPidlFolder
(
fodInfos
->
Shell
.
FOIShellFolder
,
pidl
))
{
if
(
nAllFilesLength
+
MAX_PATH
+
3
>
nAllFilesMaxLength
)
{
nAllFilesMaxLength
*=
2
;
lpstrTmp
=
HeapReAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
lpstrAllFiles
,
nAllFilesMaxLength
*
sizeof
(
WCHAR
));
if
(
!
lpstrTmp
)
goto
ret
;
lpstrAllFiles
=
lpstrTmp
;
}
nFiles
+=
1
;
lpstrAllFiles
[
nAllFilesLength
++
]
=
'"'
;
GetName
(
fodInfos
->
Shell
.
FOIShellFolder
,
pidl
,
SHGDN_INFOLDER
|
SHGDN_FORPARSING
,
lpstrAllFiles
+
nAllFilesLength
);
nThisFileLength
=
lstrlenW
(
lpstrAllFiles
+
nAllFilesLength
);
nAllFilesLength
+=
nThisFileLength
;
lpstrAllFiles
[
nAllFilesLength
++
]
=
'"'
;
lpstrAllFiles
[
nAllFilesLength
++
]
=
' '
;
}
COMDLG32_SHFree
(
pidl
);
}
}
/* allocate the buffer */
if
(
nFiles
<=
1
)
nLength
=
MAX_PATH
;
lpstrAllFile
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
nLength
*
sizeof
(
WCHAR
));
/* Generate the string for the edit control */
if
(
nFiles
>=
1
)
if
(
nFiles
!=
0
)
{
lpstrCurrFile
=
lpstrAllFile
;
for
(
nFileToOpen
=
0
;
nFileToOpen
<
nFileSelected
;
nFileToOpen
++
)
{
pidl
=
GetPidlFromDataObject
(
fodInfos
->
Shell
.
FOIDataObject
,
nFileToOpen
+
1
);
if
(
pidl
)
{
/* get the file name */
lpstrTemp
[
0
]
=
'\0'
;
GetName
(
fodInfos
->
Shell
.
FOIShellFolder
,
pidl
,
SHGDN_INFOLDER
|
SHGDN_FORPARSING
,
lpstrTemp
);
if
(
!
IsPidlFolder
(
fodInfos
->
Shell
.
FOIShellFolder
,
pidl
))
/* Ignore folders */
{
if
(
nFiles
>
1
)
{
*
lpstrCurrFile
++
=
'\"'
;
lstrcpyW
(
lpstrCurrFile
,
lpstrTemp
);
lpstrCurrFile
+=
lstrlenW
(
lpstrTemp
);
*
lpstrCurrFile
++
=
'\"'
;
*
lpstrCurrFile
++
=
' '
;
*
lpstrCurrFile
=
0
;
}
else
{
lstrcpyW
(
lpstrAllFile
,
lpstrTemp
);
}
}
COMDLG32_SHFree
(
pidl
);
}
}
SetWindowTextW
(
fodInfos
->
DlgInfos
.
hwndFileName
,
lpstrAllFile
);
/* Select the file name like Windows does */
if
(
filename_is_edit
(
fodInfos
))
SendMessageW
(
fodInfos
->
DlgInfos
.
hwndFileName
,
EM_SETSEL
,
0
,
-
1
);
/* If there's only one file, use the name as-is without quotes */
lpstrTmp
=
lpstrAllFiles
;
if
(
nFiles
==
1
)
{
lpstrTmp
+=
1
;
lpstrTmp
[
nThisFileLength
]
=
0
;
}
SetWindowTextW
(
fodInfos
->
DlgInfos
.
hwndFileName
,
lpstrTmp
);
/* Select the file name like Windows does */
if
(
filename_is_edit
(
fodInfos
))
SendMessageW
(
fodInfos
->
DlgInfos
.
hwndFileName
,
EM_SETSEL
,
0
,
-
1
);
}
HeapFree
(
GetProcessHeap
(),
0
,
lpstrAllFile
);
ret:
HeapFree
(
GetProcessHeap
(),
0
,
lpstrAllFiles
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment