michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- michael@0: * vim: sw=2 ts=2 et : michael@0: */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef IPC_GLUE_WINDOWSMESSAGELOOP_H michael@0: #define IPC_GLUE_WINDOWSMESSAGELOOP_H michael@0: michael@0: // This file is only meant to compile on windows michael@0: #include michael@0: michael@0: #include "base/basictypes.h" michael@0: #include "nsISupportsImpl.h" michael@0: michael@0: namespace mozilla { michael@0: namespace ipc { michael@0: namespace windows { michael@0: michael@0: void InitUIThread(); michael@0: michael@0: class DeferredMessage michael@0: { michael@0: public: michael@0: DeferredMessage() michael@0: { michael@0: MOZ_COUNT_CTOR(DeferredMessage); michael@0: } michael@0: michael@0: virtual ~DeferredMessage() michael@0: { michael@0: MOZ_COUNT_DTOR(DeferredMessage); michael@0: } michael@0: michael@0: virtual void Run() = 0; michael@0: }; michael@0: michael@0: // Uses CallWndProc to deliver a message at a later time. Messages faked with michael@0: // this class must not have pointers in their wParam or lParam members as they michael@0: // may be invalid by the time the message actually runs. michael@0: class DeferredSendMessage : public DeferredMessage michael@0: { michael@0: public: michael@0: DeferredSendMessage(HWND aHWnd, michael@0: UINT aMessage, michael@0: WPARAM aWParam, michael@0: LPARAM aLParam) michael@0: : hWnd(aHWnd), michael@0: message(aMessage), michael@0: wParam(aWParam), michael@0: lParam(aLParam) michael@0: { } michael@0: michael@0: virtual void Run(); michael@0: michael@0: protected: michael@0: HWND hWnd; michael@0: UINT message; michael@0: WPARAM wParam; michael@0: LPARAM lParam; michael@0: }; michael@0: michael@0: // Uses RedrawWindow to fake several painting-related messages. Flags passed michael@0: // to the constructor go directly to RedrawWindow. michael@0: class DeferredRedrawMessage : public DeferredMessage michael@0: { michael@0: public: michael@0: DeferredRedrawMessage(HWND aHWnd, michael@0: UINT aFlags) michael@0: : hWnd(aHWnd), michael@0: flags(aFlags) michael@0: { } michael@0: michael@0: virtual void Run(); michael@0: michael@0: private: michael@0: HWND hWnd; michael@0: UINT flags; michael@0: }; michael@0: michael@0: // Uses UpdateWindow to generate a WM_PAINT message if needed. michael@0: class DeferredUpdateMessage : public DeferredMessage michael@0: { michael@0: public: michael@0: DeferredUpdateMessage(HWND aHWnd); michael@0: michael@0: virtual void Run(); michael@0: michael@0: private: michael@0: HWND mWnd; michael@0: RECT mUpdateRect; michael@0: }; michael@0: michael@0: // This class duplicates a string that may exist in the lParam member of the michael@0: // message. michael@0: class DeferredSettingChangeMessage : public DeferredSendMessage michael@0: { michael@0: public: michael@0: DeferredSettingChangeMessage(HWND aHWnd, michael@0: UINT aMessage, michael@0: WPARAM aWParam, michael@0: LPARAM aLParam); michael@0: michael@0: ~DeferredSettingChangeMessage(); michael@0: private: michael@0: wchar_t* lParamString; michael@0: }; michael@0: michael@0: // This class uses SetWindowPos to fake various size-related messages. Flags michael@0: // passed to the constructor go straight through to SetWindowPos. michael@0: class DeferredWindowPosMessage : public DeferredMessage michael@0: { michael@0: public: michael@0: DeferredWindowPosMessage(HWND aHWnd, michael@0: LPARAM aLParam, michael@0: bool aForCalcSize = false, michael@0: WPARAM aWParam = 0); michael@0: michael@0: virtual void Run(); michael@0: michael@0: private: michael@0: WINDOWPOS windowPos; michael@0: }; michael@0: michael@0: // This class duplicates a data buffer for a WM_COPYDATA message. michael@0: class DeferredCopyDataMessage : public DeferredSendMessage michael@0: { michael@0: public: michael@0: DeferredCopyDataMessage(HWND aHWnd, michael@0: UINT aMessage, michael@0: WPARAM aWParam, michael@0: LPARAM aLParam); michael@0: michael@0: ~DeferredCopyDataMessage(); michael@0: private: michael@0: COPYDATASTRUCT copyData; michael@0: }; michael@0: michael@0: class DeferredStyleChangeMessage : public DeferredMessage michael@0: { michael@0: public: michael@0: DeferredStyleChangeMessage(HWND aHWnd, michael@0: WPARAM aWParam, michael@0: LPARAM aLParam); michael@0: michael@0: virtual void Run(); michael@0: michael@0: private: michael@0: HWND hWnd; michael@0: int index; michael@0: LONG_PTR style; michael@0: }; michael@0: michael@0: class DeferredSetIconMessage : public DeferredSendMessage michael@0: { michael@0: public: michael@0: DeferredSetIconMessage(HWND aHWnd, michael@0: UINT aMessage, michael@0: WPARAM aWParam, michael@0: LPARAM aLParam); michael@0: michael@0: virtual void Run(); michael@0: }; michael@0: michael@0: } /* namespace windows */ michael@0: } /* namespace ipc */ michael@0: } /* namespace mozilla */ michael@0: michael@0: #endif /* IPC_GLUE_WINDOWSMESSAGELOOP_H */