summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/win_util.cc15
-rw-r--r--app/win_util.h7
-rw-r--r--chrome/browser/browser_init.cc7
3 files changed, 29 insertions, 0 deletions
diff --git a/app/win_util.cc b/app/win_util.cc
index b043db3..46a4f92 100644
--- a/app/win_util.cc
+++ b/app/win_util.cc
@@ -23,6 +23,7 @@
#include "base/scoped_comptr_win.h"
#include "base/scoped_handle.h"
#include "base/scoped_handle_win.h"
+#include "base/scoped_native_library.h"
#include "base/string_util.h"
#include "base/win_util.h"
#include "gfx/codec/png_codec.h"
@@ -582,4 +583,18 @@ void SetAppIdForWindow(const std::wstring& app_id, HWND hwnd) {
base::UnloadNativeLibrary(shell32_library);
}
+void CallSetProcessDPIAware() {
+ // This functionality is only available on Vista or later.
+ if (win_util::GetWinVersion() < win_util::WINVERSION_VISTA)
+ return;
+
+ base::ScopedNativeLibrary user32(
+ FilePath(base::GetNativeLibraryName(L"user32")));
+ typedef BOOL (*SetProcessDPIAwareFunc)();
+ SetProcessDPIAwareFunc set_process_dpi_aware =
+ (SetProcessDPIAwareFunc)user32.GetFunctionPointer("SetProcessDPIAware");
+ if (set_process_dpi_aware)
+ set_process_dpi_aware();
+}
+
} // namespace win_util
diff --git a/app/win_util.h b/app/win_util.h
index 6e2812e..9d745eb 100644
--- a/app/win_util.h
+++ b/app/win_util.h
@@ -215,6 +215,13 @@ extern const int kAutoHideTaskbarThicknessPx;
// do not group together on the Win7 task bar.
void SetAppIdForWindow(const std::wstring& app_id, HWND hwnd);
+// Calls SetProcessDPIAware() to declare this application is DPI-aware and to
+// disable the DPI virtualization of Windows. Unfortunately, calling this
+// function after creating a window confuses some APIs, i.e. some APIs still
+// have the DPI virtualization enabled after calling SetProcessDPIAware().
+// Therefore, we need to call this function before creating the first window.
+void CallSetProcessDPIAware();
+
} // namespace win_util
#endif // APP_WIN_UTIL_H_
diff --git a/chrome/browser/browser_init.cc b/chrome/browser/browser_init.cc
index 495ce1c..9c72ceb 100644
--- a/chrome/browser/browser_init.cc
+++ b/chrome/browser/browser_init.cc
@@ -387,6 +387,13 @@ bool BrowserInit::LaunchBrowser(
chromeos::InitialTabNotificationObserver::Get();
#endif
+#if defined(OS_WIN)
+ // Disable the DPI-virtualization mode of Windows Vista or later because it
+ // causes some problems when using system messages (such as WM_NCHITTEST and
+ // WM_GETTITLEBARINFOEX) on a custom frame.
+ win_util::CallSetProcessDPIAware();
+#endif
+
// Continue with the off-the-record profile from here on if --incognito
if (command_line.HasSwitch(switches::kIncognito))
profile = profile->GetOffTheRecordProfile();