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

Unified Diff: ash/common/shelf/wm_shelf.cc

Issue 2274333002: ash: Move more code from Shelf to WmShelf (Closed)
Patch Set: review comments Created 4 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 | « ash/common/shelf/wm_shelf.h ('k') | ash/common/wm/panels/panel_window_resizer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/common/shelf/wm_shelf.cc
diff --git a/ash/common/shelf/wm_shelf.cc b/ash/common/shelf/wm_shelf.cc
index 4fd8c28eb49d147c7bd17b9504fa76b9895481c2..5367c0f06fdbcdb633f3afbd1fc33e7c9fa53490 100644
--- a/ash/common/shelf/wm_shelf.cc
+++ b/ash/common/shelf/wm_shelf.cc
@@ -4,18 +4,27 @@
#include "ash/common/shelf/shelf.h"
#include "ash/common/shelf/shelf_delegate.h"
+#include "ash/common/shelf/shelf_item_delegate.h"
#include "ash/common/shelf/shelf_layout_manager.h"
#include "ash/common/shelf/shelf_locking_manager.h"
+#include "ash/common/shelf/shelf_model.h"
#include "ash/common/shelf/shelf_widget.h"
#include "ash/common/shelf/wm_shelf.h"
#include "ash/common/shelf/wm_shelf_observer.h"
#include "ash/common/wm_lookup.h"
+#include "ash/common/wm_root_window_controller.h"
#include "ash/common/wm_shell.h"
#include "ash/common/wm_window.h"
#include "base/logging.h"
+#include "ui/gfx/geometry/rect.h"
namespace ash {
+// static
+WmShelf* WmShelf::ForWindow(WmWindow* window) {
+ return window->GetRootWindowController()->GetShelf();
+}
+
void WmShelf::SetShelf(Shelf* shelf) {
DCHECK(!shelf_);
DCHECK(shelf);
@@ -155,12 +164,55 @@ gfx::Rect WmShelf::GetUserWorkAreaBounds() const {
: gfx::Rect();
}
-void WmShelf::UpdateIconPositionForWindow(WmWindow* window) {
- shelf_->UpdateIconPositionForWindow(window);
+void WmShelf::UpdateIconPositionForPanel(WmWindow* panel) {
+ shelf_layout_manager_->shelf_widget()->UpdateIconPositionForPanel(panel);
}
gfx::Rect WmShelf::GetScreenBoundsOfItemIconForWindow(WmWindow* window) {
- return shelf_->GetScreenBoundsOfItemIconForWindow(window);
+ if (!shelf_layout_manager_)
+ return gfx::Rect();
+ return shelf_layout_manager_->shelf_widget()
+ ->GetScreenBoundsOfItemIconForWindow(window);
+}
+
+// static
+void WmShelf::LaunchShelfItem(int item_index) {
+ ShelfModel* shelf_model = WmShell::Get()->shelf_model();
+ const ShelfItems& items = shelf_model->items();
+ int item_count = shelf_model->item_count();
+ int indexes_left = item_index >= 0 ? item_index : item_count;
+ int found_index = -1;
+
+ // Iterating until we have hit the index we are interested in which
+ // is true once indexes_left becomes negative.
+ for (int i = 0; i < item_count && indexes_left >= 0; i++) {
+ if (items[i].type != TYPE_APP_LIST) {
+ found_index = i;
+ indexes_left--;
+ }
+ }
+
+ // There are two ways how found_index can be valid: a.) the nth item was
+ // found (which is true when indexes_left is -1) or b.) the last item was
+ // requested (which is true when index was passed in as a negative number).
+ if (found_index >= 0 && (indexes_left == -1 || item_index < 0)) {
+ // Then set this one as active (or advance to the next item of its kind).
+ ActivateShelfItem(found_index);
+ }
+}
+
+// static
+void WmShelf::ActivateShelfItem(int item_index) {
+ // We pass in a keyboard event which will then trigger a switch to the
+ // next item if the current one is already active.
+ ui::KeyEvent event(ui::ET_KEY_RELEASED,
+ ui::VKEY_UNKNOWN, // The actual key gets ignored.
+ ui::EF_NONE);
+
+ ShelfModel* shelf_model = WmShell::Get()->shelf_model();
+ const ShelfItem& item = shelf_model->items()[item_index];
+ ShelfItemDelegate* item_delegate = shelf_model->GetShelfItemDelegate(item.id);
+ item_delegate->ItemSelected(event);
}
bool WmShelf::ProcessGestureEvent(const ui::GestureEvent& event) {
« no previous file with comments | « ash/common/shelf/wm_shelf.h ('k') | ash/common/wm/panels/panel_window_resizer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698