Home | History | Annotate | Download | only in desktop_aura
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESTKOP_ACTIVATION_CLIENT_H_
      6 #define UI_VIEWS_WIDGET_DESKTOP_AURA_DESTKOP_ACTIVATION_CLIENT_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/observer_list.h"
     10 #include "base/scoped_observer.h"
     11 #include "ui/aura/client/activation_client.h"
     12 #include "ui/aura/client/focus_change_observer.h"
     13 #include "ui/aura/env_observer.h"
     14 #include "ui/aura/root_window_observer.h"
     15 #include "ui/aura/window_observer.h"
     16 #include "ui/views/views_export.h"
     17 
     18 namespace aura {
     19 class FocusManager;
     20 class RootWindow;
     21 
     22 namespace client {
     23 class ActivationChangeObserver;
     24 }
     25 }
     26 
     27 namespace views {
     28 
     29 // An activation client that handles activation events in a single
     30 // RootWindow. Used only on the Desktop where there can be multiple RootWindow
     31 // objects.
     32 class VIEWS_EXPORT DesktopActivationClient
     33     : public aura::client::ActivationClient,
     34       public aura::WindowObserver,
     35       public ui::EventHandler,
     36       public aura::client::FocusChangeObserver {
     37  public:
     38   explicit DesktopActivationClient(aura::RootWindow* root_window);
     39   virtual ~DesktopActivationClient();
     40 
     41   // ActivationClient:
     42   virtual void AddObserver(
     43       aura::client::ActivationChangeObserver* observer) OVERRIDE;
     44   virtual void RemoveObserver(
     45       aura::client::ActivationChangeObserver* observer) OVERRIDE;
     46   virtual void ActivateWindow(aura::Window* window) OVERRIDE;
     47   virtual void DeactivateWindow(aura::Window* window) OVERRIDE;
     48   virtual aura::Window* GetActiveWindow() OVERRIDE;
     49   virtual aura::Window* GetActivatableWindow(aura::Window* window) OVERRIDE;
     50   virtual aura::Window* GetToplevelWindow(aura::Window* window) OVERRIDE;
     51   virtual bool OnWillFocusWindow(aura::Window* window,
     52                                  const ui::Event* event) OVERRIDE;
     53   virtual bool CanActivateWindow(aura::Window* window) const OVERRIDE;
     54 
     55   // Overridden from aura::WindowObserver:
     56   virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
     57 
     58   // Overridden from aura::client::FocusChangeObserver:
     59   virtual void OnWindowFocused(aura::Window* gained_focus,
     60                                aura::Window* lost_focus) OVERRIDE;
     61 
     62   // Overridden from ui::EventHandler:
     63   virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE;
     64   virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
     65   virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE;
     66   virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE;
     67   virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
     68 
     69  private:
     70   void FocusWindowWithEvent(const ui::Event* event);
     71 
     72   aura::RootWindow* root_window_;
     73 
     74   // The current active window.
     75   aura::Window* current_active_;
     76 
     77   // True inside ActivateWindow(). Used to prevent recursion of focus
     78   // change notifications causing activation.
     79   bool updating_activation_;
     80 
     81   ObserverList<aura::client::ActivationChangeObserver> observers_;
     82 
     83   ScopedObserver<aura::Window, aura::WindowObserver> observer_manager_;
     84 
     85   DISALLOW_COPY_AND_ASSIGN(DesktopActivationClient);
     86 };
     87 
     88 }  // namespace views
     89 
     90 #endif  // UI_VIEWS_WIDGET_DESKTOP_AURA_DESTKOP_ACTIVATION_CLIENT_H_
     91