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

Unified Diff: ash/shelf/shelf_layout_manager.cc

Issue 22121002: Prevent a user from hiding the shelf via a gesture when there are no visible windows (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months 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 | « no previous file | ash/shelf/shelf_layout_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shelf/shelf_layout_manager.cc
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 68302878ad26b2618d1f535db572c9167d6702f3..db45c681e8e053282f840bcddb664756867fee18 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -36,6 +36,7 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "ui/aura/client/activation_client.h"
+#include "ui/aura/client/cursor_client.h"
#include "ui/aura/root_window.h"
#include "ui/base/events/event.h"
#include "ui/base/events/event_handler.h"
@@ -280,7 +281,8 @@ void ShelfLayoutManager::LayoutShelf() {
if (shelf_->launcher())
shelf_->launcher()->SetLauncherViewBounds(
target_bounds.launcher_bounds_in_shelf);
- GetLayer(shelf_->status_area_widget())->SetOpacity(target_bounds.opacity);
+ GetLayer(shelf_->status_area_widget())->SetOpacity(
+ target_bounds.status_opacity);
// TODO(harrym): Once status area widget is a child view of shelf
// this can be simplified.
gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf;
@@ -571,12 +573,6 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) {
state.window_state = workspace_controller_ ?
workspace_controller_->GetWindowState() : WORKSPACE_WINDOW_STATE_DEFAULT;
- // It's possible for SetState() when a window becomes maximized but the state
pkotwicz 2013/08/09 00:04:34 This comment is outdated. State::window_state now
- // won't have changed value. Do the dimming check before the early exit.
- shelf_->SetDimsShelf(
- (state.visibility_state == SHELF_VISIBLE) &&
- state.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED);
-
if (state_.Equals(state))
return; // Nothing changed.
@@ -631,18 +627,11 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) {
old_state.visibility_state != SHELF_VISIBLE) {
change_type = BackgroundAnimator::CHANGE_IMMEDIATE;
} else {
- // Delay updating the background when going from SHELF_AUTO_HIDE_SHOWN to
- // SHELF_AUTO_HIDE_HIDDEN until the shelf animates out. Otherwise during the
- // animation you see the background change.
- // Also delay the animation when the shelf was hidden, and has just been
- // made visible (e.g. using a gesture-drag).
- if (state.visibility_state == SHELF_AUTO_HIDE &&
pkotwicz 2013/08/09 00:04:34 To the extent of my understanding this is dead cod
- state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN &&
- old_state.visibility_state == SHELF_AUTO_HIDE) {
- delay_background_change = true;
- } else if (state.visibility_state == SHELF_VISIBLE &&
- old_state.visibility_state == SHELF_AUTO_HIDE &&
- old_state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN) {
+ // Delay the animation when the shelf was hidden, and has just been made
+ // visible (e.g. using a gesture-drag).
+ if (state.visibility_state == SHELF_VISIBLE &&
+ old_state.visibility_state == SHELF_AUTO_HIDE &&
+ old_state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN) {
delay_background_change = true;
}
}
@@ -653,7 +642,14 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) {
// UpdateShelfBackground deletes itself when the animation is done.
update_shelf_observer_ = new UpdateShelfObserver(this);
status_animation_setter.AddObserver(update_shelf_observer_);
+ } else {
pkotwicz 2013/08/09 00:04:34 Some house cleaning.
+ UpdateShelfBackground(change_type);
}
+
+ shelf_->SetDimsShelf(
+ (state.visibility_state == SHELF_VISIBLE) &&
+ state.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED);
+
ui::Layer* layer = GetLayer(shelf_->status_area_widget());
// TODO(harrym): Remove when status_area is view (crbug.com/180422).
gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf;
@@ -666,8 +662,6 @@ void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) {
Shell::GetInstance()->SetDisplayWorkAreaInsets(
root_window_, target_bounds.work_area_insets);
UpdateHitTestBounds();
- if (!delay_background_change)
- UpdateShelfBackground(change_type);
sadrul 2013/08/09 05:30:13 This change, the change between newlines 645-652,
// OnAutoHideStateChanged Should be emitted when:
// - firstly state changed to auto-hide from other state
@@ -789,7 +783,8 @@ void ShelfLayoutManager::CalculateTargetBounds(
state.visibility_state == SHELF_AUTO_HIDE) ? 1.0f : 0.0f;
target_bounds->status_opacity =
(state.visibility_state == SHELF_AUTO_HIDE &&
- state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN) ?
+ state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN &&
+ gesture_drag_status_ != GESTURE_DRAG_IN_PROGRESS) ?
0.0f : target_bounds->opacity;
if (gesture_drag_status_ == GESTURE_DRAG_IN_PROGRESS)
@@ -941,9 +936,6 @@ ShelfAutoHideState ShelfLayoutManager::CalculateAutoHideState(
if (visibility_state != SHELF_AUTO_HIDE || !shelf_)
return SHELF_AUTO_HIDE_HIDDEN;
- if (gesture_drag_status_ == GESTURE_DRAG_COMPLETE_IN_PROGRESS)
- return gesture_drag_auto_hide_state_;
-
Shell* shell = Shell::GetInstance();
if (shell->GetAppListTargetVisibility())
return SHELF_AUTO_HIDE_SHOWN;
@@ -961,10 +953,36 @@ ShelfAutoHideState ShelfLayoutManager::CalculateAutoHideState(
if (shelf_->IsActive() || shelf_->status_area_widget()->IsActive())
return SHELF_AUTO_HIDE_SHOWN;
+ const std::vector<aura::Window*> windows =
+ ash::MruWindowTracker::BuildWindowList(false);
+
+ // Process the window list and check if there are any visible windows.
+ bool visible_window = false;
+ for (size_t i = 0; i < windows.size(); ++i) {
+ if (windows[i] && windows[i]->IsVisible() &&
+ !ash::wm::IsWindowMinimized(windows[i]) &&
+ root_window_ == windows[i]->GetRootWindow()) {
+ visible_window = true;
+ break;
+ }
+ }
+ // If there are no visible windows do not hide the shelf.
+ if (!visible_window)
+ return SHELF_AUTO_HIDE_SHOWN;
+
+ if (gesture_drag_status_ == GESTURE_DRAG_COMPLETE_IN_PROGRESS)
+ return gesture_drag_auto_hide_state_;
+
// Don't show if the user is dragging the mouse.
if (auto_hide_event_filter_.get() && auto_hide_event_filter_->in_mouse_drag())
return SHELF_AUTO_HIDE_HIDDEN;
+ // Ignore the mouse position if mouse events are disabled.
+ aura::client::CursorClient* cursor_client = aura::client::GetCursorClient(
+ shelf_->GetNativeWindow()->GetRootWindow());
+ if (!cursor_client->IsMouseEventsEnabled())
+ return SHELF_AUTO_HIDE_HIDDEN;
+
gfx::Rect shelf_region = shelf_->GetWindowBoundsInScreen();
if (shelf_->status_area_widget() &&
shelf_->status_area_widget()->IsMessageBubbleShown() &&
@@ -1005,19 +1023,7 @@ ShelfAutoHideState ShelfLayoutManager::CalculateAutoHideState(
return SHELF_AUTO_HIDE_SHOWN;
}
- const std::vector<aura::Window*> windows =
- ash::MruWindowTracker::BuildWindowList(false);
-
- // Process the window list and check if there are any visible windows.
- for (size_t i = 0; i < windows.size(); ++i) {
- if (windows[i] && windows[i]->IsVisible() &&
- !ash::wm::IsWindowMinimized(windows[i]) &&
- root_window_ == windows[i]->GetRootWindow())
- return SHELF_AUTO_HIDE_HIDDEN;
- }
-
- // If there are no visible windows do not hide the shelf.
- return SHELF_AUTO_HIDE_SHOWN;
+ return SHELF_AUTO_HIDE_HIDDEN;
}
void ShelfLayoutManager::UpdateHitTestBounds() {
« no previous file with comments | « no previous file | ash/shelf/shelf_layout_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698