From f0c7e9bdfa70bbb233ff0a57ae0bbcb150dc473b Mon Sep 17 00:00:00 2001
From: Quantum <quantum2048@gmail.com>
Date: Mon, 19 Jul 2021 19:26:59 -0400
Subject: [PATCH] [host] windows: declare high DPI support in manifest

This is the normal way of doing things, and it's easier and less sketchy
than GetProcAddress.
---
 host/platform/Windows/app.manifest   |  8 +++++++-
 host/platform/Windows/src/platform.c | 13 +------------
 2 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/host/platform/Windows/app.manifest b/host/platform/Windows/app.manifest
index 3b536185..4026a810 100644
--- a/host/platform/Windows/app.manifest
+++ b/host/platform/Windows/app.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">
     <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="HostFission.LookingGlass.Host" type="win32"/>
     <description>Looking Glass (host)</description>
     <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
@@ -9,4 +9,10 @@
             </requestedPrivileges>
         </security>
     </trustInfo>
+    <asmv3:application>
+        <asmv3:windowsSettings>
+            <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
+            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
+        </asmv3:windowsSettings>
+    </asmv3:application>
 </assembly>
diff --git a/host/platform/Windows/src/platform.c b/host/platform/Windows/src/platform.c
index 10b86a9d..3b6834be 100644
--- a/host/platform/Windows/src/platform.c
+++ b/host/platform/Windows/src/platform.c
@@ -400,18 +400,6 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
   // setup a handler for ctrl+c
   SetConsoleCtrlHandler(CtrlHandler, TRUE);
 
-  // enable high DPI awareness
-  // this is required for DXGI 1.5 support to function and also capturing desktops with high DPI
-  DECLARE_HANDLE(DPI_AWARENESS_CONTEXT);
-  #define DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2  ((DPI_AWARENESS_CONTEXT)-4)
-  typedef BOOL (*User32_SetProcessDpiAwarenessContext)(DPI_AWARENESS_CONTEXT value);
-
-  HMODULE user32 = GetModuleHandle("user32.dll");
-  User32_SetProcessDpiAwarenessContext fn;
-  fn = (User32_SetProcessDpiAwarenessContext)GetProcAddress(user32, "SetProcessDpiAwarenessContext");
-  if (fn)
-    fn(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
-
   // create a message window so that our message pump works
   WNDCLASSEX wx    = {};
   wx.cbSize        = sizeof(WNDCLASSEX);
@@ -437,6 +425,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
   app.exitThreadEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
 
   // this is needed so that unprivileged processes can send us this message
+  HMODULE user32 = GetModuleHandle("user32.dll");
   _ChangeWindowMessageFilterEx = (PChangeWindowMessageFilterEx)GetProcAddress(user32, "ChangeWindowMessageFilterEx");
   if (_ChangeWindowMessageFilterEx)
     _ChangeWindowMessageFilterEx(app.messageWnd, app.trayRestartMsg, MSGFLT_ALLOW, NULL);