| Index: chrome/browser/window_sizer.cc
|
| ===================================================================
|
| --- chrome/browser/window_sizer.cc (revision 16844)
|
| +++ chrome/browser/window_sizer.cc (working copy)
|
| @@ -233,6 +233,13 @@
|
| return true;
|
| }
|
|
|
| +namespace {
|
| + // Minimum height of the visible part of a window.
|
| + static const int kMinVisibleHeight = 30;
|
| + // Minimum width of the visible part of a window.
|
| + static const int kMinVisibleWidth = 30;
|
| +}
|
| +
|
| void WindowSizer::AdjustBoundsToBeVisibleOnMonitorContaining(
|
| const gfx::Rect& other_bounds, gfx::Rect* bounds) const {
|
| DCHECK(bounds);
|
| @@ -251,36 +258,15 @@
|
| if (bounds->width() <= 0)
|
| bounds->set_width(default_bounds.width());
|
|
|
| - // First determine which screen edge(s) the window is offscreen on.
|
| - monitor_info_provider_->UpdateWorkAreas();
|
| - bool top_offscreen = PositionIsOffscreen(bounds->y(), TOP);
|
| - bool left_offscreen = PositionIsOffscreen(bounds->x(), LEFT);
|
| - bool bottom_offscreen = PositionIsOffscreen(bounds->bottom(), BOTTOM);
|
| - bool right_offscreen = PositionIsOffscreen(bounds->right(), RIGHT);
|
| + // Ensure the minimum height and width.
|
| + bounds->set_height(std::max(kMinVisibleHeight, bounds->height()));
|
| + bounds->set_width(std::max(kMinVisibleWidth, bounds->width()));
|
|
|
| - // Bump the window back onto the screen in the direction that it's offscreen.
|
| - int min_x = work_area.x() + kWindowTilePixels;
|
| - int min_y = work_area.y() + kWindowTilePixels;
|
| - if (bottom_offscreen) {
|
| - bounds->set_y(std::max(
|
| - work_area.bottom() - kWindowTilePixels - bounds->height(), min_y));
|
| - }
|
| - if (right_offscreen) {
|
| - bounds->set_x(std::max(
|
| - work_area.right() - kWindowTilePixels - bounds->width(), min_x));
|
| - }
|
| - if (top_offscreen)
|
| - bounds->set_y(min_y);
|
| - if (left_offscreen)
|
| - bounds->set_x(min_x);
|
| -
|
| - // Now that we've tried to correct the x/y position to something reasonable,
|
| - // see if the window is still too tall or wide to fit, and resize it if need
|
| - // be.
|
| - if ((bottom_offscreen || top_offscreen) &&
|
| - bounds->bottom() > work_area.bottom())
|
| - bounds->set_height(work_area.height() - 2 * kWindowTilePixels);
|
| - if ((left_offscreen || right_offscreen) &&
|
| - bounds->right() > work_area.right())
|
| - bounds->set_width(work_area.width() - 2 * kWindowTilePixels);
|
| + // Ensure at least kMinVisibleWidth * kMinVisibleHeight is visible.
|
| + const int min_y = work_area.y() + kMinVisibleHeight - bounds->height();
|
| + const int min_x = work_area.x() + kMinVisibleWidth - bounds->width();
|
| + const int max_y = work_area.bottom() - kMinVisibleHeight;
|
| + const int max_x = work_area.right() - kMinVisibleWidth;
|
| + bounds->set_y(std::max(min_y, std::min(max_y, bounds->y())));
|
| + bounds->set_x(std::max(min_x, std::min(max_x, bounds->x())));
|
| }
|
|
|