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
a0534afa
Commit
a0534afa
authored
Jan 28, 2023
by
Vladislav Timonin
Committed by
Alexandre Julliard
Jul 04, 2023
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
comdlg32: Enable visual styles when showing IFileDialog.
parent
5bc5d360
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
126 additions
and
1 deletion
+126
-1
cdlg.h
dlls/comdlg32/cdlg.h
+1
-0
cdlg32.c
dlls/comdlg32/cdlg32.c
+15
-1
comdlg32.manifest
dlls/comdlg32/comdlg32.manifest
+16
-0
comdlg32.rc
dlls/comdlg32/comdlg32.rc
+3
-0
itemdlg.c
dlls/comdlg32/itemdlg.c
+91
-0
No files found.
dlls/comdlg32/cdlg.h
View file @
a0534afa
...
...
@@ -27,6 +27,7 @@
#define COMDLG32_Atom MAKEINTATOM(0xa000)
/* MS uses this one to identify props */
extern
HINSTANCE
COMDLG32_hInstance
DECLSPEC_HIDDEN
;
extern
HANDLE
COMDLG32_hActCtx
DECLSPEC_HIDDEN
;
void
COMDLG32_SetCommDlgExtendedError
(
DWORD
err
)
DECLSPEC_HIDDEN
;
LPVOID
COMDLG32_AllocMem
(
int
size
)
__WINE_ALLOC_SIZE
(
1
)
DECLSPEC_HIDDEN
;
...
...
dlls/comdlg32/cdlg32.c
View file @
a0534afa
...
...
@@ -40,6 +40,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(commdlg);
DECLSPEC_HIDDEN
HINSTANCE
COMDLG32_hInstance
=
0
;
HANDLE
COMDLG32_hActCtx
=
INVALID_HANDLE_VALUE
;
static
DWORD
COMDLG32_TlsIndex
=
TLS_OUT_OF_INDEXES
;
...
...
@@ -59,13 +60,26 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
switch
(
Reason
)
{
case
DLL_PROCESS_ATTACH
:
{
ACTCTXW
actctx
=
{
0
};
COMDLG32_hInstance
=
hInstance
;
DisableThreadLibraryCalls
(
hInstance
);
break
;
actctx
.
cbSize
=
sizeof
(
actctx
);
actctx
.
hModule
=
COMDLG32_hInstance
;
actctx
.
lpResourceName
=
MAKEINTRESOURCEW
(
123
);
actctx
.
dwFlags
=
ACTCTX_FLAG_HMODULE_VALID
|
ACTCTX_FLAG_RESOURCE_NAME_VALID
;
COMDLG32_hActCtx
=
CreateActCtxW
(
&
actctx
);
if
(
COMDLG32_hActCtx
==
INVALID_HANDLE_VALUE
)
ERR
(
"failed to create activation context, last error %lu
\n
"
,
GetLastError
());
break
;
}
case
DLL_PROCESS_DETACH
:
if
(
Reserved
)
break
;
if
(
COMDLG32_TlsIndex
!=
TLS_OUT_OF_INDEXES
)
TlsFree
(
COMDLG32_TlsIndex
);
if
(
COMDLG32_hActCtx
!=
INVALID_HANDLE_VALUE
)
ReleaseActCtx
(
COMDLG32_hActCtx
);
break
;
}
return
TRUE
;
...
...
dlls/comdlg32/comdlg32.manifest
0 → 100644
View file @
a0534afa
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
xmlns=
"urn:schemas-microsoft-com:asm.v1"
manifestVersion=
"1.0"
>
<assemblyIdentity
type=
"win32"
name=
"Microsoft.Windows.Shell.comdlg32"
version=
"0.0.0.0"
/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type=
"win32"
name=
"Microsoft.Windows.Common-Controls"
version=
"6.0.0.0"
processorArchitecture=
"*"
publicKeyToken=
"6595b64144ccf1df"
language=
"*"
/>
</dependentAssembly>
</dependency>
</assembly>
dlls/comdlg32/comdlg32.rc
View file @
a0534afa
...
...
@@ -602,3 +602,6 @@ NETWORK ICON network.ico
/* @makedep: fontpics.bmp */
38 BITMAP fontpics.bmp
/* @makedep: comdlg32.manifest */
123 RT_MANIFEST comdlg32.manifest
dlls/comdlg32/itemdlg.c
View file @
a0534afa
...
...
@@ -145,6 +145,8 @@ typedef struct FileDialogImpl {
DWORD
opendropdown_selection
;
GUID
client_guid
;
HANDLE
user_actctx
;
}
FileDialogImpl
;
/**************************************************************************
...
...
@@ -152,10 +154,14 @@ typedef struct FileDialogImpl {
*/
static
HRESULT
events_OnFileOk
(
FileDialogImpl
*
This
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
HRESULT
hr
=
S_OK
;
TRACE
(
"%p
\n
"
,
This
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
TRACE
(
"Notifying %p
\n
"
,
cursor
);
...
...
@@ -164,6 +170,9 @@ static HRESULT events_OnFileOk(FileDialogImpl *This)
break
;
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
if
(
hr
==
E_NOTIMPL
)
hr
=
S_OK
;
...
...
@@ -172,10 +181,14 @@ static HRESULT events_OnFileOk(FileDialogImpl *This)
static
HRESULT
events_OnFolderChanging
(
FileDialogImpl
*
This
,
IShellItem
*
folder
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
HRESULT
hr
=
S_OK
;
TRACE
(
"%p (%p)
\n
"
,
This
,
folder
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
TRACE
(
"Notifying %p
\n
"
,
cursor
);
...
...
@@ -184,6 +197,9 @@ static HRESULT events_OnFolderChanging(FileDialogImpl *This, IShellItem *folder)
break
;
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
if
(
hr
==
E_NOTIMPL
)
hr
=
S_OK
;
...
...
@@ -192,47 +208,72 @@ static HRESULT events_OnFolderChanging(FileDialogImpl *This, IShellItem *folder)
static
void
events_OnFolderChange
(
FileDialogImpl
*
This
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
TRACE
(
"%p
\n
"
,
This
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
TRACE
(
"Notifying %p
\n
"
,
cursor
);
IFileDialogEvents_OnFolderChange
(
cursor
->
pfde
,
(
IFileDialog
*
)
&
This
->
IFileDialog2_iface
);
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
}
static
void
events_OnSelectionChange
(
FileDialogImpl
*
This
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
TRACE
(
"%p
\n
"
,
This
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
TRACE
(
"Notifying %p
\n
"
,
cursor
);
IFileDialogEvents_OnSelectionChange
(
cursor
->
pfde
,
(
IFileDialog
*
)
&
This
->
IFileDialog2_iface
);
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
}
static
void
events_OnTypeChange
(
FileDialogImpl
*
This
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
TRACE
(
"%p
\n
"
,
This
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
TRACE
(
"Notifying %p
\n
"
,
cursor
);
IFileDialogEvents_OnTypeChange
(
cursor
->
pfde
,
(
IFileDialog
*
)
&
This
->
IFileDialog2_iface
);
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
}
static
HRESULT
events_OnOverwrite
(
FileDialogImpl
*
This
,
IShellItem
*
shellitem
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
HRESULT
hr
=
S_OK
;
FDE_OVERWRITE_RESPONSE
response
=
FDEOR_DEFAULT
;
TRACE
(
"%p %p
\n
"
,
This
,
shellitem
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
TRACE
(
"Notifying %p
\n
"
,
cursor
);
...
...
@@ -242,6 +283,9 @@ static HRESULT events_OnOverwrite(FileDialogImpl *This, IShellItem *shellitem)
break
;
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
if
(
hr
==
E_NOTIMPL
)
hr
=
S_OK
;
...
...
@@ -274,9 +318,13 @@ static inline HRESULT get_cctrl_event(IFileDialogEvents *pfde, IFileDialogContro
static
HRESULT
cctrl_event_OnButtonClicked
(
FileDialogImpl
*
This
,
DWORD
ctl_id
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
TRACE
(
"%p
\n
"
,
This
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
IFileDialogControlEvents
*
pfdce
;
...
...
@@ -288,14 +336,21 @@ static HRESULT cctrl_event_OnButtonClicked(FileDialogImpl *This, DWORD ctl_id)
}
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
return
S_OK
;
}
static
HRESULT
cctrl_event_OnItemSelected
(
FileDialogImpl
*
This
,
DWORD
ctl_id
,
DWORD
item_id
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
TRACE
(
"%p %li %li
\n
"
,
This
,
ctl_id
,
item_id
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
IFileDialogControlEvents
*
pfdce
;
...
...
@@ -307,14 +362,21 @@ static HRESULT cctrl_event_OnItemSelected(FileDialogImpl *This, DWORD ctl_id, DW
}
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
return
S_OK
;
}
static
HRESULT
cctrl_event_OnCheckButtonToggled
(
FileDialogImpl
*
This
,
DWORD
ctl_id
,
BOOL
checked
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
TRACE
(
"%p
\n
"
,
This
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
IFileDialogControlEvents
*
pfdce
;
...
...
@@ -326,15 +388,22 @@ static HRESULT cctrl_event_OnCheckButtonToggled(FileDialogImpl *This, DWORD ctl_
}
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
return
S_OK
;
}
static
HRESULT
cctrl_event_OnControlActivating
(
FileDialogImpl
*
This
,
DWORD
ctl_id
)
{
ULONG_PTR
ctx_cookie
=
0
;
events_client
*
cursor
;
TRACE
(
"%p
\n
"
,
This
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
This
->
user_actctx
,
&
ctx_cookie
);
LIST_FOR_EACH_ENTRY
(
cursor
,
&
This
->
events_clients
,
events_client
,
entry
)
{
IFileDialogControlEvents
*
pfdce
;
...
...
@@ -346,6 +415,9 @@ static HRESULT cctrl_event_OnControlActivating(FileDialogImpl *This,
}
}
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
return
S_OK
;
}
...
...
@@ -2244,16 +2316,33 @@ static INT_PTR CALLBACK itemdlg_dlgproc(HWND hwnd, UINT umessage, WPARAM wparam,
static
HRESULT
create_dialog
(
FileDialogImpl
*
This
,
HWND
parent
)
{
ULONG_PTR
ctx_cookie
=
0
;
INT_PTR
res
;
if
(
This
->
dlg_hwnd
)
return
E_UNEXPECTED
;
if
(
!
GetCurrentActCtx
(
&
This
->
user_actctx
))
This
->
user_actctx
=
INVALID_HANDLE_VALUE
;
if
(
COMDLG32_hActCtx
!=
INVALID_HANDLE_VALUE
)
ActivateActCtx
(
COMDLG32_hActCtx
,
&
ctx_cookie
);
SetLastError
(
0
);
res
=
DialogBoxParamW
(
COMDLG32_hInstance
,
MAKEINTRESOURCEW
(
NEWFILEOPENV3ORD
),
parent
,
itemdlg_dlgproc
,
(
LPARAM
)
This
);
This
->
dlg_hwnd
=
NULL
;
if
(
COMDLG32_hActCtx
!=
INVALID_HANDLE_VALUE
)
DeactivateActCtx
(
0
,
ctx_cookie
);
if
(
This
->
user_actctx
!=
INVALID_HANDLE_VALUE
)
{
ReleaseActCtx
(
This
->
user_actctx
);
This
->
user_actctx
=
INVALID_HANDLE_VALUE
;
}
if
(
res
==
-
1
)
{
ERR
(
"Failed to show dialog (LastError: %ld)
\n
"
,
GetLastError
());
...
...
@@ -4650,6 +4739,8 @@ static HRESULT FileDialog_constructor(IUnknown *pUnkOuter, REFIID riid, void **p
return
E_FAIL
;
}
fdimpl
->
user_actctx
=
INVALID_HANDLE_VALUE
;
hr
=
IFileDialog2_QueryInterface
(
&
fdimpl
->
IFileDialog2_iface
,
riid
,
ppv
);
IFileDialog2_Release
(
&
fdimpl
->
IFileDialog2_iface
);
return
hr
;
...
...
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