Index: ash/launcher/launcher.cc |
diff --git a/ash/launcher/launcher.cc b/ash/launcher/launcher.cc |
index 8bcb15d17a248494226b8d138eb17735b53a8695..f0fe2539c82ddbe83db82686c167ada484dae2eb 100644 |
--- a/ash/launcher/launcher.cc |
+++ b/ash/launcher/launcher.cc |
@@ -4,6 +4,7 @@ |
#include "ash/launcher/launcher.h" |
+#include "ash/focus_cycler.h" |
#include "ash/launcher/launcher_delegate.h" |
#include "ash/launcher/launcher_model.h" |
#include "ash/launcher/launcher_view.h" |
@@ -19,6 +20,7 @@ |
#include "ui/views/accessible_pane_view.h" |
#include "ui/views/painter.h" |
#include "ui/views/widget/widget.h" |
+#include "ui/views/widget/widget_delegate.h" |
namespace ash { |
@@ -56,6 +58,10 @@ class Launcher::DelegateView : public views::WidgetDelegate, |
void SetStatusWidth(int width); |
int status_width() const { return status_width_; } |
+ void set_focus_cycler(const internal::FocusCycler* focus_cycler) { |
+ focus_cycler_ = focus_cycler; |
+ } |
+ |
// views::View overrides |
virtual gfx::Size GetPreferredSize() OVERRIDE; |
virtual void Layout() OVERRIDE; |
@@ -68,15 +74,23 @@ class Launcher::DelegateView : public views::WidgetDelegate, |
return View::GetWidget(); |
} |
+ // views::WidgetDelegateView overrides: |
+ virtual bool CanActivate() const OVERRIDE { |
+ // We don't want mouse clicks to activate us, but we need to allow |
+ // activation when the user is using the keyboard (FocusCycler). |
+ return focus_cycler_ && focus_cycler_->widget_activating() == GetWidget(); |
+ } |
private: |
int status_width_; |
+ const internal::FocusCycler* focus_cycler_; |
DISALLOW_COPY_AND_ASSIGN(DelegateView); |
}; |
Launcher::DelegateView::DelegateView() |
- : status_width_(0) { |
+ : status_width_(0), |
+ focus_cycler_(NULL) { |
set_background( |
views::Background::CreateBackgroundPainter(true, new ShelfPainter())); |
} |
@@ -84,6 +98,10 @@ Launcher::DelegateView::DelegateView() |
Launcher::DelegateView::~DelegateView() { |
} |
+void Launcher::SetFocusCycler(const internal::FocusCycler* focus_cycler) { |
+ delegate_view_->set_focus_cycler(focus_cycler); |
+} |
+ |
void Launcher::DelegateView::SetStatusWidth(int width) { |
if (status_width_ == width) |
return; |