- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / app_list / win / activation_tracker_win.h
1 // Copyright 2013 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 CHROME_BROWSER_UI_VIEWS_APP_LIST_WIN_ACTIVATION_TRACKER_WIN_H_
6 #define CHROME_BROWSER_UI_VIEWS_APP_LIST_WIN_ACTIVATION_TRACKER_WIN_H_
7
8 #include "base/callback.h"
9 #include "base/timer/timer.h"
10 #include "ui/app_list/views/app_list_view.h"
11 #include "ui/views/widget/widget.h"
12
13 // Periodically checks to see if an AppListView has lost focus using a timer.
14 class ActivationTrackerWin : public app_list::AppListView::Observer {
15  public:
16   ActivationTrackerWin(app_list::AppListView* view,
17                        const base::Closure& on_should_dismiss);
18   ~ActivationTrackerWin();
19
20   void RegainNextLostFocus() {
21     regain_next_lost_focus_ = true;
22   }
23
24   // app_list::AppListView::Observer overrides.
25   virtual void OnActivationChanged(views::Widget* widget, bool active) OVERRIDE;
26
27   void OnViewHidden();
28
29  private:
30   void CheckTaskbarOrViewHasFocus();
31
32   // The window to track the active state of.
33   app_list::AppListView* view_;
34
35   // Called to request |view_| be closed.
36   base::Closure on_should_dismiss_;
37
38   // True if we are anticipating that the app list will lose focus, and we want
39   // to take it back. This is used when switching out of Metro mode, and the
40   // browser regains focus after showing the app list.
41   bool regain_next_lost_focus_;
42
43   // When the context menu on the app list's taskbar icon is brought up the
44   // app list should not be hidden, but it should be if the taskbar is clicked
45   // on. There can be a period of time when the taskbar gets focus between a
46   // right mouse click and the menu showing; to prevent hiding the app launcher
47   // when this happens it is kept visible if the taskbar is seen briefly without
48   // the right mouse button down, but not if this happens twice in a row.
49   bool preserving_focus_for_taskbar_menu_;
50
51   // Timer used to check if the taskbar or app list is active. Using a timer
52   // means we don't need to hook Windows, which is apparently not possible
53   // since Vista (and is not nice at any time).
54   base::RepeatingTimer<ActivationTrackerWin> timer_;
55 };
56
57 #endif  // CHROME_BROWSER_UI_VIEWS_APP_LIST_WIN_ACTIVATION_TRACKER_WIN_H_