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

Side by Side Diff: webkit/tools/test_shell/foreground_helper.h

Issue 115309: Remove even more ATL dependencies. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « views/window/window_win.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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 <atlbase.h> 5 #include <atlbase.h>
6 #include <atlwin.h> 6 #include <atlwin.h>
7 7
8 #include "base/logging.h" 8 #include "base/logging.h"
9 9
10 // Helper class for moving a window to the foreground. 10 // Helper class for moving a window to the foreground.
11 // Windows XP and later will not allow a window which is in the background to 11 // Windows XP and later will not allow a window which is in the background to
12 // move to the foreground, unless requested by the current window in the 12 // move to the foreground, unless requested by the current window in the
13 // foreground. For automated testing, we really want some of our windows 13 // foreground. For automated testing, we really want some of our windows
14 // to be capable of moving to the foreground. 14 // to be capable of moving to the foreground.
15 // 15 //
16 // This is probably leveraging a windows bug. 16 // This is probably leveraging a windows bug.
17 class ForegroundHelper : public CWindowImpl<ForegroundHelper> { 17 class ForegroundHelper : public CWindowImpl<ForegroundHelper> {
18 public: 18 public:
19 BEGIN_MSG_MAP(ForegroundHelper) 19 BEGIN_MSG_MAP(ForegroundHelper)
20 MESSAGE_HANDLER(WM_HOTKEY, OnHotKey) 20 MESSAGE_HANDLER(WM_HOTKEY, OnHotKey)
21 END_MSG_MAP() 21 END_MSG_MAP()
22 22
23 // Brings a window into the foreground. 23 // Brings a window into the foreground.
24 // Can be called from any window, even if the caller is not the 24 // Can be called from any window, even if the caller is not the
25 // foreground window. 25 // foreground window.
26 static HRESULT SetForeground(HWND window) { 26 static HRESULT SetForeground(HWND window) {
27 DCHECK(::IsWindow(window)); 27 DCHECK(::IsWindow(window));
28 ForegroundHelper foreground_helper; 28 ForegroundHelper foreground_helper;
29 CHECK(foreground_helper.ForegroundHotKey(window) == S_OK); 29 CHECK(foreground_helper.ForegroundHotKey(window) == S_OK);
30 return S_OK; 30 return S_OK;
31 } 31 }
32 32
33 private: 33 private:
34 HRESULT ForegroundHotKey(HWND window) { 34 HRESULT ForegroundHotKey(HWND window) {
35 // This implementation registers a hot key (F22) and then 35 // This implementation registers a hot key (F22) and then
36 // triggers the hot key. When receiving the hot key, we'll 36 // triggers the hot key. When receiving the hot key, we'll
37 // be in the foreground and allowed to move the target window 37 // be in the foreground and allowed to move the target window
38 // into the foreground too. 38 // into the foreground too.
39 39
40 if(NULL == Create(NULL, NULL, NULL, WS_POPUP)) 40 if (NULL == Create(NULL, NULL, NULL, WS_POPUP))
41 return AtlHresultFromLastError(); 41 return AtlHresultFromLastError();
42 42
43 static const int hotkey_id = 0x0000baba; 43 static const int hotkey_id = 0x0000baba;
44 44
45 // Store the target window into our USERDATA for use in our 45 // Store the target window into our USERDATA for use in our
46 // HotKey handler. 46 // HotKey handler.
47 SetWindowLongPtr(GWLP_USERDATA, reinterpret_cast<ULONG_PTR>(window)); 47 SetWindowLongPtr(GWLP_USERDATA, reinterpret_cast<ULONG_PTR>(window));
48 RegisterHotKey(m_hWnd, hotkey_id, 0, VK_F22); 48 RegisterHotKey(m_hWnd, hotkey_id, 0, VK_F22);
49 49
50 // If the calling thread is not yet a UI thread, call PeekMessage 50 // If the calling thread is not yet a UI thread, call PeekMessage
51 // to ensure creation of its message queue. 51 // to ensure creation of its message queue.
52 MSG msg = {0}; 52 MSG msg = {0};
53 PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE); 53 PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
54 54
55 // Send the Hotkey. 55 // Send the Hotkey.
56 INPUT hotkey = {0}; 56 INPUT hotkey = {0};
57 hotkey.type = INPUT_KEYBOARD; 57 hotkey.type = INPUT_KEYBOARD;
58 hotkey.ki.wVk = VK_F22; 58 hotkey.ki.wVk = VK_F22;
59 if (1 != SendInput(1, &hotkey, sizeof(hotkey))) 59 if (1 != SendInput(1, &hotkey, sizeof(hotkey)))
60 return E_FAIL; 60 return E_FAIL;
61 61
62 // Loop until we get the key. 62 // Loop until we get the key.
63 // TODO: It may be possible to get stuck here if the 63 // TODO: It may be possible to get stuck here if the
64 // message gets lost? 64 // message gets lost?
65 while(GetMessage(&msg, NULL, 0, 0)) { 65 while (GetMessage(&msg, NULL, 0, 0)) {
66 TranslateMessage(&msg); 66 TranslateMessage(&msg);
67 DispatchMessage(&msg); 67 DispatchMessage(&msg);
68 68
69 if(WM_HOTKEY == msg.message) 69 if (WM_HOTKEY == msg.message)
70 break; 70 break;
71 } 71 }
72 72
73 UnregisterHotKey(m_hWnd, hotkey_id); 73 UnregisterHotKey(m_hWnd, hotkey_id);
74 DestroyWindow(); 74 DestroyWindow();
75 75
76 return S_OK; 76 return S_OK;
77 } 77 }
78 78
79 // Handle the registered Hotkey being pressed. 79 // Handle the registered Hotkey being pressed.
80 LRESULT OnHotKey(UINT /*uMsg*/, WPARAM /*wParam*/, 80 LRESULT OnHotKey(UINT message,
81 » » LPARAM /*lParam*/, BOOL& bHandled) { 81 WPARAM wparam,
82 LPARAM lparam,
83 BOOL& handled) {
82 HWND window = reinterpret_cast<HWND>(GetWindowLongPtr(GWLP_USERDATA)); 84 HWND window = reinterpret_cast<HWND>(GetWindowLongPtr(GWLP_USERDATA));
83 SetForegroundWindow(window); 85 SetForegroundWindow(window);
84 return 1; 86 return 1;
85 } 87 }
86 }; 88 };
OLDNEW
« no previous file with comments | « views/window/window_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698