summaryrefslogtreecommitdiff
path: root/D133209.diff
diff options
context:
space:
mode:
Diffstat (limited to 'D133209.diff')
-rw-r--r--D133209.diff197
1 files changed, 0 insertions, 197 deletions
diff --git a/D133209.diff b/D133209.diff
deleted file mode 100644
index 81908f9..0000000
--- a/D133209.diff
+++ /dev/null
@@ -1,197 +0,0 @@
-diff --git a/widget/gtk/nsGtkKeyUtils.h b/widget/gtk/nsGtkKeyUtils.h
---- a/widget/gtk/nsGtkKeyUtils.h
-+++ b/widget/gtk/nsGtkKeyUtils.h
-@@ -202,6 +202,22 @@
- * from xkb_keymap. We call that from Wayland backend routines.
- */
- static void SetModifierMasks(xkb_keymap* aKeymap);
-+
-+ /**
-+ * Wayland global focus handlers
-+ */
-+ static void SetFocusIn(wl_surface* aFocusSurface, uint32_t aFocusSerial);
-+ static void SetFocusOut(wl_surface* aFocusSurface);
-+ static void GetFocusInfo(wl_surface** aFocusSurface, uint32_t* aFocusSerial);
-+
-+ static void SetSeat(wl_seat* aSeat);
-+ static wl_seat* GetSeat();
-+
-+ /**
-+ * EnsureInstance() is provided on Wayland to register Wayland callbacks
-+ * early.
-+ */
-+ static void EnsureInstance();
- #endif
-
- /**
-@@ -467,6 +483,12 @@
- void SetModifierMask(xkb_keymap* aKeymap, ModifierIndex aModifierIndex,
- const char* aModifierName);
- #endif
-+
-+#ifdef MOZ_WAYLAND
-+ wl_seat* mSeat = nullptr;
-+ wl_surface* mFocusSurface = nullptr;
-+ uint32_t mFocusSerial = 0;
-+#endif
- };
-
- } // namespace widget
-diff --git a/widget/gtk/nsGtkKeyUtils.cpp b/widget/gtk/nsGtkKeyUtils.cpp
---- a/widget/gtk/nsGtkKeyUtils.cpp
-+++ b/widget/gtk/nsGtkKeyUtils.cpp
-@@ -331,6 +331,10 @@
- return sInstance;
- }
-
-+#ifdef MOZ_WAYLAND
-+void KeymapWrapper::EnsureInstance() { (void)GetInstance(); }
-+#endif
-+
- /* static */
- void KeymapWrapper::Shutdown() {
- if (sInstance) {
-@@ -720,10 +724,15 @@
-
- static void keyboard_handle_enter(void* data, struct wl_keyboard* keyboard,
- uint32_t serial, struct wl_surface* surface,
-- struct wl_array* keys) {}
-+ struct wl_array* keys) {
-+ KeymapWrapper::SetFocusIn(surface, serial);
-+}
-+
- static void keyboard_handle_leave(void* data, struct wl_keyboard* keyboard,
- uint32_t serial, struct wl_surface* surface) {
-+ KeymapWrapper::SetFocusOut(surface);
- }
-+
- static void keyboard_handle_key(void* data, struct wl_keyboard* keyboard,
- uint32_t serial, uint32_t time, uint32_t key,
- uint32_t state) {}
-@@ -760,6 +769,7 @@
- if (strcmp(interface, "wl_seat") == 0) {
- auto* seat =
- WaylandRegistryBind<wl_seat>(registry, id, &wl_seat_interface, 1);
-+ KeymapWrapper::SetSeat(seat);
- wl_seat_add_listener(seat, &seat_listener, data);
- }
- }
-@@ -2411,5 +2421,40 @@
- altLatinCharCodes.mShiftedCharCode));
- }
-
-+#ifdef MOZ_WAYLAND
-+void KeymapWrapper::SetFocusIn(wl_surface* aFocusSurface,
-+ uint32_t aFocusSerial) {
-+ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
-+ keymapWrapper->mFocusSurface = aFocusSurface;
-+ keymapWrapper->mFocusSerial = aFocusSerial;
-+}
-+
-+void KeymapWrapper::SetFocusOut(wl_surface* aFocusSurface) {
-+ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
-+ if (aFocusSurface == keymapWrapper->mFocusSurface) {
-+ keymapWrapper->mFocusSurface = nullptr;
-+ keymapWrapper->mFocusSerial = 0;
-+ }
-+}
-+
-+void KeymapWrapper::GetFocusInfo(wl_surface** aFocusSurface,
-+ uint32_t* aFocusSerial) {
-+ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
-+ *aFocusSurface = keymapWrapper->mFocusSurface;
-+ *aFocusSerial = keymapWrapper->mFocusSerial;
-+}
-+
-+void KeymapWrapper::SetSeat(wl_seat* aSeat) {
-+ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
-+ keymapWrapper->mSeat = aSeat;
-+}
-+
-+wl_seat* KeymapWrapper::GetSeat() {
-+ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
-+ return keymapWrapper->mSeat;
-+}
-+
-+#endif
-+
- } // namespace widget
- } // namespace mozilla
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -2862,8 +2862,7 @@
- };
-
- void nsWindow::RequestFocusWaylandWindow(RefPtr<nsWindow> aWindow) {
-- LOG("nsWindow::RequestWindowFocusWayland(%p) gFocusWindow [%p]",
-- (void*)aWindow, gFocusWindow);
-+ LOG("nsWindow::RequestWindowFocusWayland(%p)", (void*)aWindow);
-
- RefPtr<nsWaylandDisplay> display = WaylandDisplayGet();
- xdg_activation_v1* xdg_activation = display->GetXdgActivation();
-@@ -2872,17 +2871,11 @@
- return;
- }
-
-- // We use xdg-activation protocol to transfer focus from gFocusWindow to
-- // aWindow. Quit if no window is focused.
-- if (gFocusWindow != this) {
-- LOG(" there isn't any focused window to transfer focus from, quit.");
-- return;
-- }
--
-- wl_surface* surface =
-- mGdkWindow ? gdk_wayland_window_get_wl_surface(mGdkWindow) : nullptr;
-- if (!surface) {
-- LOG(" requesting window is hidden/unmapped, quit.");
-+ wl_surface* focusSurface;
-+ uint32_t focusSerial;
-+ KeymapWrapper::GetFocusInfo(&focusSurface, &focusSerial);
-+ if (!focusSurface) {
-+ LOG(" We're missing focused window, quit.");
- return;
- }
-
-@@ -2894,9 +2887,9 @@
- // callback.
- xdg_activation_token_v1_add_listener(aWindow->mXdgToken, &token_listener,
- do_AddRef(aWindow).take());
-- xdg_activation_token_v1_set_serial(aWindow->mXdgToken, GetLastUserInputTime(),
-- display->GetSeat());
-- xdg_activation_token_v1_set_surface(aWindow->mXdgToken, surface);
-+ xdg_activation_token_v1_set_serial(aWindow->mXdgToken, focusSerial,
-+ KeymapWrapper::GetSeat());
-+ xdg_activation_token_v1_set_surface(aWindow->mXdgToken, focusSurface);
- xdg_activation_token_v1_commit(aWindow->mXdgToken);
- }
- #endif
-@@ -2959,11 +2952,7 @@
-
- #ifdef MOZ_WAYLAND
- if (GdkIsWaylandDisplay()) {
-- if (gFocusWindow) {
-- gFocusWindow->RequestFocusWaylandWindow(toplevelWindow);
-- } else {
-- LOG(" RequestFocusWaylandWindow(): we're missing focused window!");
-- }
-+ RequestFocusWaylandWindow(toplevelWindow);
- }
- #endif
- if (GTKToolkit) GTKToolkit->SetFocusTimestamp(0);
-@@ -5359,6 +5348,14 @@
- a11y::PreInit();
- #endif
-
-+#ifdef MOZ_WAYLAND
-+ // Ensure that KeymapWrapper is created on Wayland as we need it for
-+ // keyboard focus tracking.
-+ if (GdkIsWaylandDisplay()) {
-+ KeymapWrapper::EnsureInstance();
-+ }
-+#endif
-+
- // Ensure that the toolkit is created.
- nsGTKToolkit::GetToolkit();
-
-
bgstack15