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

Unified Diff: ash/wm/dock/dock_layout_manager.h

Issue 13896026: Stick windows to sides of workspaces (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Dock with zero width (no logs) Created 7 years, 6 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
Index: ash/wm/dock/dock_layout_manager.h
diff --git a/ash/wm/panels/panel_layout_manager.h b/ash/wm/dock/dock_layout_manager.h
similarity index 52%
copy from ash/wm/panels/panel_layout_manager.h
copy to ash/wm/dock/dock_layout_manager.h
index fd0bc5c29ae06f257be54a33c29ba8deea5f304b..0a09a459701a2accb5a667adaa1a15c3cc44e1a2 100644
--- a/ash/wm/panels/panel_layout_manager.h
+++ b/ash/wm/dock/dock_layout_manager.h
@@ -2,23 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef ASH_WM_PANELS_PANEL_LAYOUT_MANAGER_H_
-#define ASH_WM_PANELS_PANEL_LAYOUT_MANAGER_H_
-
-#include <list>
+#ifndef ASH_WM_DOCK_DOCK_LAYOUT_MANAGER_H_
+#define ASH_WM_DOCK_DOCK_LAYOUT_MANAGER_H_
#include "ash/ash_export.h"
-#include "ash/launcher/launcher_icon_observer.h"
#include "ash/shelf/shelf_layout_manager_observer.h"
#include "ash/shell_observer.h"
+#include "ash/wm/property_util.h"
#include "base/basictypes.h"
#include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
#include "ui/aura/client/activation_change_observer.h"
#include "ui/aura/layout_manager.h"
#include "ui/aura/window_observer.h"
-#include "ui/keyboard/keyboard_controller.h"
#include "ui/keyboard/keyboard_controller_observer.h"
namespace aura {
@@ -29,49 +24,47 @@ namespace gfx {
class Rect;
}
-namespace views {
-class Widget;
-}
-
namespace ash {
class Launcher;
namespace internal {
-class PanelCalloutWidget;
class ShelfLayoutManager;
-// PanelLayoutManager is responsible for organizing panels within the
-// workspace. It is associated with a specific container window (i.e.
-// kShellWindowId_PanelContainer) and controls the layout of any windows
+// DockLayoutManager is responsible for organizing windows within the
+// dock (gutter). It is associated with a specific container window (i.e.
+// kShellWindowId_DockContainer) and controls the layout of any windows
// added to that container.
//
-// The constructor takes a |panel_container| argument which is expected to set
+// The constructor takes a |dock_container| argument which is expected to set
// its layout manager to this instance, e.g.:
-// panel_container->SetLayoutManager(new PanelLayoutManager(panel_container));
+// dock_container->SetLayoutManager(new DockLayoutManager(dock_container));
-class ASH_EXPORT PanelLayoutManager
+class ASH_EXPORT DockLayoutManager
: public aura::LayoutManager,
- public ash::LauncherIconObserver,
public ash::ShellObserver,
public aura::WindowObserver,
public aura::client::ActivationChangeObserver,
public keyboard::KeyboardControllerObserver,
- public ShelfLayoutManagerObserver {
+ public ash::ShelfLayoutManagerObserver {
public:
- explicit PanelLayoutManager(aura::Window* panel_container);
- virtual ~PanelLayoutManager();
+ explicit DockLayoutManager(aura::Window* dock_container);
+ virtual ~DockLayoutManager();
- // Call Shutdown() before deleting children of panel_container.
+ // Call Shutdown() before deleting children of dock_container.
void Shutdown();
- void StartDragging(aura::Window* panel);
+ void StartDragging(aura::Window* window);
void FinishDragging();
- void ToggleMinimize(aura::Window* panel);
+ void ToggleMinimize(aura::Window* window);
ash::Launcher* launcher() { return launcher_; }
void SetLauncher(ash::Launcher* launcher);
+ // checks if the window touches the screen edge (no dock yet) or has entered
+ // existing dock area
+ static DockEdge FindDockEdge(aura::Window* window);
+
// Overridden from aura::LayoutManager:
virtual void OnWindowResized() OVERRIDE;
virtual void OnWindowAddedToLayout(aura::Window* child) OVERRIDE;
@@ -82,9 +75,6 @@ class ASH_EXPORT PanelLayoutManager
virtual void SetChildBounds(aura::Window* child,
const gfx::Rect& requested_bounds) OVERRIDE;
- // Overridden from ash::LauncherIconObserver
- virtual void OnLauncherIconPositionsChanged() OVERRIDE;
-
// Overridden from ash::ShellObserver
virtual void OnShelfAlignmentChanged(aura::RootWindow* root_window) OVERRIDE;
@@ -104,58 +94,30 @@ class ASH_EXPORT PanelLayoutManager
ShelfVisibilityState new_state) OVERRIDE;
private:
- friend class PanelLayoutManagerTest;
- friend class PanelWindowResizerTest;
-
- views::Widget* CreateCalloutWidget();
-
- struct PanelInfo{
- PanelInfo() : window(NULL), callout_widget(NULL), slide_in(false) {}
-
- bool operator==(const aura::Window* other_window) const {
- return window == other_window;
- }
+ friend class DockLayoutManagerTest;
+ friend class DockWindowResizerTest;
- // A weak pointer to the panel window.
- aura::Window* window;
- // The callout widget for this panel. This pointer must be managed
- // manually as this structure is used in a std::list. See
- // http://www.chromium.org/developers/smart-pointer-guidelines
- PanelCalloutWidget* callout_widget;
+ // minimize / restore window and relayout
+ void MinimizeWindow(aura::Window* window);
+ void RestoreWindow(aura::Window* window);
- // True on new and restored panel windows until the panel has been
- // positioned. The first time Relayout is called the panel will slide into
- // position and this will be set to false.
- bool slide_in;
- };
-
- typedef std::list<PanelInfo> PanelList;
-
- void MinimizePanel(aura::Window* panel);
- void RestorePanel(aura::Window* panel);
-
- // Called whenever the panel layout might change.
+ // Called whenever the window layout might change.
void Relayout();
- // Called whenever the panel stacking order needs to be updated (e.g. focus
- // changes or a panel is moved).
- void UpdateStacking(aura::Window* active_panel);
-
- // Update the callout arrows for all managed panels.
- void UpdateCallouts();
+ // Called whenever the window stacking order needs to be updated (e.g. focus
+ // changes or a window is moved).
+ void UpdateStacking(aura::Window* active_window);
// Overridden from keyboard::KeyboardControllerObserver:
virtual void OnKeyboardBoundsChanging(
const gfx::Rect& keyboard_bounds) OVERRIDE;
// Parent window associated with this layout manager.
- aura::Window* panel_container_;
+ aura::Window* dock_container_;
// Protect against recursive calls to Relayout().
bool in_layout_;
- // Ordered list of unowned pointers to panel windows.
- PanelList panel_windows_;
- // The panel being dragged.
- aura::Window* dragged_panel_;
+ // The docked window being dragged.
+ aura::Window* dragged_window_;
// The launcher we are observing for launcher icon changes.
Launcher* launcher_;
// The shelf layout manager being observed for visibility changes.
@@ -163,15 +125,19 @@ class ASH_EXPORT PanelLayoutManager
// Tracks the visibility of the shelf. Defaults to false when there is no
// shelf.
bool shelf_hidden_;
- // The last active panel. Used to maintain stacking even if no panels are
- // currently focused.
- aura::Window* last_active_panel_;
- base::WeakPtrFactory<PanelLayoutManager> weak_factory_;
- DISALLOW_COPY_AND_ASSIGN(PanelLayoutManager);
+ // side of the screen the dock is positioned at
+ enum DockAlignment {
+ DOCK_ALIGNMENT_NONE,
+ DOCK_ALIGNMENT_LEFT,
+ DOCK_ALIGNMENT_RIGHT,
+ };
+ DockAlignment alignment_;
+
+ DISALLOW_COPY_AND_ASSIGN(DockLayoutManager);
};
} // namespace internal
} // namespace ash
-#endif // ASH_WM_PANELS_PANEL_LAYOUT_MANAGER_H_
+#endif // ASH_WM_DOCK_DOCK_LAYOUT_MANAGER_H_

Powered by Google App Engine
This is Rietveld 408576698