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));
|