diff -up firefox-102.2.0/widget/gtk/nsWindow.cpp.D110204-fscreen.diff firefox-102.2.0/widget/gtk/nsWindow.cpp --- firefox-102.2.0/widget/gtk/nsWindow.cpp.D110204-fscreen.diff 2022-08-18 21:54:09.000000000 +0200 +++ firefox-102.2.0/widget/gtk/nsWindow.cpp 2022-09-02 15:55:18.023843940 +0200 @@ -96,6 +96,7 @@ #include "ScreenHelperGTK.h" #include "SystemTimeConverter.h" #include "WidgetUtilsGtk.h" +#include "nsIBrowserHandler.h" #ifdef ACCESSIBILITY # include "mozilla/a11y/LocalAccessible.h" @@ -169,7 +170,8 @@ const gint kEvents = GDK_TOUCHPAD_GESTUR GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_SMOOTH_SCROLL_MASK | GDK_TOUCH_MASK | GDK_SCROLL_MASK | - GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK; + GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK | + GDK_FOCUS_CHANGE_MASK; /* utility functions */ static bool is_mouse_in_window(GdkWindow* aWindow, gdouble aMouseX, @@ -408,7 +410,8 @@ nsWindow::nsWindow() mMovedAfterMoveToRect(false), mResizedAfterMoveToRect(false), mConfiguredClearColor(false), - mGotNonBlankPaint(false) { + mGotNonBlankPaint(false), + mPendingFullscreen(false) { mWindowType = eWindowType_child; mSizeConstraints.mMaxSize = GetSafeWindowSize(mSizeConstraints.mMaxSize); @@ -4814,6 +4817,19 @@ void nsWindow::OnWindowStateEvent(GtkWid ClearTransparencyBitmap(); } } + + // Hack to ensure window switched to fullscreen - avoid to fail when starting + // in kiosk mode + if (mPendingFullscreen && + !(aEvent->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) { + LOG( + " Window should be fullscreen, but it's not, retrying set to " + "fullscreen.\n"); + MakeFullScreen(true); + } else { + LOG(" Window successfully switched to fullscreen, happy now\n"); + mPendingFullscreen = false; + } } void nsWindow::OnDPIChanged() { @@ -7042,6 +7058,19 @@ nsresult nsWindow::MakeFullScreen(bool a } } + // if in kiosk, ensure the fullscreen is called + nsCOMPtr browserHandler = + do_GetService("@mozilla.org/browser/clh;1"); + if (browserHandler) { + bool isKiosk; + browserHandler->GetKiosk(&isKiosk); + if (isKiosk) { + LOG(" is kiosk, ensure the window switch to fullscreen\n"); + mPendingFullscreen = true; + } + } else { + LOG(" Cannot find the browserHandler service.\n"); + } gtk_window_fullscreen(GTK_WINDOW(mShell)); } else { mSizeMode = mLastSizeMode; diff -up firefox-102.2.0/widget/gtk/nsWindow.h.D110204-fscreen.diff firefox-102.2.0/widget/gtk/nsWindow.h --- firefox-102.2.0/widget/gtk/nsWindow.h.D110204-fscreen.diff 2022-08-18 21:53:52.000000000 +0200 +++ firefox-102.2.0/widget/gtk/nsWindow.h 2022-09-02 08:17:07.606010905 +0200 @@ -712,6 +712,7 @@ class nsWindow final : public nsBaseWidg * move-to-rect callback we set mMovedAfterMoveToRect/mResizedAfterMoveToRect. */ bool mWaitingForMoveToRectCallback : 1; + bool mPendingFullscreen : 1; bool mMovedAfterMoveToRect : 1; bool mResizedAfterMoveToRect : 1;