| Index: chrome/browser/ui/gtk/notifications/balloon_view_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/ui/gtk/notifications/balloon_view_gtk.cc (revision 72341)
|
| +++ chrome/browser/ui/gtk/notifications/balloon_view_gtk.cc (working copy)
|
| @@ -102,16 +102,24 @@
|
| html_container_(NULL),
|
| method_factory_(this),
|
| close_button_(NULL),
|
| - animation_(NULL) {
|
| + animation_(NULL),
|
| + menu_showing_(false),
|
| + pending_close_(false) {
|
| }
|
|
|
| BalloonViewImpl::~BalloonViewImpl() {
|
| }
|
|
|
| void BalloonViewImpl::Close(bool by_user) {
|
| - MessageLoop::current()->PostTask(FROM_HERE,
|
| - method_factory_.NewRunnableMethod(
|
| - &BalloonViewImpl::DelayedClose, by_user));
|
| + // Delay a system-initiated close if the menu is showing.
|
| + if (!by_user && menu_showing_) {
|
| + pending_close_ = true;
|
| + } else {
|
| + MessageLoop::current()->PostTask(
|
| + FROM_HERE,
|
| + method_factory_.NewRunnableMethod(
|
| + &BalloonViewImpl::DelayedClose, by_user));
|
| + }
|
| }
|
|
|
| gfx::Size BalloonViewImpl::GetSize() const {
|
| @@ -417,9 +425,17 @@
|
| }
|
|
|
| void BalloonViewImpl::OnOptionsMenuButton(GtkWidget* widget) {
|
| + menu_showing_ = true;
|
| options_menu_->PopupAsContext(gtk_get_current_event_time());
|
| }
|
|
|
| +// Called when the menu stops showing.
|
| +void BalloonViewImpl::StoppedShowing() {
|
| + if (pending_close_)
|
| + DelayedClose(false);
|
| + menu_showing_ = false;
|
| +}
|
| +
|
| gboolean BalloonViewImpl::OnDestroy(GtkWidget* widget) {
|
| frame_container_ = NULL;
|
| Close(false);
|
|
|