From 367beb52cd86a56e868ff2f8d62642b1a6da4748 Mon Sep 17 00:00:00 2001 From: Jeff Stamerjohn Date: Sat, 29 Jan 2022 12:52:45 -0900 Subject: [PATCH 1/6] Call SetProcessDPIAware --- src/cmd/barrierd/barrierd.cpp | 1 + src/lib/barrier/win32/AppUtilWindows.cpp | 2 ++ src/lib/barrier/win32/DaemonApp.cpp | 1 + 3 files changed, 4 insertions(+) diff --git a/src/cmd/barrierd/barrierd.cpp b/src/cmd/barrierd/barrierd.cpp index 710e89db39e..fd3f4b0d5f0 100644 --- a/src/cmd/barrierd/barrierd.cpp +++ b/src/cmd/barrierd/barrierd.cpp @@ -38,6 +38,7 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { DaemonApp app; + SetProcessDPIAware(); return app.run(__argc, __argv); } diff --git a/src/lib/barrier/win32/AppUtilWindows.cpp b/src/lib/barrier/win32/AppUtilWindows.cpp index b19cf15f59e..f68d7052c67 100644 --- a/src/lib/barrier/win32/AppUtilWindows.cpp +++ b/src/lib/barrier/win32/AppUtilWindows.cpp @@ -138,6 +138,8 @@ AppUtilWindows::run(int argc, char** argv) throw std::runtime_error("Barrier only supports Windows XP SP3 and above."); } + + SetProcessDPIAware(); // record window instance for tray icon, etc ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL)); diff --git a/src/lib/barrier/win32/DaemonApp.cpp b/src/lib/barrier/win32/DaemonApp.cpp index 81ec5ff30e4..9283b13af8e 100644 --- a/src/lib/barrier/win32/DaemonApp.cpp +++ b/src/lib/barrier/win32/DaemonApp.cpp @@ -84,6 +84,7 @@ DaemonApp::~DaemonApp() int DaemonApp::run(int argc, char** argv) { + SetProcessDPIAware(); // win32 instance needed for threading, etc. ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL)); From 726258ff718fc1cfd4243daee7cf3ff3a3b29a38 Mon Sep 17 00:00:00 2001 From: Jeff Stamerjohn Date: Sat, 29 Jan 2022 12:55:02 -0900 Subject: [PATCH 2/6] Fix whitespace --- src/lib/barrier/win32/DaemonApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/barrier/win32/DaemonApp.cpp b/src/lib/barrier/win32/DaemonApp.cpp index 9283b13af8e..4b72597d1bd 100644 --- a/src/lib/barrier/win32/DaemonApp.cpp +++ b/src/lib/barrier/win32/DaemonApp.cpp @@ -84,7 +84,7 @@ DaemonApp::~DaemonApp() int DaemonApp::run(int argc, char** argv) { - SetProcessDPIAware(); + SetProcessDPIAware(); // win32 instance needed for threading, etc. ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL)); From 5c1527c665ca87f8c8d3172e8f91c065ee823f1b Mon Sep 17 00:00:00 2001 From: Jeff Stamerjohn Date: Sat, 29 Jan 2022 13:27:18 -0900 Subject: [PATCH 3/6] remove unnecessary calls --- src/cmd/barrierd/barrierd.cpp | 1 - src/lib/barrier/win32/DaemonApp.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/src/cmd/barrierd/barrierd.cpp b/src/cmd/barrierd/barrierd.cpp index fd3f4b0d5f0..710e89db39e 100644 --- a/src/cmd/barrierd/barrierd.cpp +++ b/src/cmd/barrierd/barrierd.cpp @@ -38,7 +38,6 @@ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { DaemonApp app; - SetProcessDPIAware(); return app.run(__argc, __argv); } diff --git a/src/lib/barrier/win32/DaemonApp.cpp b/src/lib/barrier/win32/DaemonApp.cpp index 4b72597d1bd..81ec5ff30e4 100644 --- a/src/lib/barrier/win32/DaemonApp.cpp +++ b/src/lib/barrier/win32/DaemonApp.cpp @@ -84,7 +84,6 @@ DaemonApp::~DaemonApp() int DaemonApp::run(int argc, char** argv) { - SetProcessDPIAware(); // win32 instance needed for threading, etc. ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL)); From 31acdd23fd8bfcf273460ebb6e5fce348a17cad9 Mon Sep 17 00:00:00 2001 From: Jeff Stamerjohn Date: Sat, 29 Jan 2022 13:28:26 -0900 Subject: [PATCH 4/6] remove extra whitespace --- src/lib/barrier/win32/AppUtilWindows.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/barrier/win32/AppUtilWindows.cpp b/src/lib/barrier/win32/AppUtilWindows.cpp index f68d7052c67..2e86dfb0ede 100644 --- a/src/lib/barrier/win32/AppUtilWindows.cpp +++ b/src/lib/barrier/win32/AppUtilWindows.cpp @@ -138,7 +138,6 @@ AppUtilWindows::run(int argc, char** argv) throw std::runtime_error("Barrier only supports Windows XP SP3 and above."); } - SetProcessDPIAware(); // record window instance for tray icon, etc ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL)); From 4ee8913284b9b1a992a0acce020d0b9b34243de5 Mon Sep 17 00:00:00 2001 From: Jeff Stamerjohn Date: Sat, 29 Jan 2022 13:45:10 -0900 Subject: [PATCH 5/6] add newsfragments --- doc/newsfragments/fix-windows-high-dpi.bugfix | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 doc/newsfragments/fix-windows-high-dpi.bugfix diff --git a/doc/newsfragments/fix-windows-high-dpi.bugfix b/doc/newsfragments/fix-windows-high-dpi.bugfix new file mode 100644 index 00000000000..a7bddac1339 --- /dev/null +++ b/doc/newsfragments/fix-windows-high-dpi.bugfix @@ -0,0 +1,2 @@ +Fix running on a windows monitor with Scale set to more than 100%. +(https://github.com/debauchee/barrier/issues/94, https://github.com/debauchee/barrier/issues/273, https://github.com/debauchee/barrier/issues/1363, https://github.com/debauchee/barrier/issues/1405, https://github.com/debauchee/barrier/issues/1462) \ No newline at end of file From 9b57c5b227f955c529f6b6b72ad240a757addf16 Mon Sep 17 00:00:00 2001 From: Jeff Stamerjohn Date: Sat, 29 Jan 2022 14:16:04 -0900 Subject: [PATCH 6/6] add comment to code --- src/lib/barrier/win32/AppUtilWindows.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/barrier/win32/AppUtilWindows.cpp b/src/lib/barrier/win32/AppUtilWindows.cpp index 2e86dfb0ede..e901b95dc58 100644 --- a/src/lib/barrier/win32/AppUtilWindows.cpp +++ b/src/lib/barrier/win32/AppUtilWindows.cpp @@ -138,6 +138,9 @@ AppUtilWindows::run(int argc, char** argv) throw std::runtime_error("Barrier only supports Windows XP SP3 and above."); } + // This changes the behavior of future calls to GetSystemMetrics() + // so that the size or position in raw pixels is returned instead of a scaled value + // (when a windows display has a Scale of > 100% set). SetProcessDPIAware(); // record window instance for tray icon, etc ArchMiscWindows::setInstanceWin32(GetModuleHandle(NULL));