Home | History | Annotate | Download | only in corewm
      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_COREWM_WINDOW_MODALITY_CONTROLLER_H_
      6 #define UI_VIEWS_COREWM_WINDOW_MODALITY_CONTROLLER_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "ui/aura/env_observer.h"
     12 #include "ui/aura/window_observer.h"
     13 #include "ui/base/events/event_handler.h"
     14 #include "ui/views/views_export.h"
     15 
     16 namespace ui {
     17 class LocatedEvent;
     18 }
     19 
     20 namespace views {
     21 namespace corewm {
     22 
     23 // Sets the modal parent for the child.
     24 VIEWS_EXPORT void SetModalParent(aura::Window* child, aura::Window* parent);
     25 
     26 // Returns the modal transient child of |window|, or NULL if |window| does not
     27 // have any modal transient children.
     28 VIEWS_EXPORT aura::Window* GetModalTransient(aura::Window* window);
     29 
     30 // WindowModalityController is an event filter that consumes events sent to
     31 // windows that are the transient parents of window-modal windows. This filter
     32 // must be added to the CompoundEventFilter so that activation works properly.
     33 class VIEWS_EXPORT WindowModalityController : public ui::EventHandler,
     34                                               public aura::EnvObserver,
     35                                               public aura::WindowObserver {
     36  public:
     37   WindowModalityController();
     38   virtual ~WindowModalityController();
     39 
     40   // Overridden from ui::EventHandler:
     41   virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE;
     42   virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
     43   virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE;
     44 
     45   // Overridden from aura::EnvObserver:
     46   virtual void OnWindowInitialized(aura::Window* window) OVERRIDE;
     47 
     48   // Overridden from aura::WindowObserver:
     49   virtual void OnWindowPropertyChanged(aura::Window* window,
     50                                        const void* key,
     51                                        intptr_t old) OVERRIDE;
     52   virtual void OnWindowVisibilityChanged(aura::Window* window,
     53                                          bool visible) OVERRIDE;
     54   virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE;
     55 
     56  private:
     57   // Processes a mouse/touch event, and returns true if the event should be
     58   // consumed.
     59   bool ProcessLocatedEvent(aura::Window* target,
     60                            ui::LocatedEvent* event);
     61 
     62   std::vector<aura::Window*> windows_;
     63 
     64   DISALLOW_COPY_AND_ASSIGN(WindowModalityController);
     65 };
     66 
     67 }  // namespace corewm
     68 }  // namespace views
     69 
     70 #endif  // UI_VIEWS_COREWM_WINDOW_MODALITY_CONTROLLER_H_
     71