tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

WindowsMessageLoop.h (3488B)


      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:
     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:
     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 */