// 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 { 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_