Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Side by Side Diff: ash/system/user/user_view.cc

Issue 372373002: Fixing notification message crash on fast dismissal click (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ash/system/user/user_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/system/user/user_view.h" 5 #include "ash/system/user/user_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/multi_profile_uma.h" 9 #include "ash/multi_profile_uma.h"
10 #include "ash/popup_message.h" 10 #include "ash/popup_message.h"
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 UserView::UserView(SystemTrayItem* owner, 204 UserView::UserView(SystemTrayItem* owner,
205 user::LoginStatus login, 205 user::LoginStatus login,
206 MultiProfileIndex index, 206 MultiProfileIndex index,
207 bool for_detailed_view) 207 bool for_detailed_view)
208 : multiprofile_index_(index), 208 : multiprofile_index_(index),
209 user_card_view_(NULL), 209 user_card_view_(NULL),
210 owner_(owner), 210 owner_(owner),
211 is_user_card_button_(false), 211 is_user_card_button_(false),
212 logout_button_(NULL), 212 logout_button_(NULL),
213 add_user_disabled_(false), 213 add_user_disabled_(false),
214 for_detailed_view_(for_detailed_view) { 214 for_detailed_view_(for_detailed_view),
215 focus_manager_(NULL) {
215 CHECK_NE(user::LOGGED_IN_NONE, login); 216 CHECK_NE(user::LOGGED_IN_NONE, login);
216 if (!index) { 217 if (!index) {
217 // Only the logged in user will have a background. All other users will have 218 // Only the logged in user will have a background. All other users will have
218 // to allow the TrayPopupContainer highlighting the menu line. 219 // to allow the TrayPopupContainer highlighting the menu line.
219 set_background(views::Background::CreateSolidBackground( 220 set_background(views::Background::CreateSolidBackground(
220 login == user::LOGGED_IN_PUBLIC ? kPublicAccountBackgroundColor 221 login == user::LOGGED_IN_PUBLIC ? kPublicAccountBackgroundColor
221 : kBackgroundColor)); 222 : kBackgroundColor));
222 } 223 }
223 SetLayoutManager(new views::BoxLayout( 224 SetLayoutManager(new views::BoxLayout(
224 views::BoxLayout::kHorizontal, 0, 0, kTrayPopupPaddingBetweenItems)); 225 views::BoxLayout::kHorizontal, 0, 0, kTrayPopupPaddingBetweenItems));
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 } 527 }
527 } 528 }
528 // Find the screen area which encloses both elements and sets then a mouse 529 // Find the screen area which encloses both elements and sets then a mouse
529 // watcher which will close the "menu". 530 // watcher which will close the "menu".
530 gfx::Rect area = user_card_view_->GetBoundsInScreen(); 531 gfx::Rect area = user_card_view_->GetBoundsInScreen();
531 area.set_height(2 * area.height()); 532 area.set_height(2 * area.height());
532 mouse_watcher_.reset( 533 mouse_watcher_.reset(
533 new views::MouseWatcher(new UserViewMouseWatcherHost(area), this)); 534 new views::MouseWatcher(new UserViewMouseWatcherHost(area), this));
534 mouse_watcher_->Start(); 535 mouse_watcher_->Start();
535 // Install a listener to focus changes so that we can remove the card when 536 // Install a listener to focus changes so that we can remove the card when
536 // the focus gets changed. 537 // the focus gets changed. When called through the destruction of the bubble,
537 user_card_view_->GetFocusManager()->AddFocusChangeListener(this); 538 // the FocusManager cannot be determined anymore and we remember it here.
539 focus_manager_ = user_card_view_->GetFocusManager();
540 focus_manager_->AddFocusChangeListener(this);
538 } 541 }
539 542
540 void UserView::RemoveAddUserMenuOption() { 543 void UserView::RemoveAddUserMenuOption() {
541 if (!add_menu_option_.get()) 544 if (!add_menu_option_.get())
542 return; 545 return;
543 user_card_view_->GetFocusManager()->RemoveFocusChangeListener(this); 546 focus_manager_->RemoveFocusChangeListener(this);
544 user_card_view_->GetFocusManager()->ClearFocus(); 547 focus_manager_ = NULL;
548 if (user_card_view_->GetFocusManager())
549 user_card_view_->GetFocusManager()->ClearFocus();
545 popup_message_.reset(); 550 popup_message_.reset();
546 mouse_watcher_.reset(); 551 mouse_watcher_.reset();
547 add_menu_option_.reset(); 552 add_menu_option_.reset();
548 } 553 }
549 554
550 } // namespace tray 555 } // namespace tray
551 } // namespace ash 556 } // namespace ash
OLDNEW
« no previous file with comments | « ash/system/user/user_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698