summaryrefslogtreecommitdiff
path: root/mozilla-1567434-2.patch
blob: 966118ae4ef5b85861526729c9a08c44f2020b00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -1208,6 +1208,7 @@
       if (frame) {
         menuPopupFrame = do_QueryFrame(frame);
       }
+
       // The popup is not fully created yet (we're called from
       // nsWindow::Create()) or we're toplevel popup without parent.
       // In both cases just use parent which was passed to nsWindow::Create().
@@ -1217,10 +1218,22 @@
         return GTK_WIDGET(parentWidget);
       }
 
+      LOG(("...[%p] is %s\n", (void*)this,
+           menuPopupFrame->IsContextMenu() ? "context menu" : "popup"));
+
       nsWindow* parentWindow =
           static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
       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).
+      // In this case use a parent given at nsWindow::Create().
+      if (!parentWindow && !menuPopupFrame->IsContextMenu()) {
+        parentWindow =
+            get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow));
+      }
+
       if (!parentWindow) {
         LOG(("...[%p] using active/visible popups as a parent [%p]\n",
              (void*)this, gVisibleWaylandPopupWindows->data));

bgstack15