[PATCH 7/7] ieframe: Enable visual styles.
Zhiyi Zhang
zzhang at codeweavers.com
Wed Apr 13 02:50:41 CDT 2022
ieframe.dll uses manifest at ID 123. However, IEWinMain() is not called from rundll32.exe or
Control_RunDLL() so the manifest needs to be activated in DllMain(). This allows iexplore.exe
to enable theming.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
dlls/ieframe/ieframe.manifest | 16 ++++++++++++++++
dlls/ieframe/ieframe.rc | 3 +++
dlls/ieframe/ieframe_main.c | 28 ++++++++++++++++++++++++++++
3 files changed, 47 insertions(+)
create mode 100644 dlls/ieframe/ieframe.manifest
diff --git a/dlls/ieframe/ieframe.manifest b/dlls/ieframe/ieframe.manifest
new file mode 100644
index 00000000000..c8fd3eb4dce
--- /dev/null
+++ b/dlls/ieframe/ieframe.manifest
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assemblyIdentity type="win32" name="Wine.Ieframe" 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>
diff --git a/dlls/ieframe/ieframe.rc b/dlls/ieframe/ieframe.rc
index aed8483e4ce..eb05a98dbc4 100644
--- a/dlls/ieframe/ieframe.rc
+++ b/dlls/ieframe/ieframe.rc
@@ -108,6 +108,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#include "wine/wine_common_ver.rc"
+/* @makedep: ieframe.manifest */
+123 RT_MANIFEST ieframe.manifest
+
/* @makedep: ietoolbar.bmp */
IDB_IETOOLBAR BITMAP ietoolbar.bmp
diff --git a/dlls/ieframe/ieframe_main.c b/dlls/ieframe/ieframe_main.c
index 8775e244d1c..2ef1c3784c0 100644
--- a/dlls/ieframe/ieframe_main.c
+++ b/dlls/ieframe/ieframe_main.c
@@ -17,6 +17,7 @@
*/
#include "ieframe.h"
+#include <commctrl.h>
#include "initguid.h"
#include "rpcproxy.h"
@@ -30,6 +31,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(ieframe);
LONG module_ref = 0;
HINSTANCE ieframe_instance;
+static HANDLE context = INVALID_HANDLE_VALUE;
+static ULONG_PTR context_cookie;
+static BOOL context_activated;
static ITypeLib *typelib;
static ITypeInfo *typeinfos[LAST_tid];
@@ -178,6 +182,27 @@ static const IClassFactoryVtbl CUrlHistoryFactoryVtbl = {
static IClassFactory CUrlHistoryFactory = { &CUrlHistoryFactoryVtbl };
+static void activate_context(void)
+{
+ ACTCTXW actctx;
+
+ memset(&actctx, 0, sizeof(actctx));
+ actctx.cbSize = sizeof(actctx);
+ actctx.hModule = ieframe_instance;
+ actctx.lpResourceName = MAKEINTRESOURCEW(123);
+ actctx.dwFlags = ACTCTX_FLAG_HMODULE_VALID | ACTCTX_FLAG_RESOURCE_NAME_VALID;
+ context = CreateActCtxW(&actctx);
+ if (context != INVALID_HANDLE_VALUE)
+ context_activated = ActivateActCtx(context, &context_cookie);
+}
+
+static void deactivate_context(void)
+{
+ if (context_activated)
+ DeactivateActCtx(0, context_cookie);
+ ReleaseActCtx(context);
+}
+
/******************************************************************
* DllMain (ieframe.@)
*/
@@ -189,6 +214,8 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
{
case DLL_PROCESS_ATTACH:
ieframe_instance = hInstDLL;
+ activate_context();
+ InitCommonControls();
register_iewindow_class();
DisableThreadLibraryCalls(ieframe_instance);
break;
@@ -196,6 +223,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
if (lpv) break;
unregister_iewindow_class();
release_typelib();
+ deactivate_context();
}
return TRUE;
--
2.32.0
More information about the wine-devel
mailing list