Open Bug 1269166 Opened 4 years ago Updated 3 years ago

All UI Overlays Broken - popup windows are not shown

Categories

(Core :: Widget: Gtk, defect, P3)

46 Branch
x86_64
Linux
defect

Tracking

()

People

(Reporter: frioux, Unassigned)

References

(Blocks 1 open bug)

Details

(Keywords: regression, Whiteboard: tpi:+)

User Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0
Build ID: 20160425114621

Steps to reproduce:

Right click anywhere, type in the Location Bar, or click the hamburger menu.

I can't figure out where else to add this extra info, so I'm adding it here: I'm on Ubuntu 16.04, using the awesome window manager.


Actual results:

Menu doesn't show up, Location Bar suggestions don't show up, hamburger menu doesn't show up.


Expected results:

Menu should show up, Location Bar suggestions should show up, hamburger menu should show up.
FF46 supports Gtk3 now. Do you have Gtk3 on your machine?
Component: Untriaged → Widget: Gtk
Flags: needinfo?(frioux)
Product: Firefox → Core
Yes; I mean, would firefox even run if I didn't have gtk3?  I installed Firefox from the apt-repos; I cannot imagine that the deps would be so broken that I could even install it without having gtk3 installed.
OS: Unspecified → Linux
Hardware: Unspecified → x86_64
This is bizarre; I logged into my computer this morning and the menus work again.  I haven't rebooted, simply come out of suspend and docked my machine.  I wonder if there is a problem with gtk3 and the multi-monitor support?
Ok yeah, I can verify that when I am not plugged into my dock the right-click menu (etc) doesn't show up for firefox.  When I run 

xrandr --output DP2-1  --left-of eDP1 --off  \
       --output DP2-2 --right-of eDP1 --off

it fixes the problem.  That's a workaround for now, but less experienced users would likely not be able to figure that out.
Putting NSPR_LOG_MODULES=Widget:5 in the environment would provide some logging.
It should indicate whether and where the popup windows are shown.

Do mouse clicks behave as the popups are shown or not?
i.e. after attempting to open a context menu, does the first click on a button in another app register or not?
Summary: All UI Overlays Broken → All UI Overlays Broken - popup windows are not shown
Yes they are registering.  Here's a rightclick:

-1227741376[7f03b589f580]: OnEnterNotify: 7f038c954000
-1227741376[7f03b589f580]: GetScreenBounds 1920,19 | 1920x1061
-1227741376[7f03b589f580]: Button 3 press on 7f038c954000
-1227741376[7f03b589f580]: CaptureRollupEvents 7f0365fe0000 1
-1227741376[7f03b589f580]: GrabPointer time=0x01b2fc0a retry=0
-1227741376[7f03b589f580]: GrabPointer: window not visible
-1227741376[7f03b589f580]: nsWindow::Move [7f0365fe0000] 1685.000000 374.000000
-1227741376[7f03b589f580]: nsWindow::Show [7f0365fe0000] state 1
-1227741376[7f03b589f580]: GrabPointer time=0x01b2fc0a retry=1
-1227741376[7f03b589f580]: GrabPointer: window not visible
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f0365fe0000] changed 1 new_window_state 128
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f0365fe0000] changed 1 new_window_state 128
-1227741376[7f03b589f580]: GrabPointer time=0x01b2fc0a retry=1
-1227741376[7f03b589f580]: configure event [7f0365fe0000] 1685 374 235 407
-1227741376[7f03b589f580]: GetScreenBounds 1685,374 | 235x407
-1227741376[7f03b589f580]: Button 3 release on 7f038c954000
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: CaptureRollupEvents 7f0365fe0000 0
-1227741376[7f03b589f580]: ReleaseGrabs
-1227741376[7f03b589f580]: OnLeaveNotify: 7f0365fe0000
-1227741376[7f03b589f580]: OnEnterNotify: 7f038c954000
-1227741376[7f03b589f580]: nsWindow::Show [7f0365fe0000] state 0
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f0365fe0000] changed 1 new_window_state 129
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f0365fe0000] changed 1 new_window_state 129
-1227741376[7f03b589f580]: key_release_event_cb
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: OnLeaveNotify: 7f038c954000


