ipc/glue/WindowsMessageLoop.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/ipc/glue/WindowsMessageLoop.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,170 @@
     1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
     1.5 + * vim: sw=2 ts=2 et :
     1.6 + */
     1.7 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.8 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.9 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
    1.10 +
    1.11 +#ifndef IPC_GLUE_WINDOWSMESSAGELOOP_H
    1.12 +#define IPC_GLUE_WINDOWSMESSAGELOOP_H
    1.13 +
    1.14 +// This file is only meant to compile on windows
    1.15 +#include <windows.h>
    1.16 +
    1.17 +#include "base/basictypes.h"
    1.18 +#include "nsISupportsImpl.h"
    1.19 +
    1.20 +namespace mozilla {
    1.21 +namespace ipc {
    1.22 +namespace windows {
    1.23 +
    1.24 +void InitUIThread();
    1.25 +
    1.26 +class DeferredMessage
    1.27 +{
    1.28 +public:
    1.29 +  DeferredMessage()
    1.30 +  {
    1.31 +    MOZ_COUNT_CTOR(DeferredMessage);
    1.32 +  }
    1.33 +
    1.34 +  virtual ~DeferredMessage()
    1.35 +  {
    1.36 +    MOZ_COUNT_DTOR(DeferredMessage);
    1.37 +  }
    1.38 +
    1.39 +  virtual void Run() = 0;
    1.40 +};
    1.41 +
    1.42 +// Uses CallWndProc to deliver a message at a later time. Messages faked with
    1.43 +// this class must not have pointers in their wParam or lParam members as they
    1.44 +// may be invalid by the time the message actually runs.
    1.45 +class DeferredSendMessage : public DeferredMessage
    1.46 +{
    1.47 +public:
    1.48 +  DeferredSendMessage(HWND aHWnd,
    1.49 +                      UINT aMessage,
    1.50 +                      WPARAM aWParam,
    1.51 +                      LPARAM aLParam)
    1.52 +    : hWnd(aHWnd),
    1.53 +      message(aMessage),
    1.54 +      wParam(aWParam),
    1.55 +      lParam(aLParam)
    1.56 +  { }
    1.57 +
    1.58 +  virtual void Run();
    1.59 +
    1.60 +protected:
    1.61 +    HWND hWnd;
    1.62 +    UINT message;
    1.63 +    WPARAM wParam;
    1.64 +    LPARAM lParam;
    1.65 +};
    1.66 +
    1.67 +// Uses RedrawWindow to fake several painting-related messages. Flags passed
    1.68 +// to the constructor go directly to RedrawWindow.
    1.69 +class DeferredRedrawMessage : public DeferredMessage
    1.70 +{
    1.71 +public:
    1.72 +  DeferredRedrawMessage(HWND aHWnd,
    1.73 +                        UINT aFlags)
    1.74 +    : hWnd(aHWnd),
    1.75 +      flags(aFlags)
    1.76 +  { }
    1.77 +
    1.78 +  virtual void Run();
    1.79 +
    1.80 +private:
    1.81 +  HWND hWnd;
    1.82 +  UINT flags;
    1.83 +};
    1.84 +
    1.85 +// Uses UpdateWindow to generate a WM_PAINT message if needed.
    1.86 +class DeferredUpdateMessage : public DeferredMessage
    1.87 +{
    1.88 +public:
    1.89 +  DeferredUpdateMessage(HWND aHWnd);
    1.90 +
    1.91 +  virtual void Run();
    1.92 +
    1.93 +private:
    1.94 +  HWND mWnd;
    1.95 +  RECT mUpdateRect;
    1.96 +};
    1.97 +
    1.98 +// This class duplicates a string that may exist in the lParam member of the
    1.99 +// message.
   1.100 +class DeferredSettingChangeMessage : public DeferredSendMessage
   1.101 +{
   1.102 +public:
   1.103 +  DeferredSettingChangeMessage(HWND aHWnd,
   1.104 +                               UINT aMessage,
   1.105 +                               WPARAM aWParam,
   1.106 +                               LPARAM aLParam);
   1.107 +
   1.108 +  ~DeferredSettingChangeMessage();
   1.109 +private:
   1.110 +  wchar_t* lParamString;
   1.111 +};
   1.112 +
   1.113 +// This class uses SetWindowPos to fake various size-related messages. Flags
   1.114 +// passed to the constructor go straight through to SetWindowPos.
   1.115 +class DeferredWindowPosMessage : public DeferredMessage
   1.116 +{
   1.117 +public:
   1.118 +  DeferredWindowPosMessage(HWND aHWnd,
   1.119 +                           LPARAM aLParam,
   1.120 +                           bool aForCalcSize = false,
   1.121 +                           WPARAM aWParam = 0);
   1.122 +
   1.123 +  virtual void Run();
   1.124 +
   1.125 +private:
   1.126 +  WINDOWPOS windowPos;
   1.127 +};
   1.128 +
   1.129 +// This class duplicates a data buffer for a WM_COPYDATA message.
   1.130 +class DeferredCopyDataMessage : public DeferredSendMessage
   1.131 +{
   1.132 +public:
   1.133 +  DeferredCopyDataMessage(HWND aHWnd,
   1.134 +                          UINT aMessage,
   1.135 +                          WPARAM aWParam,
   1.136 +                          LPARAM aLParam);
   1.137 +
   1.138 +  ~DeferredCopyDataMessage();
   1.139 +private:
   1.140 +  COPYDATASTRUCT copyData;
   1.141 +};
   1.142 +
   1.143 +class DeferredStyleChangeMessage : public DeferredMessage
   1.144 +{
   1.145 +public:
   1.146 +  DeferredStyleChangeMessage(HWND aHWnd,
   1.147 +                             WPARAM aWParam,
   1.148 +                             LPARAM aLParam);
   1.149 +
   1.150 +  virtual void Run();
   1.151 +
   1.152 +private:
   1.153 +  HWND hWnd;
   1.154 +  int index;
   1.155 +  LONG_PTR style;
   1.156 +};
   1.157 +
   1.158 +class DeferredSetIconMessage : public DeferredSendMessage
   1.159 +{
   1.160 +public:
   1.161 +  DeferredSetIconMessage(HWND aHWnd,
   1.162 +                         UINT aMessage,
   1.163 +                         WPARAM aWParam,
   1.164 +                         LPARAM aLParam);
   1.165 +
   1.166 +  virtual void Run();
   1.167 +};
   1.168 +
   1.169 +} /* namespace windows */
   1.170 +} /* namespace ipc */
   1.171 +} /* namespace mozilla */
   1.172 +
   1.173 +#endif /* IPC_GLUE_WINDOWSMESSAGELOOP_H */

mercurial