summaryrefslogtreecommitdiff
path: root/D53011-remote-content-disappear-fix.diff
diff options
context:
space:
mode:
Diffstat (limited to 'D53011-remote-content-disappear-fix.diff')
-rw-r--r--D53011-remote-content-disappear-fix.diff98
1 files changed, 0 insertions, 98 deletions
diff --git a/D53011-remote-content-disappear-fix.diff b/D53011-remote-content-disappear-fix.diff
deleted file mode 100644
index f7c9f38..0000000
--- a/D53011-remote-content-disappear-fix.diff
+++ /dev/null
@@ -1,98 +0,0 @@
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
-@@ -401,6 +401,8 @@
- #ifdef MOZ_WAYLAND
- virtual nsresult GetScreenRect(LayoutDeviceIntRect* aRect) override;
- #endif
-+ bool IsRemoteContent() { return HasRemoteContent(); }
-+ static void HideWaylandOpenedPopups();
-
- protected:
- virtual ~nsWindow();
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -1165,6 +1165,14 @@
- }
- }
-
-+void nsWindow::HideWaylandOpenedPopups() {
-+ while (gVisibleWaylandPopupWindows) {
-+ nsWindow* window =
-+ static_cast<nsWindow*>(gVisibleWaylandPopupWindows->data);
-+ window->HideWaylandWindow();
-+ }
-+}
-+
- // Hide popup nsWindows which are no longer in the nsXULPopupManager widget
- // chain list.
- void nsWindow::CleanupWaylandPopups() {
-@@ -1218,7 +1226,10 @@
- // popup needs to have an unique parent.
- GtkWidget* nsWindow::ConfigureWaylandPopupWindows() {
- MOZ_ASSERT(this->mWindowType == eWindowType_popup);
-- LOG(("nsWindow::ConfigureWaylandPopupWindows [%p]\n", (void*)this));
-+ LOG(
-+ ("nsWindow::ConfigureWaylandPopupWindows [%p], frame %p hasRemoteContent "
-+ "%d\n",
-+ (void*)this, this->GetFrame(), this->HasRemoteContent()));
- #if DEBUG
- if (this->GetFrame() && this->GetFrame()->GetContent()->GetID()) {
- nsCString nodeId;
-@@ -1245,14 +1256,14 @@
- // gVisibleWaylandPopupWindows which were not yet been hidden.
- CleanupWaylandPopups();
- // Since the popups are shown by unknown order it can happen that child
-- // popup is shown before parent popup. The
-+ // popup is shown before parent popup.
- // We look for the current window parent in nsXULPopupManager since it
- // always has correct popup hierarchy while gVisibleWaylandPopupWindows may
- // not.
- nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
- AutoTArray<nsIWidget*, 5> widgetChain;
- pm->GetSubmenuWidgetChain(&widgetChain);
-- for (unsigned long i = 0; i < widgetChain.Length(); i++) {
-+ for (unsigned long i = 0; i < widgetChain.Length() - 1; i++) {
- unsigned long parentIndex = i + 1;
- if (widgetChain.Length() > parentIndex && widgetChain[i] == this) {
- nsWindow* parentWindow =
-@@ -1264,6 +1275,29 @@
- }
- }
- } else {
-+ // Panels usually ends there
-+ if (gVisibleWaylandPopupWindows && HasRemoteContent()) {
-+ // If the new panel is remote content, we need to close all other popups
-+ // before to keep the correct hierarchy because the remote content popup
-+ // can replace the overflow-widget panel.
-+ HideWaylandOpenedPopups();
-+ } else if (gVisibleWaylandPopupWindows) {
-+ // If there is any remote content panel currently opened, close all
-+ // opened popups to keep the correct hierarchy.
-+ GList* popupList = gVisibleWaylandPopupWindows;
-+ while (popupList) {
-+ nsWindow* waylandWnd = static_cast<nsWindow*>(popupList->data);
-+ LOG((" Checking [%p] IsRemoteContent %d\n", popupList->data,
-+ waylandWnd->IsRemoteContent()));
-+ if (waylandWnd->IsRemoteContent()) {
-+ // close all popups including remote content before showing our panel
-+ // Most likely returning from addon panel to overflow-widget.
-+ HideWaylandOpenedPopups();
-+ break;
-+ }
-+ popupList = popupList->next;
-+ }
-+ }
- // For popups in panels use the last opened popup window as parent,
- // panels are not stored in nsXULPopupManager.
- if (gVisibleWaylandPopupWindows) {
-@@ -4380,6 +4414,7 @@
- void nsWindow::HideWaylandWindow() {
- #ifdef MOZ_WAYLAND
- if (mWindowType == eWindowType_popup) {
-+ LOG(("nsWindow::HideWaylandWindow: popup [%p]\n", this));
- GList* foundWindow = g_list_find(gVisibleWaylandPopupWindows, this);
- if (foundWindow) {
- gVisibleWaylandPopupWindows =
-
bgstack15