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

Unified Diff: ui/views/widget/hwnd_message_handler.cc

Issue 10831394: 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/widget/hwnd_message_handler.h ('k') | ui/views/widget/hwnd_message_handler_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/widget/hwnd_message_handler.cc
===================================================================
--- ui/views/widget/hwnd_message_handler.cc (revision 152370)
+++ ui/views/widget/hwnd_message_handler.cc (working copy)
@@ -4,7 +4,10 @@
#include "ui/views/widget/hwnd_message_handler.h"
+#include <dwmapi.h>
+
#include "base/system_monitor/system_monitor.h"
+#include "ui/gfx/path.h"
#include "ui/base/native_theme/native_theme_win.h"
#include "ui/views/ime/input_method_win.h"
#include "ui/views/widget/hwnd_message_handler_delegate.h"
@@ -132,6 +135,24 @@
return result;
}
+void HWNDMessageHandler::OnInitMenu(HMENU menu) {
+ bool is_fullscreen = delegate_->AsNativeWidgetWin()->IsFullscreen();
+ bool is_minimized = delegate_->AsNativeWidgetWin()->IsMinimized();
+ bool is_maximized = delegate_->AsNativeWidgetWin()->IsMaximized();
+ bool is_restored = !is_fullscreen && !is_minimized && !is_maximized;
+
+ EnableMenuItem(menu, SC_RESTORE, is_minimized || is_maximized);
+ EnableMenuItem(menu, SC_MOVE, is_restored);
+ EnableMenuItem(menu, SC_SIZE, delegate_->CanResize() && is_restored);
+ EnableMenuItem(menu, SC_MAXIMIZE, delegate_->CanMaximize() &&
+ !is_fullscreen && !is_maximized);
+ EnableMenuItem(menu, SC_MINIMIZE, delegate_->CanMaximize() && !is_minimized);
+}
+
+void HWNDMessageHandler::OnInitMenuPopup() {
+ SetMsgHandled(FALSE);
+}
+
void HWNDMessageHandler::OnInputLangChange(DWORD character_set,
HKL input_language_id) {
InputMethod* input_method = delegate_->GetInputMethod();
@@ -141,6 +162,28 @@
}
}
+LRESULT HWNDMessageHandler::OnKeyEvent(UINT message,
+ WPARAM w_param,
+ LPARAM l_param) {
+ MSG msg = { hwnd(), message, w_param, l_param };
+ ui::KeyEvent key(msg, message == WM_CHAR);
+ InputMethod* input_method = delegate_->GetInputMethod();
+ if (input_method)
+ input_method->DispatchKeyEvent(key);
+ else
+ delegate_->AsNativeWidgetWin()->DispatchKeyEventPostIME(key);
+ return 0;
+}
+
+void HWNDMessageHandler::OnKillFocus(HWND focused_window) {
+ delegate_->HandleNativeBlur(focused_window);
+
+ InputMethod* input_method = delegate_->GetInputMethod();
+ if (input_method)
+ input_method->OnBlur();
+ SetMsgHandled(FALSE);
+}
+
void HWNDMessageHandler::OnMove(const CPoint& point) {
delegate_->HandleMove();
SetMsgHandled(FALSE);
@@ -150,6 +193,36 @@
delegate_->HandleMove();
}
+LRESULT HWNDMessageHandler::OnNCHitTest(const CPoint& point) {
+ if (!delegate_->IsWidgetWindow()) {
+ SetMsgHandled(FALSE);
+ return 0;
+ }
+
+ // If the DWM is rendering the window controls, we need to give the DWM's
+ // default window procedure first chance to handle hit testing.
+ if (!remove_standard_frame_ && !delegate_->IsUsingCustomFrame()) {
+ LRESULT result;
+ if (DwmDefWindowProc(hwnd(), WM_NCHITTEST, 0,
+ MAKELPARAM(point.x, point.y), &result)) {
+ return result;
+ }
+ }
+
+ // First, give the NonClientView a chance to test the point to see if it
+ // provides any of the non-client area.
+ POINT temp = point;
+ MapWindowPoints(HWND_DESKTOP, hwnd(), &temp, 1);
+ int component = delegate_->GetNonClientComponent(gfx::Point(temp));
+ if (component != HTNOWHERE)
+ return component;
+
+ // Otherwise, we let Windows do all the native frame non-client handling for
+ // us.
+ SetMsgHandled(FALSE);
+ return 0;
+}
+
LRESULT HWNDMessageHandler::OnNCUAHDrawCaption(UINT message,
WPARAM w_param,
LPARAM l_param) {
@@ -176,6 +249,37 @@
return 0;
}
+LRESULT HWNDMessageHandler::OnSetCursor(UINT message,
+ WPARAM w_param,
+ LPARAM l_param) {
+ // Using ScopedRedrawLock here frequently allows content behind this window to
+ // paint in front of this window, causing glaring rendering artifacts.
+ // If omitting ScopedRedrawLock here triggers caption rendering artifacts via
+ // DefWindowProc message handling, we'll need to find a better solution.
+ SetMsgHandled(FALSE);
+ return 0;
+}
+
+void HWNDMessageHandler::OnSetFocus(HWND last_focused_window) {
+ delegate_->HandleNativeFocus(last_focused_window);
+ InputMethod* input_method = delegate_->GetInputMethod();
+ if (input_method)
+ input_method->OnFocus();
+ SetMsgHandled(FALSE);
+}
+
+LRESULT HWNDMessageHandler::OnSetIcon(UINT size_type, HICON new_icon) {
+ // Use a ScopedRedrawLock to avoid weird non-client painting.
+ return DefWindowProcWithRedrawLock(WM_SETICON, size_type,
+ reinterpret_cast<LPARAM>(new_icon));
+}
+
+LRESULT HWNDMessageHandler::OnSetText(const wchar_t* text) {
+ // Use a ScopedRedrawLock to avoid weird non-client painting.
+ return DefWindowProcWithRedrawLock(WM_SETTEXT, NULL,
+ reinterpret_cast<LPARAM>(text));
+}
+
void HWNDMessageHandler::OnThemeChanged() {
ui::NativeThemeWin::instance()->CloseHandles();
}
« no previous file with comments | « ui/views/widget/hwnd_message_handler.h ('k') | ui/views/widget/hwnd_message_handler_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698