Here's pressing the hamburger menu:


-1227741376[7f03b589f580]: OnEnterNotify: 7f038c954000
-1227741376[7f03b589f580]: GetScreenBounds 1920,19 | 1920x1061
-1227741376[7f03b589f580]: key_release_event_cb
-1227741376[7f03b589f580]: OnLeaveNotify: 7f038c954000
-1227741376[7f03b589f580]: OnEnterNotify: 7f038c954000
-1227741376[7f03b589f580]: OnEnterNotify: 7f038c954000
-1227741376[7f03b589f580]: Button 1 press on 7f038c954000
-1227741376[7f03b589f580]: nsWindow [7f0367d9d800]
-1227741376[7f03b589f580]:      mShell 7f0367d9e230 mContainer 7f03664955f0 mGdkWindow 7f03652fe1d0 0x1600b64
-1227741376[7f03b589f580]: CaptureRollupEvents 7f0367d9d800 1
-1227741376[7f03b589f580]: GrabPointer time=0x01b3cc45 retry=0
-1227741376[7f03b589f580]: GrabPointer: window not visible
-1227741376[7f03b589f580]: nsWindow::NativeMoveResize [7f0367d9d800] 1600 78 320 685
-1227741376[7f03b589f580]: nsWindow::Show [7f0367d9d800] state 1
-1227741376[7f03b589f580]: size_allocate [7f0367d9d800] 0 0 320 685
-1227741376[7f03b589f580]: GrabPointer time=0x01b3cc45 retry=1
-1227741376[7f03b589f580]: GrabPointer: window not visible
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f0367d9d800] changed 129 new_window_state 128
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f0367d9d800] changed 129 new_window_state 128
-1227741376[7f03b589f580]: GrabPointer time=0x01b3cc45 retry=1
-1227741376[7f03b589f580]: configure event [7f0367d9d800] 1600 78 320 685
-1227741376[7f03b589f580]: GetScreenBounds 1600,78 | 320x685
-1227741376[7f03b589f580]: nsWindow::NativeResize [7f0367d9d800] 320 694
-1227741376[7f03b589f580]: size_allocate [7f0367d9d800] 0 0 320 694
-1227741376[7f03b589f580]: configure event [7f0367d9d800] 1600 78 320 694
-1227741376[7f03b589f580]: GetScreenBounds 1600,78 | 320x694
-1227741376[7f03b589f580]: Button 1 release on 7f038c954000
-1227741376[7f03b589f580]: CaptureRollupEvents 7f0367d9d800 0
-1227741376[7f03b589f580]: ReleaseGrabs
-1227741376[7f03b589f580]: CaptureRollupEvents 7f0367d9d800 1
-1227741376[7f03b589f580]: GrabPointer time=0x01b3cd04 retry=0
-1227741376[7f03b589f580]: CaptureRollupEvents 7f0367d9d800 0
-1227741376[7f03b589f580]: ReleaseGrabs
-1227741376[7f03b589f580]: CaptureRollupEvents 7f0367d9d800 1
-1227741376[7f03b589f580]: GrabPointer time=0x01b3cd04 retry=0
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: CaptureRollupEvents 7f0367d9d800 0
-1227741376[7f03b589f580]: ReleaseGrabs
-1227741376[7f03b589f580]: OnLeaveNotify: 7f0367d9d800
-1227741376[7f03b589f580]: OnEnterNotify: 7f038c954000
-1227741376[7f03b589f580]: nsWindow::Show [7f0367d9d800] state 0
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f0367d9d800] changed 1 new_window_state 129
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f0367d9d800] changed 1 new_window_state 129
-1227741376[7f03b589f580]: key_release_event_cb
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: OnLeaveNotify: 7f038c954000


And here's typing 'frew' in the awesomebar:



