New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 789377 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: Nov 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Mac
Pri: 1
Type: Bug

Blocking:
issue 603386
issue 784574



Sign in to add a comment

MacViews - bubbles do not dismiss when rapidly clicking

Project Member Reported by tapted@chromium.org, Nov 29 2017

Issue description

Chrome Version       : 64.0.3269.3
OS Version: OS X 10.12.6

What steps will reproduce the problem?
1. Mash the profile switcher button with clicks

What is the expected result?

profile switcher should appear and disappear with each pair of clicks


What happens instead of that?

stays open.


Views bubbles are relying on activation changes:

 void BubbleDialogDelegateView::OnWidgetActivationChanged(Widget* widget,
                                                          bool active) {
   if (close_on_deactivate() && widget == GetWidget() && !active)
     GetWidget()->Close();
 }


But it looks like the mac window server suppresses activation changes when clicking rapidly. For Cocoa bubbles, we install an event tap and call -[NSWindow windowDidResignKey:] directly with a handcrafted NSNotification -- https://cs.chromium.org/chromium/src/chrome/browser/ui/cocoa/base_bubble_controller.mm?q=registerKeyStateEventTap&sq=package:chromium&l=358

Installing an event tap is easy with views::EventMonitor, but we probably want to wrap up this logic and sahre it since there's some quirky stuff with window levels.


See context at  http://crbug.com/784574#c19 
 

Comment 1 by tapted@chromium.org, Nov 29 2017

https://chromium-review.googlesource.com/795611 seems to do the trick

Comment 2 by shrike@chromium.org, Nov 29 2017

Blocking: 784574

Comment 3 by shrike@chromium.org, Nov 29 2017

Labels: -Pri-3 M-64 ReleaseBlock-Stable Pri-1
Project Member

Comment 4 by bugdroid1@chromium.org, Nov 30 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9cedd9c6854a7fb14a2bb8e1c52293641deea536

commit 9cedd9c6854a7fb14a2bb8e1c52293641deea536
Author: Trent Apted <tapted@chromium.org>
Date: Thu Nov 30 01:16:18 2017

MacViews: Share logic with Cocoa bubbles for dismissing on clicks.

MacOS suppresses window activation events when clicking rapidly, so to
get menu-like behavior on popups we need to monitor clicks explicitly.
Currently, clicking rapidly on browser buttons that summon MacViews
popups does not give the expected behavior.

Share the logic from base_bubble_controller.mm that does this, and use
it in views::BubbleDialogDelegate.

Bug:  789377 
Change-Id: I6f38fe70032ffdff6707651f322500de612d002e
Reviewed-on: https://chromium-review.googlesource.com/795611
Commit-Queue: Trent Apted <tapted@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Reviewed-by: Michael Wasserman <msw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#520367}
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/chrome/browser/ui/BUILD.gn
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/chrome/browser/ui/cocoa/base_bubble_controller.h
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/chrome/browser/ui/cocoa/base_bubble_controller.mm
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/chrome/browser/ui/cocoa/base_bubble_controller_unittest.mm
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/chrome/browser/ui/cocoa/menu_button_unittest.mm
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/chrome/browser/ui/cocoa/tabs/tab_controller_unittest.mm
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/chrome/browser/ui/cocoa/toolbar/reload_button_unittest.mm
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/ui/base/BUILD.gn
[add] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/ui/base/cocoa/bubble_closer.h
[add] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/ui/base/cocoa/bubble_closer.mm
[add] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/ui/base/cocoa/bubble_closer_unittest.mm
[rename] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/ui/base/test/menu_test_observer.h
[rename] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/ui/base/test/menu_test_observer.mm
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/ui/views/bubble/bubble_dialog_delegate.cc
[modify] https://crrev.com/9cedd9c6854a7fb14a2bb8e1c52293641deea536/ui/views/bubble/bubble_dialog_delegate.h

Comment 5 by tapted@chromium.org, Nov 30 2017

Status: Fixed (was: Started)
Labels: Merge-TBD
[Auto-generated comment by a script] We noticed that this issue is targeted for M-64; it appears the fix may have landed after branch point, meaning a merge might be required. Please confirm if a merge is required here - if so add Merge-Request-64 label, otherwise remove Merge-TBD label. Thanks.
Labels: -Merge-TBD

Sign in to add a comment