summaryrefslogtreecommitdiff
path: root/mozilla-1580174-webrtc-popup.patch
diff options
context:
space:
mode:
authorJan Horak <jhorak@redhat.com>2019-09-12 15:24:58 +0200
committerJan Horak <jhorak@redhat.com>2019-09-12 15:24:58 +0200
commitb686f27745b168b3c60ca8a5cbc5a7da1c687ac1 (patch)
treed671c889bad8bfb88911b57ca06f61438b0ab4c1 /mozilla-1580174-webrtc-popup.patch
parentAdded fix for mozbz#1579849 - partial screen update when page switches (diff)
downloadlibrewolf-fedora-ff-b686f27745b168b3c60ca8a5cbc5a7da1c687ac1.tar.gz
librewolf-fedora-ff-b686f27745b168b3c60ca8a5cbc5a7da1c687ac1.tar.bz2
librewolf-fedora-ff-b686f27745b168b3c60ca8a5cbc5a7da1c687ac1.zip
Fix for disappearing webrtc popups
Diffstat (limited to 'mozilla-1580174-webrtc-popup.patch')
-rw-r--r--mozilla-1580174-webrtc-popup.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/mozilla-1580174-webrtc-popup.patch b/mozilla-1580174-webrtc-popup.patch
new file mode 100644
index 0000000..2d154eb
--- /dev/null
+++ b/mozilla-1580174-webrtc-popup.patch
@@ -0,0 +1,51 @@
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -1155,6 +1155,28 @@
+ }
+ }
+
++bool IsPopupWithoutToplevelParent(nsMenuPopupFrame* aMenuPopupFrame) {
++ // Check if the popup is autocomplete (like tags autocomplete
++ // in the bookmark edit popup).
++ nsAtom* popupId = aMenuPopupFrame->GetContent()->GetID();
++ if (popupId && popupId->Equals(NS_LITERAL_STRING("PopupAutoComplete"))) {
++ return true;
++ }
++
++ // Check if the popup is in popupnotificationcontent (like choosing capture
++ // device when starting webrtc session).
++ nsIFrame* parentFrame = aMenuPopupFrame->GetParent();
++ if (!parentFrame) {
++ return false;
++ }
++ parentFrame = parentFrame->GetParent();
++ if (parentFrame && parentFrame->GetContent()->NodeName().EqualsLiteral(
++ "popupnotificationcontent")) {
++ return true;
++ }
++ return false;
++}
++
+ // Wayland keeps strong popup window hierarchy. We need to track active
+ // (visible) popup windows and make sure we hide popup on the same level
+ // before we open another one on that level. It means that every open
+@@ -1211,10 +1233,14 @@
+ LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
+
+ // If the popup is a regular menu but GetParentMenuWidget() returns
+- // nullptr which means it's connected non-menu parent
+- // (bookmark toolbar for instance).
++ // nullptr which means is not a submenu of any other menu.
+ // In this case use a parent given at nsWindow::Create().
+- if (!parentWindow && !menuPopupFrame->IsContextMenu()) {
++ // But we have to avoid using mToplevelParentWindow in case the popup
++ // is in 'popupnotificationcontent' element or autocomplete popup,
++ // otherwise the popupnotification would disappear when for
++ // example opening a popup with microphone selection.
++ if (!parentWindow && !menuPopupFrame->IsContextMenu() &&
++ !IsPopupWithoutToplevelParent(menuPopupFrame)) {
+ parentWindow =
+ get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow));
+ }
+
bgstack15