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

Unified Diff: ash/wm/window_selector.h

Issue 22715005: Use overview mode for alt-tab cycling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments. 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 | « ash/accelerators/accelerator_controller.cc ('k') | ash/wm/window_selector.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/wm/window_selector.h
diff --git a/ash/wm/window_selector.h b/ash/wm/window_selector.h
index 900787db4054262b3cb937a08270b3772c5fd444..92ed607eabc029d671b1ab5384a128e77978de2a 100644
--- a/ash/wm/window_selector.h
+++ b/ash/wm/window_selector.h
@@ -8,6 +8,8 @@
#include <vector>
#include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/scoped_vector.h"
#include "ui/aura/window_observer.h"
#include "ui/base/events/event_handler.h"
#include "ui/gfx/transform.h"
@@ -16,21 +18,49 @@ namespace aura {
class RootWindow;
}
+namespace ui {
+class LocatedEvent;
+}
+
+namespace views {
+class Widget;
+}
+
namespace ash {
class WindowSelectorDelegate;
+class WindowSelectorWindow;
// The WindowSelector shows a grid of all of your windows and allows selecting
-// a window by clicking or tapping on it.
+// a window by clicking or tapping on it (OVERVIEW mode) or by alt-tabbing to
+// it (CYCLE mode).
class WindowSelector : public ui::EventHandler,
public aura::WindowObserver {
public:
+ enum Direction {
+ FORWARD,
+ BACKWARD
+ };
+ enum Mode {
+ CYCLE,
+ OVERVIEW
+ };
+
typedef std::vector<aura::Window*> WindowList;
WindowSelector(const WindowList& windows,
+ Mode mode,
WindowSelectorDelegate* delegate);
virtual ~WindowSelector();
+ // Step to the next window in |direction|.
+ void Step(Direction direction);
+
+ // Select the current window.
+ void SelectWindow();
+
+ Mode mode() { return mode_; }
+
// ui::EventHandler:
virtual void OnEvent(ui::Event* event) OVERRIDE;
virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
@@ -40,37 +70,48 @@ class WindowSelector : public ui::EventHandler,
virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE;
private:
- struct WindowDetails {
- WindowDetails() : window(NULL), minimized(false) {}
-
- bool operator==(const aura::Window* other_window) const {
- return window == other_window;
- }
+ // Returns the target of |event| or NULL if the event is not targeted at
+ // any of the windows in the selector.
+ WindowSelectorWindow* GetEventTarget(ui::LocatedEvent* event);
- // A weak pointer to the window.
- aura::Window* window;
+ // Handles a selection event for |target|.
+ void HandleSelectionEvent(WindowSelectorWindow* target);
- // If true, the window was minimized and this should be restored if the
- // window was not selected.
- bool minimized;
+ // Position all of the windows based on the current selection mode.
+ void PositionWindows();
+ // Position all of the windows from |root_window| on |root_window|.
+ void PositionWindowsFromRoot(aura::RootWindow* root_window);
+ // Position all of the |windows| to fit on the |root_window|.
+ void PositionWindowsOnRoot(aura::RootWindow* root_window,
+ const std::vector<WindowSelectorWindow*>& windows);
- // The original transform of the window before entering overview mode.
- gfx::Transform original_transform;
- };
+ void InitializeSelectionWidget();
- void HandleSelectionEvent(ui::Event* event);
- void PositionWindows();
- void PositionWindowsOnRoot(aura::RootWindow* root_window);
+ // Updates the selection widget's location to the currently selected window.
+ // If |animate| the transition to the new location is animated.
+ void UpdateSelectionLocation(bool animate);
- void SelectWindow(aura::Window*);
+ // The collection of windows in the overview wrapped by a helper class which
+ // restores their state and helps transform them to other root windows.
+ ScopedVector<WindowSelectorWindow> windows_;
- // List of weak pointers of windows to select from.
- std::vector<WindowDetails> windows_;
+ // The window selection mode.
+ Mode mode_;
// Weak pointer to the selector delegate which will be called when a
// selection is made.
WindowSelectorDelegate* delegate_;
+ // Index of the currently selected window if the mode is CYCLE.
+ size_t selected_window_;
+
+ // Widget indicating which window is currently selected.
+ scoped_ptr<views::Widget> selection_widget_;
+
+ // In CYCLE mode, the root window in which selection is taking place.
+ // NULL otherwise.
+ aura::RootWindow* selection_root_;
+
DISALLOW_COPY_AND_ASSIGN(WindowSelector);
};
« no previous file with comments | « ash/accelerators/accelerator_controller.cc ('k') | ash/wm/window_selector.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698