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

Unified Diff: base/message_pump_win.h

Issue 10826223: Replace PeekMessage for TSF awareness (Closed) Base URL: http://git.chromium.org/chromium/src.git@yukawa
Patch Set: nitpick Created 8 years, 3 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 | « base/message_loop.h ('k') | base/message_pump_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/message_pump_win.h
diff --git a/base/message_pump_win.h b/base/message_pump_win.h
index fd461988ed9527569ff66849983306c8c868e790..3ba8aa915f630534cc605e0f2305bdf8addfbf02 100644
--- a/base/message_pump_win.h
+++ b/base/message_pump_win.h
@@ -11,6 +11,7 @@
#include "base/base_export.h"
#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
#include "base/message_pump.h"
#include "base/message_pump_dispatcher.h"
#include "base/message_pump_observer.h"
@@ -126,12 +127,44 @@ class BASE_EXPORT MessagePumpWin : public MessagePump {
//
class BASE_EXPORT MessagePumpForUI : public MessagePumpWin {
public:
+ // A MessageFilter implements the common Peek/Translate/Dispatch code to deal
+ // with windows messages.
+ // This abstraction is used to inject TSF message peeking. See
+ // TextServicesMessageFilter.
+ class BASE_EXPORT MessageFilter {
+ public:
+ virtual ~MessageFilter() {}
+ // Implements the functionality exposed by the OS through PeekMessage.
+ virtual BOOL DoPeekMessage(MSG* msg,
+ HWND window_handle,
+ UINT msg_filter_min,
+ UINT msg_filter_max,
+ UINT remove_msg) {
+ return PeekMessage(msg, window_handle, msg_filter_min, msg_filter_max,
+ remove_msg);
+ }
+ // Returns true if |message| was consumed by the filter and no extra
+ // processing is required. If this method returns false, it is the
+ // responsibility of the caller to ensure that normal processing takes
+ // place.
+ // The priority to consume messages is the following:
+ // - Native Windows' message filter (CallMsgFilter).
+ // - MessageFilter::ProcessMessage.
+ // - MessagePumpDispatcher.
+ // - TranslateMessage / DispatchMessage.
+ virtual bool ProcessMessage(const MSG& msg) { return false;}
+ };
// The application-defined code passed to the hook procedure.
static const int kMessageFilterCode = 0x5001;
MessagePumpForUI();
virtual ~MessagePumpForUI();
+ // Sets a new MessageFilter. MessagePumpForUI takes ownership of
+ // |message_filter|. When SetMessageFilter is called, old MessageFilter is
+ // deleted.
+ void SetMessageFilter(scoped_ptr<MessageFilter> message_filter);
+
// MessagePump methods:
virtual void ScheduleWork();
virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time);
@@ -142,8 +175,10 @@ class BASE_EXPORT MessagePumpForUI : public MessagePumpWin {
void PumpOutPendingPaintMessages();
private:
- static LRESULT CALLBACK WndProcThunk(
- HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
+ static LRESULT CALLBACK WndProcThunk(HWND window_handle,
+ UINT message,
+ WPARAM wparam,
+ LPARAM lparam);
virtual void DoRunLoop();
void InitMessageWnd();
void WaitForWork();
@@ -158,6 +193,8 @@ class BASE_EXPORT MessagePumpForUI : public MessagePumpWin {
// A hidden message-only window.
HWND message_hwnd_;
+
+ scoped_ptr<MessageFilter> message_filter_;
};
//-----------------------------------------------------------------------------
« no previous file with comments | « base/message_loop.h ('k') | base/message_pump_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698