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

Unified Diff: mojo/services/window_manager/window_manager_app.h

Issue 474883003: Move focus from the view manager to the window manager. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 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 | « mojo/services/window_manager/main.cc ('k') | mojo/services/window_manager/window_manager_app.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/services/window_manager/window_manager_app.h
diff --git a/mojo/services/window_manager/window_manager_app.h b/mojo/services/window_manager/window_manager_app.h
index a8f9f808712369c75b78076639d16977ec2eded0..63779903e390ed76192ccca2c8a6ecc5af8d4c96 100644
--- a/mojo/services/window_manager/window_manager_app.h
+++ b/mojo/services/window_manager/window_manager_app.h
@@ -8,6 +8,7 @@
#include <set>
#include "base/memory/scoped_ptr.h"
+#include "mojo/aura/window_tree_host_mojo.h"
#include "mojo/aura/window_tree_host_mojo_delegate.h"
#include "mojo/public/cpp/application/application_delegate.h"
#include "mojo/public/cpp/application/interface_factory_impl.h"
@@ -16,8 +17,10 @@
#include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h"
#include "mojo/services/public/cpp/view_manager/view_manager_delegate.h"
#include "mojo/services/public/cpp/view_manager/view_observer.h"
+#include "mojo/services/public/cpp/view_manager/window_manager_delegate.h"
#include "mojo/services/window_manager/window_manager_service_impl.h"
#include "ui/aura/client/focus_change_observer.h"
+#include "ui/events/event_handler.h"
#include "ui/wm/public/activation_change_observer.h"
namespace aura {
@@ -35,29 +38,52 @@ class ScopedCaptureClient;
namespace mojo {
class AuraInit;
+class DummyDelegate;
class WindowManagerServiceImpl;
class WindowTreeHostMojo;
+// Implements core window manager functionality that could conceivably be shared
+// across multiple window managers implementing superficially different user
+// experiences. Establishes communication with the view manager.
+// A window manager wishing to use this core should create and own an instance
+// of this object. They may implement the associated ViewManager/WindowManager
+// delegate interfaces exposed by the view manager, this object provides the
+// canonical implementation of said interfaces but will call out to the wrapped
+// instances.
+// This object maintains an aura::WindowTreeHost containing a hierarchy of
+// aura::Windows. Window manager functionality (e.g. focus, activation,
+// modality, etc.) are implemented using aura core window manager components.
class WindowManagerApp
: public ApplicationDelegate,
public ViewManagerDelegate,
+ public WindowManagerDelegate,
public ViewObserver,
public WindowTreeHostMojoDelegate,
+ public ui::EventHandler,
public aura::client::FocusChangeObserver,
public aura::client::ActivationChangeObserver {
public:
- explicit WindowManagerApp(ViewManagerDelegate* delegate);
+ WindowManagerApp(ViewManagerDelegate* view_manager_delegate,
+ WindowManagerDelegate* window_manager_delegate);
virtual ~WindowManagerApp();
+ static View* GetViewForWindow(aura::Window* window);
+
+ // Register/deregister new connections to the window manager service.
void AddConnection(WindowManagerServiceImpl* connection);
void RemoveConnection(WindowManagerServiceImpl* connection);
+ // These are canonical implementations of the window manager API methods.
void SetCapture(Id view);
void FocusWindow(Id view);
void ActivateWindow(Id view);
bool IsReady() const;
+ // A client of this object will use this accessor to gain access to the
+ // aura::Window hierarchy and attach event handlers.
+ aura::WindowTreeHost* host() { return window_tree_host_.get(); }
+
// Overridden from ApplicationDelegate:
virtual void Initialize(ApplicationImpl* impl) MOJO_OVERRIDE;
virtual bool ConfigureIncomingConnection(ApplicationConnection* connection)
@@ -76,14 +102,26 @@ class WindowManagerApp
virtual void OnViewManagerDisconnected(
ViewManager* view_manager) MOJO_OVERRIDE;
+ // Overridden from WindowManagerDelegate:
+ virtual void Embed(
+ const String& url,
+ InterfaceRequest<ServiceProvider> service_provider) OVERRIDE;
+ virtual void DispatchEvent(EventPtr event) OVERRIDE;
+
// Overridden from ViewObserver:
virtual void OnTreeChanged(
const ViewObserver::TreeChangeParams& params) MOJO_OVERRIDE;
virtual void OnViewDestroyed(View* view) MOJO_OVERRIDE;
+ virtual void OnViewBoundsChanged(View* view,
+ const gfx::Rect& old_bounds,
+ const gfx::Rect& new_bounds) MOJO_OVERRIDE;
// Overridden from WindowTreeHostMojoDelegate:
virtual void CompositorContentsChanged(const SkBitmap& bitmap) MOJO_OVERRIDE;
+ // Overridden from ui::EventHandler:
+ virtual void OnEvent(ui::Event* event) MOJO_OVERRIDE;
+
// Overridden from aura::client::FocusChangeObserver:
virtual void OnWindowFocused(aura::Window* gained_focus,
aura::Window* lost_focus) MOJO_OVERRIDE;
@@ -94,19 +132,20 @@ class WindowManagerApp
aura::Window* GetWindowForViewId(Id view) const;
- // Creates an aura::Window for every view in the hierarchy beneath |id|,
+ // Creates an aura::Window for every view in the hierarchy beneath |view|,
// and adds to the registry so that it can be retrieved later via
// GetWindowForViewId().
// TODO(beng): perhaps View should have a property bag.
- void RegisterSubtree(Id id, aura::Window* parent);
+ void RegisterSubtree(View* view, aura::Window* parent);
// Deletes the aura::Windows associated with the hierarchy beneath |id|,
// and removes from the registry.
- void UnregisterSubtree(Id id);
+ void UnregisterSubtree(View* view);
InterfaceFactoryImplWithContext<WindowManagerServiceImpl, WindowManagerApp>
window_manager_service_factory_;
- ViewManagerDelegate* wrapped_delegate_;
+ ViewManagerDelegate* wrapped_view_manager_delegate_;
+ WindowManagerDelegate* wrapped_window_manager_delegate_;
ViewManager* view_manager_;
ViewManagerClientFactory view_manager_client_factory_;
@@ -122,6 +161,8 @@ class WindowManagerApp
Connections connections_;
ViewIdToWindowMap view_id_to_window_map_;
+ scoped_ptr<DummyDelegate> dummy_delegate_;
+
DISALLOW_COPY_AND_ASSIGN(WindowManagerApp);
};
« no previous file with comments | « mojo/services/window_manager/main.cc ('k') | mojo/services/window_manager/window_manager_app.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698