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

Side by Side Diff: ui/views/widget/native_widget_win.cc

Issue 10827422: Move more message handlers from NativeWidgetWin to HWNDMessageHandler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 4 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 | « ui/views/widget/native_widget_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) 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 "ui/views/widget/native_widget_win.h" 5 #include "ui/views/widget/native_widget_win.h"
6 6
7 #include <dwmapi.h> 7 #include <dwmapi.h>
8 #include <shellapi.h> 8 #include <shellapi.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/system_monitor/system_monitor.h"
15 #include "base/win/scoped_gdi_object.h" 14 #include "base/win/scoped_gdi_object.h"
16 #include "base/win/win_util.h" 15 #include "base/win/win_util.h"
17 #include "base/win/windows_version.h" 16 #include "base/win/windows_version.h"
18 #include "ui/base/dragdrop/drag_drop_types.h" 17 #include "ui/base/dragdrop/drag_drop_types.h"
19 #include "ui/base/dragdrop/drag_source.h" 18 #include "ui/base/dragdrop/drag_source.h"
20 #include "ui/base/dragdrop/os_exchange_data.h" 19 #include "ui/base/dragdrop/os_exchange_data.h"
21 #include "ui/base/dragdrop/os_exchange_data_provider_win.h" 20 #include "ui/base/dragdrop/os_exchange_data_provider_win.h"
22 #include "ui/base/event.h" 21 #include "ui/base/event.h"
23 #include "ui/base/keycodes/keyboard_code_conversion_win.h" 22 #include "ui/base/keycodes/keyboard_code_conversion_win.h"
24 #include "ui/base/l10n/l10n_util_win.h" 23 #include "ui/base/l10n/l10n_util_win.h"
25 #include "ui/base/native_theme/native_theme_win.h"
26 #include "ui/base/theme_provider.h" 24 #include "ui/base/theme_provider.h"
27 #include "ui/base/view_prop.h" 25 #include "ui/base/view_prop.h"
28 #include "ui/base/win/hwnd_util.h" 26 #include "ui/base/win/hwnd_util.h"
29 #include "ui/base/win/mouse_wheel_util.h" 27 #include "ui/base/win/mouse_wheel_util.h"
30 #include "ui/gfx/canvas.h" 28 #include "ui/gfx/canvas.h"
31 #include "ui/gfx/canvas_paint.h" 29 #include "ui/gfx/canvas_paint.h"
32 #include "ui/gfx/canvas_skia_paint.h" 30 #include "ui/gfx/canvas_skia_paint.h"
33 #include "ui/gfx/icon_util.h" 31 #include "ui/gfx/icon_util.h"
34 #include "ui/gfx/path.h" 32 #include "ui/gfx/path.h"
35 #include "ui/gfx/screen.h" 33 #include "ui/gfx/screen.h"
(...skipping 1416 matching lines...) Expand 10 before | Expand all | Expand 10 after
1452 1450
1453 void NativeWidgetWin::OnHScroll(int scroll_type, 1451 void NativeWidgetWin::OnHScroll(int scroll_type,
1454 short position, 1452 short position,
1455 HWND scrollbar) { 1453 HWND scrollbar) {
1456 SetMsgHandled(FALSE); 1454 SetMsgHandled(FALSE);
1457 } 1455 }
1458 1456
1459 LRESULT NativeWidgetWin::OnImeMessages(UINT message, 1457 LRESULT NativeWidgetWin::OnImeMessages(UINT message,
1460 WPARAM w_param, 1458 WPARAM w_param,
1461 LPARAM l_param) { 1459 LPARAM l_param) {
1462 InputMethod* input_method = GetWidget()->GetInputMethodDirect(); 1460 return message_handler_->OnImeMessages(message, w_param, l_param);
1463 if (!input_method || input_method->IsMock()) {
1464 SetMsgHandled(FALSE);
1465 return 0;
1466 }
1467
1468 InputMethodWin* ime_win = static_cast<InputMethodWin*>(input_method);
1469 BOOL handled = FALSE;
1470 LRESULT result = ime_win->OnImeMessages(message, w_param, l_param, &handled);
1471
1472 SetMsgHandled(handled);
1473 return result;
1474 } 1461 }
1475 1462
1476 void NativeWidgetWin::OnInitMenu(HMENU menu) { 1463 void NativeWidgetWin::OnInitMenu(HMENU menu) {
1477 bool is_fullscreen = IsFullscreen(); 1464 bool is_fullscreen = IsFullscreen();
1478 bool is_minimized = IsMinimized(); 1465 bool is_minimized = IsMinimized();
1479 bool is_maximized = IsMaximized(); 1466 bool is_maximized = IsMaximized();
1480 bool is_restored = !is_fullscreen && !is_minimized && !is_maximized; 1467 bool is_restored = !is_fullscreen && !is_minimized && !is_maximized;
1481 1468
1482 ScopedRedrawLock lock(this); 1469 ScopedRedrawLock lock(this);
1483 EnableMenuItem(menu, SC_RESTORE, is_minimized || is_maximized); 1470 EnableMenuItem(menu, SC_RESTORE, is_minimized || is_maximized);
1484 EnableMenuItem(menu, SC_MOVE, is_restored); 1471 EnableMenuItem(menu, SC_MOVE, is_restored);
1485 EnableMenuItem(menu, SC_SIZE, 1472 EnableMenuItem(menu, SC_SIZE,
1486 GetWidget()->widget_delegate()->CanResize() && is_restored); 1473 GetWidget()->widget_delegate()->CanResize() && is_restored);
1487 EnableMenuItem(menu, SC_MAXIMIZE, 1474 EnableMenuItem(menu, SC_MAXIMIZE,
1488 GetWidget()->widget_delegate()->CanMaximize() && 1475 GetWidget()->widget_delegate()->CanMaximize() &&
1489 !is_fullscreen && !is_maximized); 1476 !is_fullscreen && !is_maximized);
1490 EnableMenuItem(menu, SC_MINIMIZE, 1477 EnableMenuItem(menu, SC_MINIMIZE,
1491 GetWidget()->widget_delegate()->CanMaximize() && 1478 GetWidget()->widget_delegate()->CanMaximize() &&
1492 !is_minimized); 1479 !is_minimized);
1493 } 1480 }
1494 1481
1495 void NativeWidgetWin::OnInitMenuPopup(HMENU menu, 1482 void NativeWidgetWin::OnInitMenuPopup(HMENU menu,
1496 UINT position, 1483 UINT position,
1497 BOOL is_system_menu) { 1484 BOOL is_system_menu) {
1498 SetMsgHandled(FALSE); 1485 SetMsgHandled(FALSE);
1499 } 1486 }
1500 1487
1501 void NativeWidgetWin::OnInputLangChange(DWORD character_set, 1488 void NativeWidgetWin::OnInputLangChange(DWORD character_set,
1502 HKL input_language_id) { 1489 HKL input_language_id) {
1503 InputMethod* input_method = GetWidget()->GetInputMethodDirect(); 1490 message_handler_->OnInputLangChange(character_set, input_language_id);
1504
1505 if (input_method && !input_method->IsMock()) {
1506 static_cast<InputMethodWin*>(input_method)->OnInputLangChange(
1507 character_set, input_language_id);
1508 }
1509 } 1491 }
1510 1492
1511 LRESULT NativeWidgetWin::OnKeyEvent(UINT message, 1493 LRESULT NativeWidgetWin::OnKeyEvent(UINT message,
1512 WPARAM w_param, 1494 WPARAM w_param,
1513 LPARAM l_param) { 1495 LPARAM l_param) {
1514 MSG msg = { hwnd(), message, w_param, l_param }; 1496 MSG msg = { hwnd(), message, w_param, l_param };
1515 ui::KeyEvent key(msg, message == WM_CHAR); 1497 ui::KeyEvent key(msg, message == WM_CHAR);
1516 InputMethod* input_method = GetWidget()->GetInputMethodDirect(); 1498 InputMethod* input_method = GetWidget()->GetInputMethodDirect();
1517 if (input_method) 1499 if (input_method)
1518 input_method->DispatchKeyEvent(key); 1500 input_method->DispatchKeyEvent(key);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1627 // side-effects (ex/ stifling non-client mouse releases). 1609 // side-effects (ex/ stifling non-client mouse releases).
1628 DefWindowProcWithRedrawLock(message, w_param, l_param); 1610 DefWindowProcWithRedrawLock(message, w_param, l_param);
1629 handled = true; 1611 handled = true;
1630 } 1612 }
1631 1613
1632 SetMsgHandled(handled); 1614 SetMsgHandled(handled);
1633 return 0; 1615 return 0;
1634 } 1616 }
1635 1617
1636 void NativeWidgetWin::OnMove(const CPoint& point) { 1618 void NativeWidgetWin::OnMove(const CPoint& point) {
1637 delegate_->OnNativeWidgetMove(); 1619 message_handler_->OnMove(point);
1638 SetMsgHandled(FALSE);
1639 } 1620 }
1640 1621
1641 void NativeWidgetWin::OnMoving(UINT param, const LPRECT new_bounds) { 1622 void NativeWidgetWin::OnMoving(UINT param, const LPRECT new_bounds) {
1642 delegate_->OnNativeWidgetMove(); 1623 message_handler_->OnMoving(param, new_bounds);
1643 } 1624 }
1644 1625
1645 LRESULT NativeWidgetWin::OnNCActivate(BOOL active) { 1626 LRESULT NativeWidgetWin::OnNCActivate(BOOL active) {
1646 if (delegate_->CanActivate()) 1627 if (delegate_->CanActivate())
1647 delegate_->OnNativeWidgetActivationChanged(!!active); 1628 delegate_->OnNativeWidgetActivationChanged(!!active);
1648 1629
1649 if (!GetWidget()->non_client_view()) { 1630 if (!GetWidget()->non_client_view()) {
1650 SetMsgHandled(FALSE); 1631 SetMsgHandled(FALSE);
1651 return 0; 1632 return 0;
1652 } 1633 }
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1882 1863
1883 ReleaseDC(GetNativeView(), dc); 1864 ReleaseDC(GetNativeView(), dc);
1884 // When using a custom frame, we want to avoid calling DefWindowProc() since 1865 // When using a custom frame, we want to avoid calling DefWindowProc() since
1885 // that may render artifacts. 1866 // that may render artifacts.
1886 SetMsgHandled(!GetWidget()->ShouldUseNativeFrame()); 1867 SetMsgHandled(!GetWidget()->ShouldUseNativeFrame());
1887 } 1868 }
1888 1869
1889 LRESULT NativeWidgetWin::OnNCUAHDrawCaption(UINT msg, 1870 LRESULT NativeWidgetWin::OnNCUAHDrawCaption(UINT msg,
1890 WPARAM w_param, 1871 WPARAM w_param,
1891 LPARAM l_param) { 1872 LPARAM l_param) {
1892 // See comment in widget_win.h at the definition of WM_NCUAHDRAWCAPTION for 1873 return message_handler_->OnNCUAHDrawCaption(msg, w_param, l_param);
1893 // an explanation about why we need to handle this message.
1894 SetMsgHandled(!GetWidget()->ShouldUseNativeFrame());
1895 return 0;
1896 } 1874 }
1897 1875
1898 LRESULT NativeWidgetWin::OnNCUAHDrawFrame(UINT msg, 1876 LRESULT NativeWidgetWin::OnNCUAHDrawFrame(UINT msg,
1899 WPARAM w_param, 1877 WPARAM w_param,
1900 LPARAM l_param) { 1878 LPARAM l_param) {
1901 // See comment in widget_win.h at the definition of WM_NCUAHDRAWCAPTION for 1879 return message_handler_->OnNCUAHDrawFrame(msg, w_param, l_param);
1902 // an explanation about why we need to handle this message.
1903 SetMsgHandled(!GetWidget()->ShouldUseNativeFrame());
1904 return 0;
1905 } 1880 }
1906 1881
1907 LRESULT NativeWidgetWin::OnNotify(int w_param, NMHDR* l_param) { 1882 LRESULT NativeWidgetWin::OnNotify(int w_param, NMHDR* l_param) {
1908 // We can be sent this message before the tooltip manager is created, if a 1883 // We can be sent this message before the tooltip manager is created, if a
1909 // subclass overrides OnCreate and creates some kind of Windows control there 1884 // subclass overrides OnCreate and creates some kind of Windows control there
1910 // that sends WM_NOTIFY messages. 1885 // that sends WM_NOTIFY messages.
1911 if (tooltip_manager_.get()) { 1886 if (tooltip_manager_.get()) {
1912 bool handled; 1887 bool handled;
1913 LRESULT result = tooltip_manager_->OnNotify(w_param, l_param, &handled); 1888 LRESULT result = tooltip_manager_->OnNotify(w_param, l_param, &handled);
1914 SetMsgHandled(handled); 1889 SetMsgHandled(handled);
(...skipping 17 matching lines...) Expand all
1932 delegate_->OnNativeWidgetPaint(canvas->AsCanvas()); 1907 delegate_->OnNativeWidgetPaint(canvas->AsCanvas());
1933 } 1908 }
1934 } else { 1909 } else {
1935 // TODO(msw): Find a better solution for this crbug.com/93530 workaround. 1910 // TODO(msw): Find a better solution for this crbug.com/93530 workaround.
1936 // Some scenarios otherwise fail to validate minimized app/popup windows. 1911 // Some scenarios otherwise fail to validate minimized app/popup windows.
1937 ValidateRect(hwnd(), NULL); 1912 ValidateRect(hwnd(), NULL);
1938 } 1913 }
1939 } 1914 }
1940 1915
1941 LRESULT NativeWidgetWin::OnPowerBroadcast(DWORD power_event, DWORD data) { 1916 LRESULT NativeWidgetWin::OnPowerBroadcast(DWORD power_event, DWORD data) {
1942 base::SystemMonitor* monitor = base::SystemMonitor::Get(); 1917 return message_handler_->OnPowerBroadcast(power_event, data);
1943 if (monitor)
1944 monitor->ProcessWmPowerBroadcastMessage(power_event);
1945 SetMsgHandled(FALSE);
1946 return 0;
1947 } 1918 }
1948 1919
1949 LRESULT NativeWidgetWin::OnReflectedMessage(UINT msg, 1920 LRESULT NativeWidgetWin::OnReflectedMessage(UINT msg,
1950 WPARAM w_param, 1921 WPARAM w_param,
1951 LPARAM l_param) { 1922 LPARAM l_param) {
1952 SetMsgHandled(FALSE); 1923 SetMsgHandled(FALSE);
1953 return 0; 1924 return 0;
1954 } 1925 }
1955 1926
1956 LRESULT NativeWidgetWin::OnSetCursor(UINT message, 1927 LRESULT NativeWidgetWin::OnSetCursor(UINT message,
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
2052 } 2023 }
2053 2024
2054 // If the delegate can't handle it, the system implementation will be called. 2025 // If the delegate can't handle it, the system implementation will be called.
2055 if (!delegate_->ExecuteCommand(notification_code)) { 2026 if (!delegate_->ExecuteCommand(notification_code)) {
2056 DefWindowProc(GetNativeView(), WM_SYSCOMMAND, notification_code, 2027 DefWindowProc(GetNativeView(), WM_SYSCOMMAND, notification_code,
2057 MAKELPARAM(click.x, click.y)); 2028 MAKELPARAM(click.x, click.y));
2058 } 2029 }
2059 } 2030 }
2060 2031
2061 void NativeWidgetWin::OnThemeChanged() { 2032 void NativeWidgetWin::OnThemeChanged() {
2062 // Notify NativeThemeWin. 2033 message_handler_->OnThemeChanged();
2063 ui::NativeThemeWin::instance()->CloseHandles();
2064 } 2034 }
2065 2035
2066 LRESULT NativeWidgetWin::OnTouchEvent(UINT message, 2036 LRESULT NativeWidgetWin::OnTouchEvent(UINT message,
2067 WPARAM w_param, 2037 WPARAM w_param,
2068 LPARAM l_param) { 2038 LPARAM l_param) {
2069 int num_points = LOWORD(w_param); 2039 int num_points = LOWORD(w_param);
2070 scoped_array<TOUCHINPUT> input(new TOUCHINPUT[num_points]); 2040 scoped_array<TOUCHINPUT> input(new TOUCHINPUT[num_points]);
2071 if (GetTouchInputInfo(reinterpret_cast<HTOUCHINPUT>(l_param), 2041 if (GetTouchInputInfo(reinterpret_cast<HTOUCHINPUT>(l_param),
2072 num_points, input.get(), sizeof(TOUCHINPUT))) { 2042 num_points, input.get(), sizeof(TOUCHINPUT))) {
2073 for (int i = 0; i < num_points; ++i) { 2043 for (int i = 0; i < num_points; ++i) {
2074 if (input[i].dwFlags & TOUCHEVENTF_DOWN) 2044 if (input[i].dwFlags & TOUCHEVENTF_DOWN)
2075 touch_ids_.insert(input[i].dwID); 2045 touch_ids_.insert(input[i].dwID);
2076 if (input[i].dwFlags & TOUCHEVENTF_UP) 2046 if (input[i].dwFlags & TOUCHEVENTF_UP)
2077 touch_ids_.erase(input[i].dwID); 2047 touch_ids_.erase(input[i].dwID);
2078 } 2048 }
2079 } 2049 }
2080 CloseTouchInputHandle(reinterpret_cast<HTOUCHINPUT>(l_param)); 2050 CloseTouchInputHandle(reinterpret_cast<HTOUCHINPUT>(l_param));
2081 SetMsgHandled(FALSE); 2051 SetMsgHandled(FALSE);
2082 return 0; 2052 return 0;
2083 } 2053 }
2084 2054
2085 void NativeWidgetWin::OnVScroll(int scroll_type, 2055 void NativeWidgetWin::OnVScroll(int scroll_type,
2086 short position, 2056 short position,
2087 HWND scrollbar) { 2057 HWND scrollbar) {
2088 SetMsgHandled(FALSE); 2058 message_handler_->OnVScroll(scroll_type, position, scrollbar);
2089 } 2059 }
2090 2060
2091 void NativeWidgetWin::OnWindowPosChanging(WINDOWPOS* window_pos) { 2061 void NativeWidgetWin::OnWindowPosChanging(WINDOWPOS* window_pos) {
2092 if (ignore_window_pos_changes_) { 2062 if (ignore_window_pos_changes_) {
2093 // If somebody's trying to toggle our visibility, change the nonclient area, 2063 // If somebody's trying to toggle our visibility, change the nonclient area,
2094 // change our Z-order, or activate us, we should probably let it go through. 2064 // change our Z-order, or activate us, we should probably let it go through.
2095 if (!(window_pos->flags & ((IsVisible() ? SWP_HIDEWINDOW : SWP_SHOWWINDOW) | 2065 if (!(window_pos->flags & ((IsVisible() ? SWP_HIDEWINDOW : SWP_SHOWWINDOW) |
2096 SWP_FRAMECHANGED)) && 2066 SWP_FRAMECHANGED)) &&
2097 (window_pos->flags & (SWP_NOZORDER | SWP_NOACTIVATE))) { 2067 (window_pos->flags & (SWP_NOZORDER | SWP_NOACTIVATE))) {
2098 // Just sizing/moving the window; ignore. 2068 // Just sizing/moving the window; ignore.
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
2284 // NativeWidgetWin, HWNDMessageHandlerDelegate implementation: 2254 // NativeWidgetWin, HWNDMessageHandlerDelegate implementation:
2285 2255
2286 bool NativeWidgetWin::IsWidgetWindow() const { 2256 bool NativeWidgetWin::IsWidgetWindow() const {
2287 return !!GetWidget()->non_client_view(); 2257 return !!GetWidget()->non_client_view();
2288 } 2258 }
2289 2259
2290 bool NativeWidgetWin::IsUsingCustomFrame() const { 2260 bool NativeWidgetWin::IsUsingCustomFrame() const {
2291 return GetWidget()->ShouldUseNativeFrame(); 2261 return GetWidget()->ShouldUseNativeFrame();
2292 } 2262 }
2293 2263
2264 InputMethod* NativeWidgetWin::GetInputMethod() {
2265 return GetWidget()->GetInputMethodDirect();
2266 }
2267
2294 void NativeWidgetWin::HandleAppDeactivated() { 2268 void NativeWidgetWin::HandleAppDeactivated() {
2295 // Another application was activated, we should reset any state that 2269 // Another application was activated, we should reset any state that
2296 // disables inactive rendering now. 2270 // disables inactive rendering now.
2297 delegate_->EnableInactiveRendering(); 2271 delegate_->EnableInactiveRendering();
2298 } 2272 }
2299 2273
2300 bool NativeWidgetWin::HandleAppCommand(short command) { 2274 bool NativeWidgetWin::HandleAppCommand(short command) {
2301 // We treat APPCOMMAND ids as an extension of our command namespace, and just 2275 // We treat APPCOMMAND ids as an extension of our command namespace, and just
2302 // let the delegate figure out what to do... 2276 // let the delegate figure out what to do...
2303 return GetWidget()->widget_delegate() && 2277 return GetWidget()->widget_delegate() &&
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2339 } 2313 }
2340 2314
2341 void NativeWidgetWin::HandleBeginWMSizeMove() { 2315 void NativeWidgetWin::HandleBeginWMSizeMove() {
2342 delegate_->OnNativeWidgetBeginUserBoundsChange(); 2316 delegate_->OnNativeWidgetBeginUserBoundsChange();
2343 } 2317 }
2344 2318
2345 void NativeWidgetWin::HandleEndWMSizeMove() { 2319 void NativeWidgetWin::HandleEndWMSizeMove() {
2346 delegate_->OnNativeWidgetEndUserBoundsChange(); 2320 delegate_->OnNativeWidgetEndUserBoundsChange();
2347 } 2321 }
2348 2322
2323 void NativeWidgetWin::HandleMove() {
2324 delegate_->OnNativeWidgetMove();
2325 }
2326
2349 NativeWidgetWin* NativeWidgetWin::AsNativeWidgetWin() { 2327 NativeWidgetWin* NativeWidgetWin::AsNativeWidgetWin() {
2350 return this; 2328 return this;
2351 } 2329 }
2352 2330
2353 //////////////////////////////////////////////////////////////////////////////// 2331 ////////////////////////////////////////////////////////////////////////////////
2354 // NativeWidgetWin, private: 2332 // NativeWidgetWin, private:
2355 2333
2356 // static 2334 // static
2357 void NativeWidgetWin::PostProcessActivateMessage(NativeWidgetWin* widget, 2335 void NativeWidgetWin::PostProcessActivateMessage(NativeWidgetWin* widget,
2358 int activation_state) { 2336 int activation_state) {
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after
2808 // static 2786 // static
2809 bool NativeWidgetPrivate::IsTouchDown() { 2787 bool NativeWidgetPrivate::IsTouchDown() {
2810 // This currently isn't necessary because we're not generating touch events on 2788 // This currently isn't necessary because we're not generating touch events on
2811 // windows. When we do, this will need to be updated. 2789 // windows. When we do, this will need to be updated.
2812 return false; 2790 return false;
2813 } 2791 }
2814 2792
2815 } // namespace internal 2793 } // namespace internal
2816 2794
2817 } // namespace views 2795 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/native_widget_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698