1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef IPC_GLUE_WINDOWSMESSAGELOOP_H 8 #define IPC_GLUE_WINDOWSMESSAGELOOP_H 9 10 // This file is only meant to compile on windows 11 #include <windows.h> 12 13 #include "nsISupportsImpl.h" 14 15 namespace mozilla { 16 namespace ipc { 17 namespace windows { 18 19 void InitUIThread(); 20 21 class DeferredMessage { 22 public: 23 MOZ_COUNTED_DEFAULT_CTOR(DeferredMessage) 24 25 MOZ_COUNTED_DTOR_VIRTUAL(DeferredMessage) 26 27 virtual void Run() = 0; 28 }; 29 30 // Uses CallWndProc to deliver a message at a later time. Messages faked with 31 // this class must not have pointers in their wParam or lParam members as they 32 // may be invalid by the time the message actually runs. 33 class DeferredSendMessage : public DeferredMessage { 34 public: DeferredSendMessage(HWND aHWnd,UINT aMessage,WPARAM aWParam,LPARAM aLParam)35 DeferredSendMessage(HWND aHWnd, UINT aMessage, WPARAM aWParam, LPARAM aLParam) 36 : hWnd(aHWnd), message(aMessage), wParam(aWParam), lParam(aLParam) {} 37 38 virtual void Run(); 39 40 protected: 41 HWND hWnd; 42 UINT message; 43 WPARAM wParam; 44 LPARAM lParam; 45 }; 46 47 // Uses RedrawWindow to fake several painting-related messages. Flags passed 48 // to the constructor go directly to RedrawWindow. 49 class DeferredRedrawMessage : public DeferredMessage { 50 public: DeferredRedrawMessage(HWND aHWnd,UINT aFlags)51 DeferredRedrawMessage(HWND aHWnd, UINT aFlags) : hWnd(aHWnd), flags(aFlags) {} 52 53 virtual void Run(); 54 55 private: 56 HWND hWnd; 57 UINT flags; 58 }; 59 60 // Uses UpdateWindow to generate a WM_PAINT message if needed. 61 class DeferredUpdateMessage : public DeferredMessage { 62 public: 63 explicit DeferredUpdateMessage(HWND aHWnd); 64 65 virtual void Run(); 66 67 private: 68 HWND mWnd; 69 RECT mUpdateRect; 70 }; 71 72 // This class duplicates a string that may exist in the lParam member of the 73 // message. 74 class DeferredSettingChangeMessage : public DeferredSendMessage { 75 public: 76 DeferredSettingChangeMessage(HWND aHWnd, UINT aMessage, WPARAM aWParam, 77 LPARAM aLParam); 78 79 ~DeferredSettingChangeMessage(); 80 81 private: 82 wchar_t* lParamString; 83 }; 84 85 // This class uses SetWindowPos to fake various size-related messages. Flags 86 // passed to the constructor go straight through to SetWindowPos. 87 class DeferredWindowPosMessage : public DeferredMessage { 88 public: 89 DeferredWindowPosMessage(HWND aHWnd, LPARAM aLParam, 90 bool aForCalcSize = false, WPARAM aWParam = 0); 91 92 virtual void Run(); 93 94 private: 95 WINDOWPOS windowPos; 96 }; 97 98 // This class duplicates a data buffer for a WM_COPYDATA message. 99 class DeferredCopyDataMessage : public DeferredSendMessage { 100 public: 101 DeferredCopyDataMessage(HWND aHWnd, UINT aMessage, WPARAM aWParam, 102 LPARAM aLParam); 103 104 ~DeferredCopyDataMessage(); 105 106 private: 107 COPYDATASTRUCT copyData; 108 }; 109 110 class DeferredStyleChangeMessage : public DeferredMessage { 111 public: 112 DeferredStyleChangeMessage(HWND aHWnd, WPARAM aWParam, LPARAM aLParam); 113 114 virtual void Run(); 115 116 private: 117 HWND hWnd; 118 int index; 119 LONG_PTR style; 120 }; 121 122 class DeferredSetIconMessage : public DeferredSendMessage { 123 public: 124 DeferredSetIconMessage(HWND aHWnd, UINT aMessage, WPARAM aWParam, 125 LPARAM aLParam); 126 127 virtual void Run(); 128 }; 129 130 } /* namespace windows */ 131 } /* namespace ipc */ 132 } /* namespace mozilla */ 133 134 #endif /* IPC_GLUE_WINDOWSMESSAGELOOP_H */ 135