OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/common/system/chromeos/ime_menu/ime_menu_tray.h" | 5 #include "ash/common/system/chromeos/ime_menu/ime_menu_tray.h" |
6 | 6 |
7 #include "ash/common/material_design/material_design_controller.h" | 7 #include "ash/common/material_design/material_design_controller.h" |
8 #include "ash/common/session/session_state_delegate.h" | 8 #include "ash/common/session/session_state_delegate.h" |
9 #include "ash/common/shelf/wm_shelf_util.h" | 9 #include "ash/common/shelf/wm_shelf_util.h" |
10 #include "ash/common/shell_window_ids.h" | 10 #include "ash/common/shell_window_ids.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 }; | 52 }; |
53 | 53 |
54 TrayPopupHeaderButton* CreateImeMenuButton(views::ButtonListener* listener, | 54 TrayPopupHeaderButton* CreateImeMenuButton(views::ButtonListener* listener, |
55 int enabled_resource_id, | 55 int enabled_resource_id, |
56 int disabled_resource_id, | 56 int disabled_resource_id, |
57 int enabled_resource_id_hover, | 57 int enabled_resource_id_hover, |
58 int disabled_resource_id_hover, | 58 int disabled_resource_id_hover, |
59 int accessible_name_id, | 59 int accessible_name_id, |
60 int message_id, | 60 int message_id, |
61 int right_border) { | 61 int right_border) { |
62 TrayPopupHeaderButton* button = new ash::TrayPopupHeaderButton( | 62 TrayPopupHeaderButton* button = |
63 listener, enabled_resource_id, disabled_resource_id, | 63 new TrayPopupHeaderButton(listener, enabled_resource_id, |
64 enabled_resource_id_hover, disabled_resource_id_hover, | 64 disabled_resource_id, enabled_resource_id_hover, |
65 accessible_name_id); | 65 disabled_resource_id_hover, accessible_name_id); |
66 button->SetTooltipText(l10n_util::GetStringUTF16(message_id)); | 66 button->SetTooltipText(l10n_util::GetStringUTF16(message_id)); |
67 button->SetBorder(views::Border::CreateSolidSidedBorder(0, 0, 0, right_border, | 67 button->SetBorder(views::Border::CreateSolidSidedBorder(0, 0, 0, right_border, |
68 kBorderDarkColor)); | 68 kBorderDarkColor)); |
69 return button; | 69 return button; |
70 } | 70 } |
71 | 71 |
72 class ImeButtonsView : public views::View, public views::ButtonListener { | 72 class ImeButtonsView : public views::View, public views::ButtonListener { |
73 public: | 73 public: |
74 ImeButtonsView(bool show_emoji_button, | 74 ImeButtonsView(bool show_emoji_button, |
75 bool show_voice_button, | 75 bool show_voice_button, |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 | 147 |
148 ImeMenuTray::ImeMenuTray(WmShelf* wm_shelf) | 148 ImeMenuTray::ImeMenuTray(WmShelf* wm_shelf) |
149 : TrayBackgroundView(wm_shelf), label_(new ImeMenuLabel()) { | 149 : TrayBackgroundView(wm_shelf), label_(new ImeMenuLabel()) { |
150 SetupLabelForTray(label_); | 150 SetupLabelForTray(label_); |
151 tray_container()->AddChildView(label_); | 151 tray_container()->AddChildView(label_); |
152 SetContentsBackground(); | 152 SetContentsBackground(); |
153 WmShell::Get()->system_tray_notifier()->AddIMEObserver(this); | 153 WmShell::Get()->system_tray_notifier()->AddIMEObserver(this); |
154 } | 154 } |
155 | 155 |
156 ImeMenuTray::~ImeMenuTray() { | 156 ImeMenuTray::~ImeMenuTray() { |
| 157 if (bubble_) |
| 158 bubble_->bubble_view()->reset_delegate(); |
157 WmShell::Get()->system_tray_notifier()->RemoveIMEObserver(this); | 159 WmShell::Get()->system_tray_notifier()->RemoveIMEObserver(this); |
158 } | 160 } |
159 | 161 |
160 void ImeMenuTray::SetShelfAlignment(ShelfAlignment alignment) { | 162 void ImeMenuTray::SetShelfAlignment(ShelfAlignment alignment) { |
161 TrayBackgroundView::SetShelfAlignment(alignment); | 163 TrayBackgroundView::SetShelfAlignment(alignment); |
162 if (!ash::MaterialDesignController::IsShelfMaterial()) | 164 if (!MaterialDesignController::IsShelfMaterial()) |
163 tray_container()->SetBorder(views::Border::NullBorder()); | 165 tray_container()->SetBorder(views::Border::NullBorder()); |
164 } | 166 } |
165 | 167 |
166 base::string16 ImeMenuTray::GetAccessibleNameForTray() { | 168 base::string16 ImeMenuTray::GetAccessibleNameForTray() { |
167 return l10n_util::GetStringUTF16(IDS_ASH_IME_MENU_ACCESSIBLE_NAME); | 169 return l10n_util::GetStringUTF16(IDS_ASH_IME_MENU_ACCESSIBLE_NAME); |
168 } | 170 } |
169 | 171 |
170 void ImeMenuTray::HideBubbleWithView(const views::TrayBubbleView* bubble_view) { | 172 void ImeMenuTray::HideBubbleWithView(const views::TrayBubbleView* bubble_view) { |
171 if (bubble_->bubble_view() == bubble_view) | 173 if (bubble_->bubble_view() == bubble_view) |
172 HideImeMenuBubble(); | 174 HideImeMenuBubble(); |
173 } | 175 } |
174 | 176 |
175 void ImeMenuTray::ClickedOutsideBubble() { | 177 void ImeMenuTray::ClickedOutsideBubble() { |
176 HideImeMenuBubble(); | 178 HideImeMenuBubble(); |
177 } | 179 } |
178 | 180 |
179 bool ImeMenuTray::PerformAction(const ui::Event& event) { | 181 bool ImeMenuTray::PerformAction(const ui::Event& event) { |
180 if (bubble_) | 182 if (bubble_) |
181 HideImeMenuBubble(); | 183 HideImeMenuBubble(); |
182 else | 184 else |
183 ShowImeMenuBubble(); | 185 ShowImeMenuBubble(); |
184 return true; | 186 return true; |
185 } | 187 } |
186 | 188 |
187 void ImeMenuTray::OnIMERefresh() { | 189 void ImeMenuTray::OnIMERefresh() { |
188 UpdateTrayLabel(); | 190 UpdateTrayLabel(); |
| 191 if (bubble_ && ime_list_view_) { |
| 192 SystemTrayDelegate* delegate = WmShell::Get()->system_tray_delegate(); |
| 193 IMEInfoList list; |
| 194 delegate->GetAvailableIMEList(&list); |
| 195 IMEPropertyInfoList property_list; |
| 196 delegate->GetCurrentIMEProperties(&property_list); |
| 197 ime_list_view_->Update(list, property_list, false, |
| 198 ImeListView::SHOW_SINGLE_IME); |
| 199 } |
189 } | 200 } |
190 | 201 |
191 void ImeMenuTray::OnIMEMenuActivationChanged(bool is_activated) { | 202 void ImeMenuTray::OnIMEMenuActivationChanged(bool is_activated) { |
192 SetVisible(is_activated); | 203 SetVisible(is_activated); |
193 if (is_activated) | 204 if (is_activated) |
194 UpdateTrayLabel(); | 205 UpdateTrayLabel(); |
195 else | 206 else |
196 HideImeMenuBubble(); | 207 HideImeMenuBubble(); |
197 } | 208 } |
198 | 209 |
199 void ImeMenuTray::BubbleViewDestroyed() { | 210 void ImeMenuTray::BubbleViewDestroyed() { |
200 SetDrawBackgroundAsActive(false); | |
201 } | 211 } |
202 | 212 |
203 void ImeMenuTray::OnMouseEnteredView() {} | 213 void ImeMenuTray::OnMouseEnteredView() {} |
204 | 214 |
205 void ImeMenuTray::OnMouseExitedView() {} | 215 void ImeMenuTray::OnMouseExitedView() {} |
206 | 216 |
207 base::string16 ImeMenuTray::GetAccessibleNameForBubble() { | 217 base::string16 ImeMenuTray::GetAccessibleNameForBubble() { |
208 return l10n_util::GetStringUTF16(IDS_ASH_IME_MENU_ACCESSIBLE_NAME); | 218 return l10n_util::GetStringUTF16(IDS_ASH_IME_MENU_ACCESSIBLE_NAME); |
209 } | 219 } |
210 | 220 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 kTrayPopupMinWidth, kTrayPopupMaxWidth); | 270 kTrayPopupMinWidth, kTrayPopupMaxWidth); |
261 init_params.first_item_has_no_margin = true; | 271 init_params.first_item_has_no_margin = true; |
262 init_params.can_activate = true; | 272 init_params.can_activate = true; |
263 init_params.close_on_deactivate = true; | 273 init_params.close_on_deactivate = true; |
264 | 274 |
265 views::TrayBubbleView* bubble_view = | 275 views::TrayBubbleView* bubble_view = |
266 views::TrayBubbleView::Create(tray_container(), this, &init_params); | 276 views::TrayBubbleView::Create(tray_container(), this, &init_params); |
267 bubble_view->set_margins(gfx::Insets(7, 0, 0, 0)); | 277 bubble_view->set_margins(gfx::Insets(7, 0, 0, 0)); |
268 bubble_view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); | 278 bubble_view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); |
269 | 279 |
270 ImeListView* ime_list_view = | 280 // Adds IME list to the bubble. |
| 281 ime_list_view_ = |
271 new ImeListView(nullptr, false, ImeListView::SHOW_SINGLE_IME); | 282 new ImeListView(nullptr, false, ImeListView::SHOW_SINGLE_IME); |
272 if (ime_list_view->scroll_content()->height() > GetImeListViewMaxHeight()) { | 283 if (ime_list_view_->scroll_content()->height() > GetImeListViewMaxHeight()) { |
273 ime_list_view->scroller()->SetFixedSize( | 284 ime_list_view_->scroller()->SetFixedSize( |
274 gfx::Size(kTrayPopupMaxWidth, GetImeListViewMaxHeight())); | 285 gfx::Size(kTrayPopupMaxWidth, GetImeListViewMaxHeight())); |
275 } | 286 } |
276 // Adds IME list to the bubble. | 287 bubble_view->AddChildView(ime_list_view_); |
277 bubble_view->AddChildView(ime_list_view); | |
278 | 288 |
279 // Adds IME buttons to the bubble if needed. | 289 // Adds IME buttons to the bubble if needed. |
280 LoginStatus login = | 290 LoginStatus login = |
281 WmShell::Get()->system_tray_delegate()->GetUserLoginStatus(); | 291 WmShell::Get()->system_tray_delegate()->GetUserLoginStatus(); |
282 if (login != LoginStatus::NOT_LOGGED_IN && login != LoginStatus::LOCKED && | 292 if (login != LoginStatus::NOT_LOGGED_IN && login != LoginStatus::LOCKED && |
283 !WmShell::Get()->GetSessionStateDelegate()->IsInSecondaryLoginScreen()) | 293 !WmShell::Get()->GetSessionStateDelegate()->IsInSecondaryLoginScreen()) |
284 bubble_view->AddChildView(new ImeButtonsView(false, false, false, true)); | 294 bubble_view->AddChildView(new ImeButtonsView(false, false, false, true)); |
285 | 295 |
286 bubble_.reset(new ash::TrayBubbleWrapper(this, bubble_view)); | 296 bubble_.reset(new TrayBubbleWrapper(this, bubble_view)); |
287 SetDrawBackgroundAsActive(true); | 297 SetDrawBackgroundAsActive(true); |
288 } | 298 } |
289 | 299 |
290 void ImeMenuTray::HideImeMenuBubble() { | 300 void ImeMenuTray::HideImeMenuBubble() { |
291 bubble_.reset(); | 301 bubble_.reset(); |
| 302 ime_list_view_ = nullptr; |
292 SetDrawBackgroundAsActive(false); | 303 SetDrawBackgroundAsActive(false); |
293 } | 304 } |
294 | 305 |
295 } // namespace ash | 306 } // namespace ash |
OLD | NEW |