summaryrefslogtreecommitdiffstats
path: root/ash/system/tray/system_tray.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ash/system/tray/system_tray.cc')
-rw-r--r--ash/system/tray/system_tray.cc36
1 files changed, 33 insertions, 3 deletions
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc
index 341dbc6..763efc0 100644
--- a/ash/system/tray/system_tray.cc
+++ b/ash/system/tray/system_tray.cc
@@ -4,8 +4,11 @@
#include "ash/system/tray/system_tray.h"
+#include "ash/shell.h"
#include "ash/shell/panel_window.h"
+#include "ash/system/tray/system_tray_delegate.h"
#include "ash/system/tray/system_tray_item.h"
+#include "ash/system/user/login_status.h"
#include "ash/wm/shadow_types.h"
#include "base/logging.h"
#include "base/utf_string_conversions.h"
@@ -50,11 +53,16 @@ class SystemTrayBubble : public views::BubbleDelegateView {
SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical,
0, 0, 1));
+ ash::SystemTrayDelegate* delegate =
+ ash::Shell::GetInstance()->tray_delegate();
+ ash::user::LoginStatus login_status = delegate->GetUserLoginStatus();
for (std::vector<ash::SystemTrayItem*>::iterator it = items_.begin();
it != items_.end();
++it) {
- views::View* view = detailed_ ? (*it)->CreateDetailedView() :
- (*it)->CreateDefaultView();
+ views::View* view = detailed_ ? (*it)->CreateDetailedView(login_status) :
+ (*it)->CreateDefaultView(login_status);
+ if (!view)
+ continue;
if (it != items_.begin())
view->set_border(views::Border::CreateSolidSidedBorder(
1, 0, 0, 0, SkColorSetARGB(25, 0, 0, 0)));
@@ -95,7 +103,8 @@ SystemTray::~SystemTray() {
void SystemTray::AddTrayItem(SystemTrayItem* item) {
items_.push_back(item);
- views::View* tray_item = item->CreateTrayView();
+ SystemTrayDelegate* delegate = Shell::GetInstance()->tray_delegate();
+ views::View* tray_item = item->CreateTrayView(delegate->GetUserLoginStatus());
if (tray_item) {
AddChildViewAt(tray_item, 0);
PreferredSizeChanged();
@@ -116,6 +125,27 @@ void SystemTray::ShowDetailedView(SystemTrayItem* item) {
ShowItems(items, true);
}
+void SystemTray::UpdateAfterLoginStatusChange(user::LoginStatus login_status) {
+ if (popup_)
+ popup_->CloseNow();
+
+ for (std::vector<SystemTrayItem*>::iterator it = items_.begin();
+ it != items_.end();
+ ++it) {
+ (*it)->DestroyTrayView();
+ }
+ RemoveAllChildViews(true);
+
+ for (std::vector<SystemTrayItem*>::iterator it = items_.begin();
+ it != items_.end();
+ ++it) {
+ views::View* view = (*it)->CreateTrayView(login_status);
+ if (view)
+ AddChildViewAt(view, 0);
+ }
+ PreferredSizeChanged();
+}
+
void SystemTray::ShowItems(std::vector<SystemTrayItem*>& items, bool detailed) {
CHECK(!popup_);
SystemTrayBubble* bubble = new SystemTrayBubble(this, items, detailed);