Index: ash/shelf/shelf_layout_manager.cc |
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc |
index 31351ac2150d673e00c0b2a695a7e60b4d9a2111..7a1998dca80183d7ccc5646732d3033a6abcce3e 100644 |
--- a/ash/shelf/shelf_layout_manager.cc |
+++ b/ash/shelf/shelf_layout_manager.cc |
@@ -46,6 +46,7 @@ |
#include "ui/events/event.h" |
#include "ui/events/event_handler.h" |
#include "ui/gfx/screen.h" |
+#include "ui/keyboard/keyboard_util.h" |
#include "ui/views/widget/widget.h" |
#include "ui/wm/public/activation_client.h" |
@@ -775,7 +776,7 @@ void ShelfLayoutManager::AdjustBoundsBasedOnAlignment(int inset, |
void ShelfLayoutManager::CalculateTargetBounds( |
const State& state, |
TargetBounds* target_bounds) { |
- const gfx::Rect available_bounds(GetAvailableBounds()); |
+ const gfx::Rect available_bounds(root_window_->bounds()); |
gfx::Rect status_size( |
shelf_->status_area_widget()->GetWindowBoundsInScreen().size()); |
int shelf_width = 0, shelf_height = 0; |
@@ -795,15 +796,22 @@ void ShelfLayoutManager::CalculateTargetBounds( |
else |
shelf_width = kAutoHideSize; |
} else if (state.visibility_state == SHELF_HIDDEN || |
- !keyboard_bounds_.IsEmpty()) { |
+ (!keyboard_bounds_.IsEmpty() && !keyboard::IsKeyboardOverscrollEnabled())) |
+ { |
if (IsHorizontalAlignment()) |
shelf_height = 0; |
else |
shelf_width = 0; |
} |
+ int bottom_shelf_vertical_offset = available_bounds.bottom(); |
+ if (keyboard_bounds_.IsEmpty()) |
+ bottom_shelf_vertical_offset -= shelf_height; |
+ else |
+ bottom_shelf_vertical_offset -= keyboard_bounds_.height(); |
+ |
target_bounds->shelf_bounds_in_root = SelectValueForShelfAlignment( |
- gfx::Rect(available_bounds.x(), available_bounds.bottom() - shelf_height, |
+ gfx::Rect(available_bounds.x(), bottom_shelf_vertical_offset, |
available_bounds.width(), shelf_height), |
gfx::Rect(available_bounds.x(), available_bounds.y(), |
shelf_width, available_bounds.height()), |
@@ -839,8 +847,8 @@ void ShelfLayoutManager::CalculateTargetBounds( |
// should probably be pushed to a separate component. This would simplify or |
// remove entirely the dependency on keyboard and dock. |
- // Also push in the work area inset for the keyboard if it is visible. |
- if (!keyboard_bounds_.IsEmpty()) { |
+ if (!keyboard_bounds_.IsEmpty() && !keyboard::IsKeyboardOverscrollEnabled()) { |
+ // Also push in the work area inset for the keyboard if it is visible. |
gfx::Insets keyboard_insets(0, 0, keyboard_bounds_.height(), 0); |
target_bounds->work_area_insets += keyboard_insets; |
} |
@@ -1134,12 +1142,6 @@ bool ShelfLayoutManager::IsShelfForcedToBeVisible() const { |
WORKSPACE_WINDOW_STATE_FULL_SCREEN; |
} |
-gfx::Rect ShelfLayoutManager::GetAvailableBounds() const { |
- gfx::Rect bounds(root_window_->bounds()); |
- bounds.set_height(bounds.height() - keyboard_bounds_.height()); |
- return bounds; |
-} |
- |
void ShelfLayoutManager::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) { |
bool keyboard_is_about_to_hide = false; |
if (new_bounds.IsEmpty() && !keyboard_bounds_.IsEmpty()) |