-1227741376[7f03b589f580]: OnEnterNotify: 7f038c954000
-1227741376[7f03b589f580]: GetScreenBounds 1920,19 | 1920x1061
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: nsWindow [7f03645e9000]
-1227741376[7f03b589f580]:      mShell 7f0364eade30 mContainer 7f036525fa30 mGdkWindow 7f035a8f9be0 0x1600d98
-1227741376[7f03b589f580]: CaptureRollupEvents 7f03645e9000 1
-1227741376[7f03b589f580]: GrabPointer time=0x01b45b56 retry=0
-1227741376[7f03b589f580]: GrabPointer: window not visible
-1227741376[7f03b589f580]: key_release_event_cb
-1227741376[7f03b589f580]: nsWindow::NativeMoveResize [7f03645e9000] 337 81 1583 50
-1227741376[7f03b589f580]: nsWindow::Show [7f03645e9000] state 1
-1227741376[7f03b589f580]: size_allocate [7f03645e9000] 0 0 1583 50
-1227741376[7f03b589f580]: GrabPointer time=0x01b45b56 retry=1
-1227741376[7f03b589f580]: GrabPointer: window not visible
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f03645e9000] changed 129 new_window_state 128
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f03645e9000] changed 129 new_window_state 128
-1227741376[7f03b589f580]: GrabPointer time=0x01b45b56 retry=1
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: configure event [7f03645e9000] 337 81 1583 50
-1227741376[7f03b589f580]: GetScreenBounds 337,81 | 1583x50
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: key_release_event_cb
-1227741376[7f03b589f580]: nsWindow::NativeResize [7f03645e9000] 1583 96
-1227741376[7f03b589f580]: size_allocate [7f03645e9000] 0 0 1583 96
-1227741376[7f03b589f580]: configure event [7f03645e9000] 337 81 1583 96
-1227741376[7f03b589f580]: GetScreenBounds 337,81 | 1583x96
-1227741376[7f03b589f580]: nsWindow::NativeResize [7f03645e9000] 1583 280
-1227741376[7f03b589f580]: size_allocate [7f03645e9000] 0 0 1583 280
-1227741376[7f03b589f580]: configure event [7f03645e9000] 337 81 1583 280
-1227741376[7f03b589f580]: GetScreenBounds 337,81 | 1583x280
-1227741376[7f03b589f580]: key_release_event_cb
-1227741376[7f03b589f580]: key_release_event_cb
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: CaptureRollupEvents 7f03645e9000 0
-1227741376[7f03b589f580]: ReleaseGrabs
-1227741376[7f03b589f580]: CaptureRollupEvents 7f03645e9000 1
-1227741376[7f03b589f580]: GrabPointer time=0x01b46992 retry=0
-1227741376[7f03b589f580]: CaptureRollupEvents 7f03645e9000 0
-1227741376[7f03b589f580]: ReleaseGrabs
-1227741376[7f03b589f580]: nsWindow::Show [7f03645e9000] state 0
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f03645e9000] changed 1 new_window_state 129
-1227741376[7f03b589f580]: nsWindow::OnWindowStateEvent [7f03645e9000] changed 1 new_window_state 129
-1227741376[7f03b589f580]: OnLeaveNotify: 7f03645e9000
-1227741376[7f03b589f580]: OnEnterNotify: 7f038c954000
-1227741376[7f03b589f580]: key_release_event_cb
-1227741376[7f03b589f580]: key_release_event_cb
-1227741376[7f03b589f580]: key_press_event_cb
-1227741376[7f03b589f580]: OnLeaveNotify: 7f038c954000


Again: I saw none of the overlays.
Flags: needinfo?(frioux)
Thanks.  In each case, there are keyboard events immediately before the popup windows are closed.  Do you know what these are?

Keyboard events don't usually cause popups to close, but they will if they trigger a focus change.

xev would give interesting output if there are spurious key events.

NSPR_LOG_MODULES=Widget:5,WidgetFocus:5 includes focus changes in the logging.
Yes, I had to change focus each time to copy paste the output of the logging, and I use my keyboard for that.  I guess next time this happens I'll get you logging including the focus change.
Ok here's the added trace info:

