diff options
Diffstat (limited to 'chrome_frame/infobars/internal/host_window_manager.h')
-rw-r--r-- | chrome_frame/infobars/internal/host_window_manager.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/chrome_frame/infobars/internal/host_window_manager.h b/chrome_frame/infobars/internal/host_window_manager.h new file mode 100644 index 0000000..cf2abac --- /dev/null +++ b/chrome_frame/infobars/internal/host_window_manager.h @@ -0,0 +1,48 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_FRAME_INFOBARS_INTERNAL_HOST_WINDOW_MANAGER_H_ +#define CHROME_FRAME_INFOBARS_INTERNAL_HOST_WINDOW_MANAGER_H_ + +#include "base/basictypes.h" +#include "chrome_frame/infobars/internal/subclassing_window_with_delegate.h" + +class DisplacedWindowManager; + +// HostWindowManager observes the HWND passed to Initialize and: +// 1) Monitors the lifecycle of a specific child window (as identified by +// FindDisplacedWindow). +// 2) Intercepts NCCALCSIZE events on the child window, allowing the client to +// modify the child window's requested dimensions. +// 3) Allows the client to request a recalculation of the child window's +// dimensions (resulting in a callback as in [2]). +// +// See documentation of SubclasingWindowWithDelegate for further information. +class HostWindowManager + : public SubclassingWindowWithDelegate<HostWindowManager> { + public: + HostWindowManager(); + virtual ~HostWindowManager(); + + // Triggers an immediate re-evaluation of the dimensions of the displaced + // window. Delegate::AdjustDisplacedWindowDimensions will be called with the + // natural dimensions of the displaced window. + void UpdateLayout(); + + private: + class DisplacedWindowDelegate; + friend class DisplacedWindowDelegate; + + // Finds the window to be displaced and instantiate a DisplacedWindowManager + // for it if one does not already exist. Returns true if + // displaced_window_manager_ is non-NULL at the end of the call. + bool FindDisplacedWindow(HWND old_window); + + // Subclasses and observes changes to the displaced window. + DisplacedWindowManager* displaced_window_manager_; + + DISALLOW_COPY_AND_ASSIGN(HostWindowManager); +}; // class HostWindowManager + +#endif // CHROME_FRAME_INFOBARS_INTERNAL_HOST_WINDOW_MANAGER_H_ |