Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
wine
Manage
Activity
Members
Labels
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jason Beetham
wine
Commits
d650903c
Commit
d650903c
authored
24 years ago
by
Juergen Schmied
Committed by
Alexandre Julliard
24 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Separated 32 bit functions to shellole.c.
parent
12aae27a
Loading
Loading
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
dlls/shell32/shell.c
+34
-154
34 additions, 154 deletions
dlls/shell32/shell.c
dlls/shell32/shellole.c
+142
-22
142 additions, 22 deletions
dlls/shell32/shellole.c
with
176 additions
and
176 deletions
dlls/shell32/shell.c
+
34
−
154
View file @
d650903c
...
...
@@ -3,7 +3,6 @@
*
* 1998 Marcus Meissner
*/
#include
<assert.h>
#include
<stdlib.h>
#include
<string.h>
#include
<unistd.h>
...
...
@@ -26,8 +25,8 @@
#include
"debugtools.h"
#include
"winreg.h"
#include
"syslevel.h"
#include
"shlwapi.h"
#include
"imagelist.h"
#include
"tchar.h"
DEFAULT_DEBUG_CHANNEL
(
shell
)
DECLARE_DEBUG_CHANNEL
(
exec
)
...
...
@@ -123,22 +122,6 @@ BOOL WINAPI SHELL_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst,
return
TRUE
;
}
/*************************************************************************
* DragAcceptFiles [SHELL32.54]
*/
void
WINAPI
DragAcceptFiles
(
HWND
hWnd
,
BOOL
b
)
{
LONG
exstyle
;
if
(
!
IsWindow
(
hWnd
)
)
return
;
exstyle
=
GetWindowLongA
(
hWnd
,
GWL_EXSTYLE
);
if
(
b
)
exstyle
|=
WS_EX_ACCEPTFILES
;
else
exstyle
&=
~
WS_EX_ACCEPTFILES
;
SetWindowLongA
(
hWnd
,
GWL_EXSTYLE
,
exstyle
);
}
/*************************************************************************
* DragAcceptFiles16 [SHELL.9]
*/
...
...
@@ -148,129 +131,43 @@ void WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b)
}
/*************************************************************************
* SHELL_DragQueryFile [internal]
*
* DragQueryFile16 [SHELL.11]
*/
static
UINT
SHELL_DragQueryFile
(
LPSTR
lpDrop
,
LPWSTR
lpwDrop
,
UINT
lFile
,
LPSTR
lpszFile
,
LPWSTR
lpszwFile
,
UINT
lLength
)
UINT16
WINAPI
DragQueryFile16
(
HDROP16
hDrop
,
WORD
wFile
,
LPSTR
lpszFile
,
WORD
wLength
)
{
UINT
i
;
i
=
0
;
if
(
lpDrop
)
{
while
(
i
++
<
lFile
)
{
while
(
*
lpDrop
++
);
/* skip filename */
if
(
!*
lpDrop
)
return
(
lFile
==
0xFFFFFFFF
)
?
i
:
0
;
}
}
if
(
lpwDrop
)
{
while
(
i
++
<
lFile
)
{
while
(
*
lpwDrop
++
);
/* skip filename */
if
(
!*
lpwDrop
)
return
(
lFile
==
0xFFFFFFFF
)
?
i
:
0
;
}
}
LPSTR
lpDrop
;
UINT
i
=
0
;
LPDROPFILESTRUCT16
lpDropFileStruct
=
(
LPDROPFILESTRUCT16
)
GlobalLock16
(
hDrop
);
TRACE
(
"(%04x, %x, %p, %u)
\n
"
,
hDrop
,
wFile
,
lpszFile
,
wLength
);
if
(
lpDrop
)
i
=
lstrlenA
(
lpDrop
);
if
(
lpwDrop
)
i
=
lstrlenW
(
lpwDrop
);
i
++
;
if
(
!
lpszFile
&&
!
lpszwFile
)
{
return
i
;
/* needed buffer size */
}
i
=
(
lLength
>
i
)
?
i
:
lLength
;
if
(
lpszFile
)
{
if
(
lpDrop
)
lstrcpynA
(
lpszFile
,
lpDrop
,
i
);
else
lstrcpynWtoA
(
lpszFile
,
lpwDrop
,
i
);
}
else
{
if
(
lpDrop
)
lstrcpynAtoW
(
lpszwFile
,
lpDrop
,
i
);
else
lstrcpynW
(
lpszwFile
,
lpwDrop
,
i
);
}
return
i
;
}
/*************************************************************************
* DragQueryFileA [SHELL32.81] [shell32.82]
*/
UINT
WINAPI
DragQueryFileA
(
HDROP
hDrop
,
UINT
lFile
,
LPSTR
lpszFile
,
UINT
lLength
)
{
/* hDrop is a global memory block allocated with GMEM_SHARE
* with DROPFILESTRUCT as a header and filenames following
* it, zero length filename is in the end */
if
(
!
lpDropFileStruct
)
goto
end
;
LPDROPFILESTRUCT
lpDropFileStruct
;
LPSTR
lpCurrent
;
UINT
i
;
TRACE
(
"(%08x, %x, %p, %u)
\n
"
,
hDrop
,
lFile
,
lpszFile
,
lLength
);
lpDropFileStruct
=
(
LPDROPFILESTRUCT
)
GlobalLock
(
hDrop
);
if
(
!
lpDropFileStruct
)
return
0
;
lpCurrent
=
(
LPSTR
)
lpDropFileStruct
+
lpDropFileStruct
->
lSize
;
i
=
SHELL_DragQueryFile
(
lpCurrent
,
NULL
,
lFile
,
lpszFile
,
NULL
,
lLength
);
GlobalUnlock
(
hDrop
);
return
i
;
}
lpDrop
=
(
LPSTR
)
lpDropFileStruct
+
lpDropFileStruct
->
wSize
;
wFile
=
(
wFile
==
0xffff
)
?
0xffffffff
:
wFile
;
/*************************************************************************
* DragQueryFileW [shell32.133]
*/
UINT
WINAPI
DragQueryFileW
(
HDROP
hDrop
,
UINT
lFile
,
LPWSTR
lpszwFile
,
UINT
lLength
)
{
LPDROPFILESTRUCT
lpDropFileStruct
;
LPWSTR
lpwCurrent
;
UINT
i
;
TRACE
(
"(%08x, %x, %p, %u)
\n
"
,
hDrop
,
lFile
,
lpszwFile
,
lLength
);
lpDropFileStruct
=
(
LPDROPFILESTRUCT
)
GlobalLock
(
hDrop
);
if
(
!
lpDropFileStruct
)
return
0
;
lpwCurrent
=
(
LPWSTR
)
lpDropFileStruct
+
lpDropFileStruct
->
lSize
;
i
=
SHELL_DragQueryFile
(
NULL
,
lpwCurrent
,
lFile
,
NULL
,
lpszwFile
,
lLength
);
GlobalUnlock
(
hDrop
);
return
i
;
}
/*************************************************************************
* DragQueryFile16 [SHELL.11]
*/
UINT16
WINAPI
DragQueryFile16
(
HDROP16
hDrop
,
WORD
wFile
,
LPSTR
lpszFile
,
WORD
wLength
)
{
/* hDrop is a global memory block allocated with GMEM_SHARE
* with DROPFILESTRUCT as a header and filenames following
* it, zero length filename is in the end */
LPDROPFILESTRUCT16
lpDropFileStruct
;
LPSTR
lpCurrent
;
WORD
i
;
TRACE
(
"(%04x, %x, %p, %u)
\n
"
,
hDrop
,
wFile
,
lpszFile
,
wLength
);
lpDropFileStruct
=
(
LPDROPFILESTRUCT16
)
GlobalLock16
(
hDrop
);
if
(
!
lpDropFileStruct
)
return
0
;
while
(
i
++
<
wFile
)
{
while
(
*
lpDrop
++
);
/* skip filename */
if
(
!*
lpDrop
)
{
i
=
(
wFile
==
0xFFFFFFFF
)
?
i
:
0
;
goto
end
;
}
}
lpCurrent
=
(
LPSTR
)
lpDropFileStruct
+
lpDropFileStruct
->
wSize
;
i
=
(
WORD
)
SHELL_DragQueryFile
(
lpCurrent
,
NULL
,
wFile
==
0xffff
?
0xffffffff
:
wFile
,
lpszFile
,
NULL
,
wLength
);
GlobalUnlock16
(
hDrop
);
return
i
;
}
/*************************************************************************
* DragFinish [SHELL32.80]
*/
void
WINAPI
DragFinish
(
HDROP
h
)
{
TRACE
(
"
\n
"
);
GlobalFree
((
HGLOBAL
)
h
);
i
=
lstrlenA
(
lpDrop
);
i
++
;
if
(
!
lpszFile
)
goto
end
;
/* needed buffer size */
i
=
(
wLength
>
i
)
?
i
:
wLength
;
lstrcpynA
(
lpszFile
,
lpDrop
,
i
);
end:
GlobalUnlock16
(
hDrop
);
return
i
;
}
/*************************************************************************
...
...
@@ -283,23 +180,6 @@ void WINAPI DragFinish16(HDROP16 h)
}
/*************************************************************************
* DragQueryPoint [SHELL32.135]
*/
BOOL
WINAPI
DragQueryPoint
(
HDROP
hDrop
,
POINT
*
p
)
{
LPDROPFILESTRUCT
lpDropFileStruct
;
BOOL
bRet
;
TRACE
(
"
\n
"
);
lpDropFileStruct
=
(
LPDROPFILESTRUCT
)
GlobalLock
(
hDrop
);
memcpy
(
p
,
&
lpDropFileStruct
->
ptMousePos
,
sizeof
(
POINT
));
bRet
=
lpDropFileStruct
->
fInNonClientArea
;
GlobalUnlock
(
hDrop
);
return
bRet
;
}
/*************************************************************************
* DragQueryPoint16 [SHELL.13]
*/
...
...
@@ -553,7 +433,7 @@ HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
/* Remove File Protocol from lpFile */
/* In the case file://path/file */
if
(
!
_
strn
i
cmp
(
lpFile
,
"file"
,
iSize
))
if
(
!
strn
case
cmp
(
lpFile
,
"file"
,
iSize
))
{
lpFile
+=
iSize
;
while
(
*
lpFile
==
':'
)
lpFile
++
;
...
...
@@ -603,7 +483,7 @@ HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
}
}
/* Check if file specified is in the form www.??????.*** */
else
if
(
!
_
strn
i
cmp
(
lpFile
,
"www"
,
3
))
else
if
(
!
strn
case
cmp
(
lpFile
,
"www"
,
3
))
{
/* if so, append lpFile http:// and call ShellExecute */
char
lpstrTmpFile
[
256
]
=
"http://"
;
...
...
This diff is collapsed.
Click to expand it.
dlls/shell32/shellole.c
+
142
−
22
View file @
d650903c
...
...
@@ -215,7 +215,7 @@ LPCLASSFACTORY IClassFactory_Constructor(REFCLSID rclsid)
lpclf
->
rclsid
=
(
CLSID
*
)
rclsid
;
TRACE
(
"(%p)->()
\n
"
,
lpclf
);
shell32_ObjCount
++
;
InterlockedIncrement
(
&
shell32_ObjCount
)
;
return
(
LPCLASSFACTORY
)
lpclf
;
}
/**************************************************************************
...
...
@@ -252,8 +252,8 @@ static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface)
ICOM_THIS
(
IClassFactoryImpl
,
iface
);
TRACE
(
"(%p)->(count=%lu)
\n
"
,
This
,
This
->
ref
);
shell32_ObjCount
++
;
return
++
(
This
->
ref
);
InterlockedIncrement
(
&
shell32_ObjCount
)
;
return
InterlockedIncrement
(
&
This
->
ref
);
}
/******************************************************************************
* IClassFactory_Release
...
...
@@ -263,11 +263,12 @@ static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface)
ICOM_THIS
(
IClassFactoryImpl
,
iface
);
TRACE
(
"(%p)->(count=%lu)
\n
"
,
This
,
This
->
ref
);
shell32_ObjCount
--
;
if
(
!--
(
This
->
ref
))
{
TRACE
(
"-- destroying IClassFactory(%p)
\n
"
,
This
);
HeapFree
(
GetProcessHeap
(),
0
,
This
);
return
0
;
InterlockedDecrement
(
&
shell32_ObjCount
);
if
(
!
InterlockedDecrement
(
&
This
->
ref
))
{
TRACE
(
"-- destroying IClassFactory(%p)
\n
"
,
This
);
HeapFree
(
GetProcessHeap
(),
0
,
This
);
return
0
;
}
return
This
->
ref
;
}
...
...
@@ -355,7 +356,7 @@ typedef struct
CLSID
*
rclsid
;
LPFNCREATEINSTANCE
lpfnCI
;
const
IID
*
riidInst
;
U
INT
*
pcRefDll
;
/* pointer to refcounter in external dll (ugrrr...) */
U
LONG
*
pcRefDll
;
/* pointer to refcounter in external dll (ugrrr...) */
}
IDefClFImpl
;
static
ICOM_VTABLE
(
IClassFactory
)
dclfvt
;
...
...
@@ -364,7 +365,7 @@ static ICOM_VTABLE(IClassFactory) dclfvt;
* IDefClF_fnConstructor
*/
IClassFactory
*
IDefClF_fnConstructor
(
LPFNCREATEINSTANCE
lpfnCI
,
UINT
*
pcRefDll
,
REFIID
riidInst
)
IClassFactory
*
IDefClF_fnConstructor
(
LPFNCREATEINSTANCE
lpfnCI
,
PLONG
pcRefDll
,
REFIID
riidInst
)
{
IDefClFImpl
*
lpclf
;
...
...
@@ -374,13 +375,11 @@ IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, UINT * pcRefDll
lpclf
->
lpfnCI
=
lpfnCI
;
lpclf
->
pcRefDll
=
pcRefDll
;
if
(
pcRefDll
)
(
*
pcRefDll
)
++
;
if
(
pcRefDll
)
InterlockedIncrement
(
pcRefDll
);
lpclf
->
riidInst
=
riidInst
;
TRACE
(
"(%p)
\n\t
IID:
\t
%s
\n
"
,
lpclf
,
debugstr_guid
(
riidInst
));
shell32_ObjCount
++
;
InterlockedIncrement
(
&
shell32_ObjCount
)
;
return
(
LPCLASSFACTORY
)
lpclf
;
}
/**************************************************************************
...
...
@@ -418,9 +417,8 @@ static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
ICOM_THIS
(
IDefClFImpl
,
iface
);
TRACE
(
"(%p)->(count=%lu)
\n
"
,
This
,
This
->
ref
);
shell32_ObjCount
++
;
return
++
(
This
->
ref
);
InterlockedIncrement
(
&
shell32_ObjCount
);
return
InterlockedIncrement
(
&
This
->
ref
);
}
/******************************************************************************
* IDefClF_fnRelease
...
...
@@ -430,12 +428,11 @@ static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
ICOM_THIS
(
IDefClFImpl
,
iface
);
TRACE
(
"(%p)->(count=%lu)
\n
"
,
This
,
This
->
ref
);
shell32_ObjCount
--
;
InterlockedDecrement
(
&
shell32_ObjCount
)
;
if
(
!
--
(
This
->
ref
))
if
(
!
InterlockedDecrement
(
&
This
->
ref
))
{
if
(
This
->
pcRefDll
)
(
*
This
->
pcRefDll
)
--
;
if
(
This
->
pcRefDll
)
InterlockedDecrement
(
This
->
pcRefDll
);
TRACE
(
"-- destroying IClassFactory(%p)
\n
"
,
This
);
HeapFree
(
GetProcessHeap
(),
0
,
This
);
...
...
@@ -495,7 +492,7 @@ HRESULT WINAPI SHCreateDefClassObject(
REFIID
riid
,
LPVOID
*
ppv
,
LPFNCREATEINSTANCE
lpfnCI
,
/* create instance callback entry */
UINT
*
pcRefDll
,
/* ref count of the dll */
PLONG
pcRefDll
,
/* ref count of the dll */
REFIID
riidInst
)
/* optional interface to the instance */
{
TRACE
(
"
\n\t
IID:
\t
%s %p %p %p
\n\t
IIDIns:
\t
%s
\n
"
,
...
...
@@ -514,3 +511,126 @@ HRESULT WINAPI SHCreateDefClassObject(
return
E_NOINTERFACE
;
}
/*************************************************************************
* DragAcceptFiles [SHELL32.54]
*/
void
WINAPI
DragAcceptFiles
(
HWND
hWnd
,
BOOL
b
)
{
LONG
exstyle
;
if
(
!
IsWindow
(
hWnd
)
)
return
;
exstyle
=
GetWindowLongA
(
hWnd
,
GWL_EXSTYLE
);
if
(
b
)
exstyle
|=
WS_EX_ACCEPTFILES
;
else
exstyle
&=
~
WS_EX_ACCEPTFILES
;
SetWindowLongA
(
hWnd
,
GWL_EXSTYLE
,
exstyle
);
}
/*************************************************************************
* DragFinish [SHELL32.80]
*/
void
WINAPI
DragFinish
(
HDROP
h
)
{
TRACE
(
"
\n
"
);
GlobalFree
((
HGLOBAL
)
h
);
}
/*************************************************************************
* DragQueryPoint [SHELL32.135]
*/
BOOL
WINAPI
DragQueryPoint
(
HDROP
hDrop
,
POINT
*
p
)
{
LPDROPFILESTRUCT
lpDropFileStruct
;
BOOL
bRet
;
TRACE
(
"
\n
"
);
lpDropFileStruct
=
(
LPDROPFILESTRUCT
)
GlobalLock
(
hDrop
);
memcpy
(
p
,
&
lpDropFileStruct
->
ptMousePos
,
sizeof
(
POINT
));
bRet
=
lpDropFileStruct
->
fInNonClientArea
;
GlobalUnlock
(
hDrop
);
return
bRet
;
}
/*************************************************************************
* DragQueryFileA [SHELL32.81] [shell32.82]
*/
UINT
WINAPI
DragQueryFileA
(
HDROP
hDrop
,
UINT
lFile
,
LPSTR
lpszFile
,
UINT
lLength
)
{
LPSTR
lpDrop
;
UINT
i
=
0
;
LPDROPFILESTRUCT
lpDropFileStruct
=
(
LPDROPFILESTRUCT
)
GlobalLock
(
hDrop
);
TRACE
(
"(%08x, %x, %p, %u)
\n
"
,
hDrop
,
lFile
,
lpszFile
,
lLength
);
if
(
!
lpDropFileStruct
)
goto
end
;
lpDrop
=
(
LPSTR
)
lpDropFileStruct
+
lpDropFileStruct
->
lSize
;
while
(
i
++
<
lFile
)
{
while
(
*
lpDrop
++
);
/* skip filename */
if
(
!*
lpDrop
)
{
i
=
(
lFile
==
0xFFFFFFFF
)
?
i
:
0
;
goto
end
;
}
}
i
=
lstrlenA
(
lpDrop
);
i
++
;
if
(
!
lpszFile
)
goto
end
;
/* needed buffer size */
i
=
(
lLength
>
i
)
?
i
:
lLength
;
lstrcpynA
(
lpszFile
,
lpDrop
,
i
);
end:
GlobalUnlock
(
hDrop
);
return
i
;
}
/*************************************************************************
* DragQueryFileW [shell32.133]
*/
UINT
WINAPI
DragQueryFileW
(
HDROP
hDrop
,
UINT
lFile
,
LPWSTR
lpszwFile
,
UINT
lLength
)
{
LPWSTR
lpwDrop
;
UINT
i
=
0
;
LPDROPFILESTRUCT
lpDropFileStruct
=
(
LPDROPFILESTRUCT
)
GlobalLock
(
hDrop
);
TRACE
(
"(%08x, %x, %p, %u)
\n
"
,
hDrop
,
lFile
,
lpszwFile
,
lLength
);
if
(
!
lpDropFileStruct
)
goto
end
;
lpwDrop
=
(
LPWSTR
)
lpDropFileStruct
+
lpDropFileStruct
->
lSize
;
i
=
0
;
while
(
i
++
<
lFile
)
{
while
(
*
lpwDrop
++
);
/* skip filename */
if
(
!*
lpwDrop
)
{
i
=
(
lFile
==
0xFFFFFFFF
)
?
i
:
0
;
goto
end
;
}
}
i
=
lstrlenW
(
lpwDrop
);
i
++
;
if
(
!
lpszwFile
)
goto
end
;
/* needed buffer size */
i
=
(
lLength
>
i
)
?
i
:
lLength
;
lstrcpynW
(
lpszwFile
,
lpwDrop
,
i
);
end:
GlobalUnlock
(
hDrop
);
return
i
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment