diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h --- a/widget/gtk/nsWindow.h +++ b/widget/gtk/nsWindow.h @@ -681,6 +681,7 @@ bool IsMainMenuWindow(); GtkWidget* ConfigureWaylandPopupWindows(); + void PauseRemoteRenderer(); void HideWaylandWindow(); void HideWaylandTooltips(); void HideWaylandPopupAndAllChildren(); diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp --- a/widget/gtk/nsWindow.cpp +++ b/widget/gtk/nsWindow.cpp @@ -1386,10 +1386,10 @@ } if (needsPositionUpdate && needsSizeUpdate) { - Resize(newBounds.x, newBounds.y, newBounds.width, newBounds.height, true); + mBounds = newBounds; NotifyWindowMoved(newBounds.x, newBounds.y); } else if (needsPositionUpdate) { - Move(newBounds.x, newBounds.y); + mBounds = newBounds; NotifyWindowMoved(newBounds.x, newBounds.y); } else { Resize(newBounds.width, newBounds.height, true); @@ -1476,6 +1476,7 @@ bool isWidgetVisible = (sGtkWidgetIsVisible != nullptr) && sGtkWidgetIsVisible(mShell); if (isWidgetVisible) { + PauseRemoteRenderer(); gtk_widget_hide(mShell); } @@ -4497,16 +4498,8 @@ } } -void nsWindow::HideWaylandWindow() { +void nsWindow::PauseRemoteRenderer() { #ifdef MOZ_WAYLAND - if (mWindowType == eWindowType_popup) { - LOG(("nsWindow::HideWaylandWindow: popup [%p]\n", this)); - GList* foundWindow = g_list_find(gVisibleWaylandPopupWindows, this); - if (foundWindow) { - gVisibleWaylandPopupWindows = - g_list_delete_link(gVisibleWaylandPopupWindows, foundWindow); - } - } if (!mIsDestroyed) { if (mContainer && moz_container_has_wl_egl_window(mContainer)) { // Because wl_egl_window is destroyed on moz_container_unmap(), @@ -4529,6 +4522,18 @@ } } #endif +} + +void nsWindow::HideWaylandWindow() { + if (mWindowType == eWindowType_popup) { + LOG(("nsWindow::HideWaylandWindow: popup [%p]\n", this)); + GList* foundWindow = g_list_find(gVisibleWaylandPopupWindows, this); + if (foundWindow) { + gVisibleWaylandPopupWindows = + g_list_delete_link(gVisibleWaylandPopupWindows, foundWindow); + } + } + PauseRemoteRenderer(); gtk_widget_hide(mShell); }