Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(891)

Unified Diff: chrome/browser/ui/window_sizer/window_sizer.h

Issue 102773002: Open non browser window on the target display (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: exclude win7 Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/scoped_target_root_window.h ('k') | chrome/browser/ui/window_sizer/window_sizer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/window_sizer/window_sizer.h
diff --git a/chrome/browser/ui/window_sizer/window_sizer.h b/chrome/browser/ui/window_sizer/window_sizer.h
index bbc69aefe8eca40be1264b98be00a8ca544a7e9a..a7a7dd017cd4d91fe66cabab081e71619de170e5 100644
--- a/chrome/browser/ui/window_sizer/window_sizer.h
+++ b/chrome/browser/ui/window_sizer/window_sizer.h
@@ -32,14 +32,18 @@ class Screen;
class WindowSizer {
public:
class StateProvider;
+ class TargetDisplayProvider;
- // WindowSizer owns |state_provider| and will create a default
- // MonitorInfoProvider using the physical screen.
- WindowSizer(StateProvider* state_provider, const Browser* browser);
+ // WindowSizer owns |state_provider| and |target_display_provider|,
+ // and will use the platforms's gfx::Screen.
+ WindowSizer(scoped_ptr<StateProvider> state_provider,
+ scoped_ptr<TargetDisplayProvider> target_display_provider,
+ const Browser* browser);
- // WindowSizer owns |state_provider| and will use the supplied |screen|.
- // Used only for testing.
- WindowSizer(StateProvider* state_provider,
+ // WindowSizer owns |state_provider| and |target_display_provider|,
+ // and will use the supplied |screen|. Used only for testing.
+ WindowSizer(scoped_ptr<StateProvider> state_provider,
+ scoped_ptr<TargetDisplayProvider> target_display_provider,
gfx::Screen* screen,
const Browser* browser);
@@ -69,6 +73,15 @@ class WindowSizer {
ui::WindowShowState* show_state) const = 0;
};
+ // An interface implemented by an object to identify on which
+ // display a new window should be located.
+ class TargetDisplayProvider {
+ public:
+ virtual ~TargetDisplayProvider() {}
+ virtual gfx::Display GetTargetDisplay(const gfx::Screen* screen,
+ const gfx::Rect& bounds) const = 0;
+ };
+
// Determines the position and size for a window as it is created as well
// as the initial state. This function uses several strategies to figure out
// optimal size and placement, first looking for an existing active window,
@@ -106,12 +119,12 @@ class WindowSizer {
// The edge of the screen to check for out-of-bounds.
enum Edge { TOP, LEFT, BOTTOM, RIGHT };
- // Gets the size and placement of the last window. Returns true if this data
- // is valid, false if there is no last window and the application should
+ // Gets the size and placement of the last active window. Returns true if this
+ // data is valid, false if there is no last window and the application should
// restore saved state from preferences using RestoreWindowPosition.
// |show_state| will only be changed if it was set to SHOW_STATE_DEFAULT.
- bool GetLastWindowBounds(gfx::Rect* bounds,
- ui::WindowShowState* show_state) const;
+ bool GetLastActiveWindowBounds(gfx::Rect* bounds,
+ ui::WindowShowState* show_state) const;
// Gets the size and placement of the last window in the last session, saved
// in local state preferences. Returns true if local state exists containing
@@ -129,18 +142,23 @@ class WindowSizer {
gfx::Rect* default_bounds) const;
// Adjusts |bounds| to be visible on-screen, biased toward the work area of
- // the monitor containing |other_bounds|. Despite the name, this doesn't
- // guarantee the bounds are fully contained within this monitor's work rect;
+ // the |display|. Despite the name, this doesn't
+ // guarantee the bounds are fully contained within this display's work rect;
// it just tried to ensure the edges are visible on _some_ work rect.
// If |saved_work_area| is non-empty, it is used to determine whether the
// monitor configuration has changed. If it has, bounds are repositioned and
// resized if necessary to make them completely contained in the current work
// area.
- void AdjustBoundsToBeVisibleOnMonitorContaining(
- const gfx::Rect& other_bounds,
+ void AdjustBoundsToBeVisibleOnDisplay(
+ const gfx::Display& display,
const gfx::Rect& saved_work_area,
gfx::Rect* bounds) const;
+ // Determine the target display for a new window based on
+ // |bounds|. On ash environment, this returns the display containing
+ // ash's the target root window.
+ gfx::Display GetTargetDisplay(const gfx::Rect& bounds) const;
+
#if defined(USE_ASH)
// Determines the position and size for a tabbed browser window in
// ash as it gets created. This will be called before other standard
@@ -161,6 +179,7 @@ class WindowSizer {
// Providers for persistent storage and monitor metrics.
scoped_ptr<StateProvider> state_provider_;
+ scoped_ptr<TargetDisplayProvider> target_display_provider_;
gfx::Screen* screen_; // not owned.
// Note that this browser handle might be NULL.
« no previous file with comments | « ash/scoped_target_root_window.h ('k') | chrome/browser/ui/window_sizer/window_sizer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698