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.
5 #include "ash/system/tray/tray_bubble_wrapper.h"
7 #include "ash/system/tray/tray_background_view.h"
8 #include "ash/system/tray/tray_event_filter.h"
9 #include "ash/wm/window_properties.h"
10 #include "ui/views/bubble/tray_bubble_view.h"
11 #include "ui/views/widget/widget.h"
16 TrayBubbleWrapper::TrayBubbleWrapper(TrayBackgroundView
* tray
,
17 views::TrayBubbleView
* bubble_view
)
19 bubble_view_(bubble_view
) {
20 bubble_widget_
= views::BubbleDelegateView::CreateBubble(bubble_view_
);
21 bubble_widget_
->AddObserver(this);
22 bubble_widget_
->GetNativeView()->
23 SetProperty(internal::kStayInSameRootWindowKey
, true);
25 tray_
->InitializeBubbleAnimations(bubble_widget_
);
26 tray_
->UpdateBubbleViewArrow(bubble_view_
);
27 bubble_view_
->InitializeAndShowBubble();
29 tray_event_filter_
.reset(new TrayEventFilter(this));
32 TrayBubbleWrapper::~TrayBubbleWrapper() {
33 tray_event_filter_
.reset();
35 bubble_widget_
->RemoveObserver(this);
36 bubble_widget_
->Close();
40 void TrayBubbleWrapper::OnWidgetClosing(views::Widget
* widget
) {
41 CHECK_EQ(bubble_widget_
, widget
);
42 bubble_widget_
= NULL
;
43 tray_
->HideBubbleWithView(bubble_view_
); // May destroy |bubble_view_|
46 } // namespace internal