summaryrefslogtreecommitdiff
path: root/mochitest-wayland-workaround.patch
blob: 6f77b79239433483aea5018a3454792aa16bfb92 (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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
diff -up firefox-89.0/dom/base/test/browser_multiple_popups.js.mochitest-wayland-workaround firefox-89.0/dom/base/test/browser_multiple_popups.js
--- firefox-89.0/dom/base/test/browser_multiple_popups.js.mochitest-wayland-workaround	2021-05-27 22:29:44.000000000 +0200
+++ firefox-89.0/dom/base/test/browser_multiple_popups.js	2021-06-01 10:02:59.648432325 +0200
@@ -265,6 +265,7 @@ add_task(async _ => {
   info("All opened from chrome.");
   await withTestPage(2, { chrome: true }, async function(browser) {
     await BrowserTestUtils.synthesizeMouseAtCenter("#openPopups", {}, browser);
+    await BrowserTestUtils.synthesizeMouseAtCenter("#openPopups", {}, browser);
   });
 });
 
diff -up firefox-89.0/dom/ipc/BrowserChild.cpp.mochitest-wayland-workaround firefox-89.0/dom/ipc/BrowserChild.cpp
--- firefox-89.0/dom/ipc/BrowserChild.cpp.mochitest-wayland-workaround	2021-05-27 22:29:44.000000000 +0200
+++ firefox-89.0/dom/ipc/BrowserChild.cpp	2021-06-01 10:02:59.649432346 +0200
@@ -457,7 +457,7 @@ nsresult BrowserChild::Init(mozIDOMWindo
   }
   mPuppetWidget->InfallibleCreate(nullptr,
                                   nullptr,  // no parents
-                                  LayoutDeviceIntRect(0, 0, 0, 0),
+                                  LayoutDeviceIntRect(0, 0, 1000, 1000),
                                   nullptr);  // HandleWidgetEvent
 
   mWebBrowser = nsWebBrowser::Create(this, mPuppetWidget, mBrowsingContext,
diff -up firefox-89.0/toolkit/components/browser/nsWebBrowser.cpp.mochitest-wayland-workaround firefox-89.0/toolkit/components/browser/nsWebBrowser.cpp
--- firefox-89.0/toolkit/components/browser/nsWebBrowser.cpp.mochitest-wayland-workaround	2021-05-27 22:29:54.000000000 +0200
+++ firefox-89.0/toolkit/components/browser/nsWebBrowser.cpp	2021-06-01 10:02:59.649432346 +0200
@@ -150,7 +150,8 @@ already_AddRefed<nsWebBrowser> nsWebBrow
   // handler that always gets called (even for subframes) for any bubbling
   // event.
 
-  nsresult rv = docShell->InitWindow(nullptr, docShellParentWidget, 0, 0, 0, 0);
+  nsresult rv =
+      docShell->InitWindow(nullptr, docShellParentWidget, 0, 0, 1000, 1000);
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return nullptr;
   }
diff -up firefox-89.0/widget/gtk/nsWindow.cpp.mochitest-wayland-workaround firefox-89.0/widget/gtk/nsWindow.cpp
--- firefox-89.0/widget/gtk/nsWindow.cpp.mochitest-wayland-workaround	2021-06-01 10:02:59.644432243 +0200
+++ firefox-89.0/widget/gtk/nsWindow.cpp	2021-06-01 10:04:28.715262874 +0200
@@ -2225,11 +2225,22 @@ void nsWindow::SetFocus(Raise aRaise, mo
                                false)) {
         // Wayland does not support focus changes so we need to workaround it
         // by window hide/show sequence.
-        owningWindow->NativeShow(false);
+        LOG(("Applying Wayland focus workaround for nsWindow %p\n",
+             owningWindow.get()));
+        GtkAllocation allocation;
+        gtk_widget_get_allocation(GTK_WIDGET(mContainer), &allocation);
+        LOG(("    mShell allocation %d %d -> %d %d\n", allocation.x,
+             allocation.y, allocation.width, allocation.height));
+        owningWindow->Show(false);
         RefPtr<nsWindow> self(owningWindow);
-        NS_DispatchToMainThread(NS_NewRunnableFunction(
-            "nsWindow::NativeShow()",
-            [self]() -> void { self->NativeShow(true); }));
+        const GtkAllocation alloc = allocation;
+        NS_DispatchToMainThread(
+            NS_NewRunnableFunction("nsWindow::Show()", [self, alloc]() -> void {
+              self->Show(true);
+              GtkAllocation al = alloc;
+              self->mBounds.width = self->mBounds.height = 1;
+              self->OnSizeAllocate(&al);
+            }));
         return;
       }
 
@@ -7962,6 +7973,8 @@ nsresult nsWindow::SynthesizeNativeMouse
     nsIObserver* aObserver) {
   AutoObserverNotifier notifier(aObserver, "mouseevent");
 
+  LOG(("nsWindow::SynthesizeNativeMouseEvent [%p]\n", (void*)this));
+
   if (!mGdkWindow) {
     return NS_OK;
   }
@@ -7976,6 +7989,12 @@ nsresult nsWindow::SynthesizeNativeMouse
   switch (aNativeMessage) {
     case NativeMouseMessage::ButtonDown:
     case NativeMouseMessage::ButtonUp: {
+      if (aNativeMessage == NativeMouseMessage::ButtonDown) {
+        LOG(("    NativeMouseMessage::ButtonDown()\n"));
+      } else {
+        LOG(("    NativeMouseMessage::ButtonUp()\n"));
+      }
+
       GdkEvent event;
       memset(&event, 0, sizeof(GdkEvent));
       event.type = aNativeMessage == NativeMouseMessage::ButtonDown
bgstack15