Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: base/win/win_util.cc

Issue 1838993002: Export the tablet mode checking function from base. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/win/win_util.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/win/win_util.h" 5 #include "base/win/win_util.h"
6 6
7 #include <aclapi.h> 7 #include <aclapi.h>
8 #include <cfgmgr32.h> 8 #include <cfgmgr32.h>
9 #include <lm.h> 9 #include <lm.h>
10 #include <powrprof.h> 10 #include <powrprof.h>
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 const wchar_t kWindows8OSKRegPath[] = 107 const wchar_t kWindows8OSKRegPath[] =
108 L"Software\\Classes\\CLSID\\{054AAE20-4BEA-4347-8A35-64A533254A9D}" 108 L"Software\\Classes\\CLSID\\{054AAE20-4BEA-4347-8A35-64A533254A9D}"
109 L"\\LocalServer32"; 109 L"\\LocalServer32";
110 110
111 // Returns the current platform role. We use the PowerDeterminePlatformRoleEx 111 // Returns the current platform role. We use the PowerDeterminePlatformRoleEx
112 // API for that. 112 // API for that.
113 POWER_PLATFORM_ROLE GetPlatformRole() { 113 POWER_PLATFORM_ROLE GetPlatformRole() {
114 return PowerDeterminePlatformRoleEx(POWER_PLATFORM_ROLE_V2); 114 return PowerDeterminePlatformRoleEx(POWER_PLATFORM_ROLE_V2);
115 } 115 }
116 116
117 } // namespace
118
117 // Uses the Windows 10 WRL API's to query the current system state. The API's 119 // Uses the Windows 10 WRL API's to query the current system state. The API's
118 // we are using in the function below are supported in Win32 apps as per msdn. 120 // we are using in the function below are supported in Win32 apps as per msdn.
119 // It looks like the API implementation is buggy at least on Surface 4 causing 121 // It looks like the API implementation is buggy at least on Surface 4 causing
120 // it to always return UserInteractionMode_Touch which as per documentation 122 // it to always return UserInteractionMode_Touch which as per documentation
121 // indicates tablet mode. 123 // indicates tablet mode.
122 bool IsWindows10TabletDevice() { 124 bool IsWindows10TabletMode(HWND hwnd) {
123 if (GetVersion() < VERSION_WIN10) 125 if (GetVersion() < VERSION_WIN10)
124 return false; 126 return false;
125 127
126 using RoGetActivationFactoryFunction = decltype(&RoGetActivationFactory); 128 using RoGetActivationFactoryFunction = decltype(&RoGetActivationFactory);
127 using WindowsCreateStringFunction = decltype(&WindowsCreateString); 129 using WindowsCreateStringFunction = decltype(&WindowsCreateString);
128 130
129 static RoGetActivationFactoryFunction get_factory = nullptr; 131 static RoGetActivationFactoryFunction get_factory = nullptr;
130 static WindowsCreateStringFunction create_string = nullptr; 132 static WindowsCreateStringFunction create_string = nullptr;
131 133
132 if (!get_factory) { 134 if (!get_factory) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 view_settings_interop.ReceiveVoid()); 173 view_settings_interop.ReceiveVoid());
172 if (FAILED(hr)) 174 if (FAILED(hr))
173 return false; 175 return false;
174 176
175 base::win::ScopedComPtr<ABI::Windows::UI::ViewManagement::IUIViewSettings> 177 base::win::ScopedComPtr<ABI::Windows::UI::ViewManagement::IUIViewSettings>
176 view_settings; 178 view_settings;
177 // TODO(ananta) 179 // TODO(ananta)
178 // Avoid using GetForegroundWindow here and pass in the HWND of the window 180 // Avoid using GetForegroundWindow here and pass in the HWND of the window
179 // intiating the request to display the keyboard. 181 // intiating the request to display the keyboard.
180 hr = view_settings_interop->GetForWindow( 182 hr = view_settings_interop->GetForWindow(
181 ::GetForegroundWindow(), 183 hwnd,
182 __uuidof(ABI::Windows::UI::ViewManagement::IUIViewSettings), 184 __uuidof(ABI::Windows::UI::ViewManagement::IUIViewSettings),
183 view_settings.ReceiveVoid()); 185 view_settings.ReceiveVoid());
184 if (FAILED(hr)) 186 if (FAILED(hr))
185 return false; 187 return false;
186 188
187 ABI::Windows::UI::ViewManagement::UserInteractionMode mode = 189 ABI::Windows::UI::ViewManagement::UserInteractionMode mode =
188 ABI::Windows::UI::ViewManagement::UserInteractionMode_Mouse; 190 ABI::Windows::UI::ViewManagement::UserInteractionMode_Mouse;
189 view_settings->get_UserInteractionMode(&mode); 191 view_settings->get_UserInteractionMode(&mode);
190 return mode == ABI::Windows::UI::ViewManagement::UserInteractionMode_Touch; 192 return mode == ABI::Windows::UI::ViewManagement::UserInteractionMode_Touch;
191 } 193 }
192 194
193 } // namespace
194
195 // Returns true if a physical keyboard is detected on Windows 8 and up. 195 // Returns true if a physical keyboard is detected on Windows 8 and up.
196 // Uses the Setup APIs to enumerate the attached keyboards and returns true 196 // Uses the Setup APIs to enumerate the attached keyboards and returns true
197 // if the keyboard count is 1 or more.. While this will work in most cases 197 // if the keyboard count is 1 or more.. While this will work in most cases
198 // it won't work if there are devices which expose keyboard interfaces which 198 // it won't work if there are devices which expose keyboard interfaces which
199 // are attached to the machine. 199 // are attached to the machine.
200 bool IsKeyboardPresentOnSlate(std::string* reason) { 200 bool IsKeyboardPresentOnSlate(std::string* reason) {
201 bool result = false; 201 bool result = false;
202 202
203 if (GetVersion() < VERSION_WIN8) { 203 if (GetVersion() < VERSION_WIN8) {
204 *reason = "Detection not supported"; 204 *reason = "Detection not supported";
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 signal(SIGABRT, ForceCrashOnSigAbort); 468 signal(SIGABRT, ForceCrashOnSigAbort);
469 } 469 }
470 470
471 bool IsTabletDevice(std::string* reason) { 471 bool IsTabletDevice(std::string* reason) {
472 if (GetVersion() < VERSION_WIN8) { 472 if (GetVersion() < VERSION_WIN8) {
473 if (reason) 473 if (reason)
474 *reason = "Tablet device detection not supported below Windows 8\n"; 474 *reason = "Tablet device detection not supported below Windows 8\n";
475 return false; 475 return false;
476 } 476 }
477 477
478 if (IsWindows10TabletDevice()) 478 if (IsWindows10TabletMode(::GetForegroundWindow()))
479 return true; 479 return true;
480 480
481 if (GetSystemMetrics(SM_MAXIMUMTOUCHES) == 0) { 481 if (GetSystemMetrics(SM_MAXIMUMTOUCHES) == 0) {
482 if (reason) { 482 if (reason) {
483 *reason += "Device does not support touch.\n"; 483 *reason += "Device does not support touch.\n";
484 } else { 484 } else {
485 return false; 485 return false;
486 } 486 }
487 } 487 }
488 488
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 snapshot->resize(num_modules + 8, NULL); 689 snapshot->resize(num_modules + 8, NULL);
690 } 690 }
691 } while (--retries_remaining); 691 } while (--retries_remaining);
692 692
693 DLOG(ERROR) << "Failed to enumerate modules."; 693 DLOG(ERROR) << "Failed to enumerate modules.";
694 return false; 694 return false;
695 } 695 }
696 696
697 } // namespace win 697 } // namespace win
698 } // namespace base 698 } // namespace base
OLDNEW
« no previous file with comments | « base/win/win_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698