-441092288[7faae469f580]: OnContainerFocusInEvent [7faabb612000]
-441092288[7faae469f580]:   SetFocus 0 [7faabb612000]
-441092288[7faae469f580]:   widget now has focus in SetFocus() [7faabb612000]
-441092288[7faae469f580]: GetScreenBounds 1920,19 | 1920x1061
-441092288[7faae469f580]: Events sent from focus in event [7faabb612000]
-441092288[7faae469f580]: OnEnterNotify: 7faabb612000
-441092288[7faae469f580]: Button 3 press on 7faabb612000
-441092288[7faae469f580]: CaptureRollupEvents 7faaa0349400 1
-441092288[7faae469f580]: GrabPointer time=0x04797889 retry=0
-441092288[7faae469f580]: GrabPointer: window not visible
-441092288[7faae469f580]: nsWindow::NativeMoveResize [7faaa0349400] 1685 570 235 373
-441092288[7faae469f580]: nsWindow::Show [7faaa0349400] state 1
-441092288[7faae469f580]: size_allocate [7faaa0349400] 0 0 235 373
-441092288[7faae469f580]: GrabPointer time=0x04797889 retry=1
-441092288[7faae469f580]: GrabPointer: window not visible
-441092288[7faae469f580]: nsWindow::OnWindowStateEvent [7faaa0349400] changed 1 new_window_state 128
-441092288[7faae469f580]: nsWindow::OnWindowStateEvent [7faaa0349400] changed 1 new_window_state 128
-441092288[7faae469f580]: GrabPointer time=0x04797889 retry=1
-441092288[7faae469f580]: configure event [7faaa0349400] 1685 570 235 373
-441092288[7faae469f580]: GetScreenBounds 1685,570 | 235x373
-441092288[7faae469f580]: configure event [7faaa0349400] 1685 570 235 373
-441092288[7faae469f580]: GetScreenBounds 1685,570 | 235x373
-441092288[7faae469f580]: Button 3 release on 7faabb612000
-441092288[7faae469f580]: Button 1 press on 7faaa0349400
-441092288[7faae469f580]: CaptureRollupEvents 7faaa0349400 0
-441092288[7faae469f580]: ReleaseGrabs
-441092288[7faae469f580]: nsWindow::Show [7faaa0349400] state 0
-441092288[7faae469f580]: nsWindow::OnWindowStateEvent [7faaa0349400] changed 1 new_window_state 129
-441092288[7faae469f580]: nsWindow::OnWindowStateEvent [7faaa0349400] changed 1 new_window_state 129
-441092288[7faae469f580]: OnLeaveNotify: 7faaa0349400
-441092288[7faae469f580]: OnContainerFocusOutEvent [7faabb612000]
-441092288[7faae469f580]: Done with container focus out [7faabb612000]
That all looks as expect thanks.  This time, the window is shown, becomes viewable, and captures pointer events.  The window is hidden when mouse button 1 is pressed.
I don't know why the window is not visible.

Would you expect a 235x373 size window at 1685,570 to be visible, given the screen layout?
Yeah that should be visible.  Firefox is the only window visible, and the monitor is 1920x1080.
There is another monitor though, I assume, because there is a window (The Firefox main window, I guess) of size 1920x1061 at 1920,19.

Seems the main window is on the right monitor, but the popup is on the left?
I think I mentioned this in some of the earlier comments, but maybe it wasn't clear because I didn't quite realize it myself at that time.

Basically, I have three monitors; the left, the right, and the center.  The center has firefox on it, and the center is the screen built into the laptop.  When I take the laptop out of the dock, I suddenly only have one monitor, but everything (except this) works just fine.  So there absolutely shouldn't be another monitor.  My *guess* is that firefox on gtk3 doesn't detect the events from X and displays the popup on the disconnected monitor.  When I manually disable the missing monitors (see command above) firefox goes back to working.

If it's not clear, this absolutely is a regression and didn't happen before the gtk3 port.
My coworker pointed out that this could actually be a nouveau bug and that gtk3 might just be tickling it slightly differently than gtk2 would have.  I am not sure where to go with that or how to debug it or who even to tell about it; but if that's the case, sorry for the noise?
The position of the Firefox main window seems to indicate that the other monitors may still be "virtually" there.  Is the mouse constrained to laptop monitor after undocking?

