Hello,
Emacs works perfectly on HiDPI monitor, I have patched ony two minor things:
1) declare dpi-awareness in manifest files, so Windows will not enable "compatibility mode" and fonts now look crisp by default
2) remove unneeded OFN_ENABLEHOOK flag passed to GetOpenFileName, which allow OS to show modern "open file" dialog. Legacy dialog not support HiDPI mode and show too small icons.
Let me know if I miss something and/or select wrong place to report it
---
diff --git a/nt/emacs-x64.manifest b/nt/emacs-x64.manifest
index 5434e29..3cf56dd 100644
--- a/nt/emacs-x64.manifest
+++ b/nt/emacs-x64.manifest
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls"
@@ -30,4 +30,9 @@
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
+ <asmv3:application>
+ <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
+ <dpiAware>true</dpiAware>
+ </asmv3:windowsSettings>
+ </asmv3:application>
</assembly>
diff --git a/nt/emacs-x86.manifest b/nt/emacs-x86.manifest
index 7f09c56..d7053be 100644
--- a/nt/emacs-x86.manifest
+++ b/nt/emacs-x86.manifest
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls"
@@ -30,4 +30,9 @@
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
</application>
</compatibility>
+ <asmv3:application>
+ <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
+ <dpiAware>true</dpiAware>
+ </asmv3:windowsSettings>
+ </asmv3:application>
</assembly>
diff --git a/src/w32fns.c b/src/w32fns.c
index ed11031..c04b9b0 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -6680,7 +6680,7 @@ value of DIR as in previous invocations; this is standard Windows behavior. */)
#endif
file_details_w->nFilterIndex = NILP (only_dir_p) ? 1 : 2;
file_details_w->Flags = (OFN_HIDEREADONLY | OFN_NOCHANGEDIR
- | OFN_EXPLORER | OFN_ENABLEHOOK);
+ | OFN_EXPLORER);
if (!NILP (mustmatch))
{
/* Require that the path to the parent directory exists. */
@@ -6707,7 +6707,7 @@ value of DIR as in previous invocations; this is standard Windows behavior. */)
file_details_a->lpstrTitle = prompt_a;
file_details_a->nFilterIndex = NILP (only_dir_p) ? 1 : 2;
file_details_a->Flags = (OFN_HIDEREADONLY | OFN_NOCHANGEDIR
- | OFN_EXPLORER | OFN_ENABLEHOOK);
+ | OFN_EXPLORER);
if (!NILP (mustmatch))
{
/* Require that the path to the parent directory exists. */