diff options
Diffstat (limited to 'D133634.diff')
-rw-r--r-- | D133634.diff | 119 |
1 files changed, 0 insertions, 119 deletions
diff --git a/D133634.diff b/D133634.diff deleted file mode 100644 index 3c9d642..0000000 --- a/D133634.diff +++ /dev/null @@ -1,119 +0,0 @@ -diff --git a/widget/gtk/nsGtkKeyUtils.cpp b/widget/gtk/nsGtkKeyUtils.cpp ---- a/widget/gtk/nsGtkKeyUtils.cpp -+++ b/widget/gtk/nsGtkKeyUtils.cpp -@@ -2424,17 +2424,23 @@ - #ifdef MOZ_WAYLAND - void KeymapWrapper::SetFocusIn(wl_surface* aFocusSurface, - uint32_t aFocusSerial) { -+ LOGW("KeymapWrapper::SetFocusIn() surface %p ID %d serial %d", aFocusSurface, -+ aFocusSurface ? wl_proxy_get_id((struct wl_proxy*)aFocusSurface) : 0, -+ aFocusSerial); -+ - KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance(); - keymapWrapper->mFocusSurface = aFocusSurface; - keymapWrapper->mFocusSerial = aFocusSerial; - } - -+// aFocusSurface can be null in case that focused surface is already destroyed. - void KeymapWrapper::SetFocusOut(wl_surface* aFocusSurface) { - KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance(); -- if (aFocusSurface == keymapWrapper->mFocusSurface) { -- keymapWrapper->mFocusSurface = nullptr; -- keymapWrapper->mFocusSerial = 0; -- } -+ LOGW("KeymapWrapper::SetFocusOut surface %p ID %d", aFocusSurface, -+ aFocusSurface ? wl_proxy_get_id((struct wl_proxy*)aFocusSurface) : 0); -+ -+ keymapWrapper->mFocusSurface = nullptr; -+ keymapWrapper->mFocusSerial = 0; - } - - void KeymapWrapper::GetFocusInfo(wl_surface** aFocusSurface, -@@ -2453,7 +2459,6 @@ - KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance(); - return keymapWrapper->mSeat; - } -- - #endif - - } // namespace widget -diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h ---- a/widget/gtk/nsWindow.h -+++ b/widget/gtk/nsWindow.h -@@ -386,8 +386,7 @@ - - #ifdef MOZ_WAYLAND - // Use xdg-activation protocol to transfer focus from gFocusWindow to aWindow. -- // RequestFocusWaylandWindow needs to be called on focused window only. -- void RequestFocusWaylandWindow(RefPtr<nsWindow> aWindow); -+ static void RequestFocusWaylandWindow(RefPtr<nsWindow> aWindow); - void FocusWaylandWindow(const char* aTokenID); - - bool GetCSDDecorationOffset(int* aDx, int* aDy); -diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp ---- a/widget/gtk/nsWindow.cpp -+++ b/widget/gtk/nsWindow.cpp -@@ -2845,6 +2845,9 @@ - return; - } - -+ LOG(" requesting xdg-activation, surface ID %d", -+ wl_proxy_get_id((struct wl_proxy*)surface)); -+ - xdg_activation_v1* xdg_activation = WaylandDisplayGet()->GetXdgActivation(); - xdg_activation_v1_activate(xdg_activation, aTokenID, surface); - } -@@ -2862,12 +2865,17 @@ - }; - - void nsWindow::RequestFocusWaylandWindow(RefPtr<nsWindow> aWindow) { -- LOG("nsWindow::RequestWindowFocusWayland(%p)", (void*)aWindow); -+ LOGW("nsWindow::RequestFocusWaylandWindow(%p) gFocusWindow %p", -+ (void*)aWindow, gFocusWindow); -+ -+ if (!gFocusWindow) { -+ LOGW(" missing gFocusWindow, quit."); -+ } - - RefPtr<nsWaylandDisplay> display = WaylandDisplayGet(); - xdg_activation_v1* xdg_activation = display->GetXdgActivation(); - if (!xdg_activation) { -- LOG(" xdg-activation is missing, quit."); -+ LOGW(" xdg-activation is missing, quit."); - return; - } - -@@ -2875,13 +2883,25 @@ - uint32_t focusSerial; - KeymapWrapper::GetFocusInfo(&focusSurface, &focusSerial); - if (!focusSurface) { -- LOG(" We're missing focused window, quit."); -- return; -- } -- -- LOG(" requesting xdg-activation token, surface ID %d serial %d seat ID %d", -- wl_proxy_get_id((struct wl_proxy*)focusSurface), focusSerial, -- wl_proxy_get_id((struct wl_proxy*)KeymapWrapper::GetSeat())); -+ LOGW(" We're missing focused window, quit."); -+ return; -+ } -+ -+ GdkWindow* gdkWindow = gtk_widget_get_window(gFocusWindow->mShell); -+ wl_surface* surface = -+ gdkWindow ? gdk_wayland_window_get_wl_surface(gdkWindow) : nullptr; -+ if (focusSurface != surface) { -+ LOGW(" focused surface %p and gFocusWindow surface %p don't match, quit.", -+ focusSurface, surface); -+ return; -+ } -+ -+ LOGW( -+ " requesting xdg-activation token, surface %p ID %d serial %d seat ID " -+ "%d", -+ focusSurface, -+ focusSurface ? wl_proxy_get_id((struct wl_proxy*)focusSurface) : 0, -+ focusSerial, wl_proxy_get_id((struct wl_proxy*)KeymapWrapper::GetSeat())); - - // Store activation token at activated window for further release. - g_clear_pointer(&aWindow->mXdgToken, xdg_activation_token_v1_destroy); - |