Still puzzling that the popup should be positioning incorrectly only after undocking.  Can you paste the output of xrandr before and after undocking, please?

What window manager is in use?
(Some WMs use a large virtual screen for virtual desktops.)
Blocks: gtk3
Keywords: regression
xrandr before undock:

Screen 0: minimum 8 x 8, current 5760 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+1920+0 (normal left inverted right x axis y axis) 309mm x 174mm
   1920x1080     60.02*+  59.93  
   1680x1050     59.95    59.88  
   1600x1024     60.17  
   1400x1050     59.98  
   1600x900      60.00  
   1280x1024     60.02  
   1440x900      59.89  
   1280x960      60.00  
   1368x768      60.00  
   1360x768      59.80    59.96  
   1152x864      60.00  
   1280x720      60.00  
   1024x768      60.00  
   1024x576      60.00  
   960x540       60.00  
   800x600       60.32    56.25  
   864x486       60.00  
   640x480       59.94  
   720x405       60.00  
   640x360       60.00  
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP2-1 connected 1920x1080+3840+0 (normal left inverted right x axis y axis) 527mm x 296mm
   1920x1080     60.00*+  50.00    59.94  
   1680x1050     59.88  
   1280x1024     75.02    72.05    60.02  
   1440x900      59.90  
   1152x864      75.00  
   1280x720      60.00    50.00    59.94  
   1024x768      75.08    70.07    60.00  
   800x600       72.19    75.00    60.32  
   720x576       50.00  
   720x480       60.00    59.94  
   640x480       75.00    72.81    66.67    60.00    59.94  
   720x400       70.08  
DP2-2 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 510mm x 287mm
   1920x1080     60.00*+  50.00    59.94  
   1680x1050     59.95  
   1280x1024     75.02    60.02  
   1440x900      74.98    59.89  
   1280x800      59.81  
   1152x864      75.00  
   1280x720      60.00    50.00    59.94  
   1024x768      75.08    70.07    60.00  
   800x600       72.19    75.00    60.32  
   720x576       50.00  
   720x480       60.00    59.94  
   640x480       75.00    72.81    60.00    59.94  
   720x400       70.08  
DP2-3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)


xrandr after:

Screen 0: minimum 8 x 8, current 5760 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+1920+0 (normal left inverted right x axis y axis) 309mm x 174mm
   1920x1080     60.02*+  59.93  
   1680x1050     59.95    59.88  
   1600x1024     60.17  
   1400x1050     59.98  
   1600x900      60.00  
   1280x1024     60.02  
   1440x900      59.89  
   1280x960      60.00  
   1368x768      60.00  
   1360x768      59.80    59.96  
   1152x864      60.00  
   1280x720      60.00  
   1024x768      60.00  
   1024x576      60.00  
   960x540       60.00  
   800x600       60.32    56.25  
   864x486       60.00  
   640x480       59.94  
   720x405       60.00  
   640x360       60.00  
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP2-1 disconnected (normal left inverted right x axis y axis)
DP2-2 disconnected (normal left inverted right x axis y axis)
DP2-3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Window Manager is awesomewm.  Mouse is indeed constrained to the one screen.
(In reply to Arthur Axel "fREW" Schmidt from comment #16)
> xrandr after:
> 
> Screen 0: minimum 8 x 8, current 5760 x 1080, maximum 32767 x 32767
> eDP1 connected primary 1920x1080+1920+0 (normal left inverted right x axis y
> axis) 309mm x 174mm

Thanks.  The screen still covers all the monitors, and awesomewm knows that
some are now disconnected, but Firefox has chosen to show the popup on one of
the disconnected monitors.  That is a bug of course.

I guess the workaround of comment 4 removed the screen space for the
disconnected monitors.
Status: UNCONFIRMED → NEW
Ever confirmed: true
Priority: -- → P3
Whiteboard: tpi:+
You need to log in before you can comment on or make changes to this bug.