diff options
Diffstat (limited to 'mozilla-1609732-no-full-hide.patch')
-rw-r--r-- | mozilla-1609732-no-full-hide.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/mozilla-1609732-no-full-hide.patch b/mozilla-1609732-no-full-hide.patch new file mode 100644 index 0000000..9894ed4 --- /dev/null +++ b/mozilla-1609732-no-full-hide.patch @@ -0,0 +1,60 @@ +diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp +--- a/widget/gtk/WindowSurfaceWayland.cpp ++++ b/widget/gtk/WindowSurfaceWayland.cpp +@@ -805,6 +805,10 @@ + mBufferCommitAllowed = false; + + LayoutDeviceIntRect lockedScreenRect = mWindow->GetBounds(); ++ // The window bounds of popup windows contains relative position to ++ // the transient window. We need to remove that effect because by changing ++ // position of the popup window the buffer has not changed its size. ++ lockedScreenRect.x = lockedScreenRect.y = 0; + gfx::IntRect lockSize = aRegion.GetBounds().ToUnknownRect(); + + bool isTransparentPopup = +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -1324,6 +1324,7 @@ + // Fallback to the parent given in nsWindow::Create (most likely the + // toplevel window). + parentGtkWindow = gtk_window_get_transient_for(GTK_WINDOW(mShell)); ++ LOG((" Setting parent from transient: %p [GtkWindow]\n", parentGtkWindow)); + } + // Add current window to the visible popup list + gVisibleWaylandPopupWindows = +@@ -1355,7 +1356,7 @@ + mBounds.width, mBounds.height)); + + GtkWindow* parentGtkWindow = gtk_window_get_transient_for(GTK_WINDOW(mShell)); +- if (!parentGtkWindow) { ++ if (!parentGtkWindow || !GTK_IS_WIDGET(parentGtkWindow)) { + NS_WARNING("Popup has no parent!"); + return; + } +@@ -1431,8 +1432,13 @@ + parentWindow)); + + int x_parent, y_parent; +- gdk_window_get_origin(gtk_widget_get_window(GTK_WIDGET(parentWindow)), +- &x_parent, &y_parent); ++ if (parentWindow) { ++ gdk_window_get_origin(gtk_widget_get_window(GTK_WIDGET(parentWindow)), ++ &x_parent, &y_parent); ++ } else { ++ NS_WARNING(("no parent window, this should not happen for popup!")); ++ x_parent = y_parent = 0; ++ } + + GdkRectangle rect = {aPosition->x - x_parent, aPosition->y - y_parent, 1, 1}; + if (aSize) { +@@ -1470,7 +1476,7 @@ + bool isWidgetVisible = + (sGtkWidgetIsVisible != nullptr) && sGtkWidgetIsVisible(mShell); + if (isWidgetVisible) { +- HideWaylandWindow(); ++ gtk_widget_hide(mShell); + } + + LOG((" requested rect: x: %d y: %d width: %d height: %d\n", rect.x, rect.y, + |