diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp --- a/widget/gtk/nsWindow.cpp +++ b/widget/gtk/nsWindow.cpp @@ -3029,11 +3029,11 @@ #endif } void nsWindow::SetUserTimeAndStartupTokenForActivatedWindow() { nsGTKToolkit* toolkit = nsGTKToolkit::GetToolkit(); - if (!toolkit) { + if (!toolkit || MOZ_UNLIKELY(mWindowType == eWindowType_invisible)) { return; } mWindowActivationTokenFromEnv = toolkit->GetStartupToken(); if (!mWindowActivationTokenFromEnv.IsEmpty()) { @@ -6614,30 +6614,34 @@ return; } } } // Set up usertime/startupID metadata for the created window. - if (mWindowType != eWindowType_invisible) { + // On X11 we use gtk_window_set_startup_id() so we need to call it + // before show. + if (GdkIsX11Display()) { SetUserTimeAndStartupTokenForActivatedWindow(); } if (GdkIsWaylandDisplay()) { if (IsWaylandPopup()) { ShowWaylandPopupWindow(); } else { ShowWaylandToplevelWindow(); } + } else { + LOG(" calling gtk_widget_show(mShell)\n"); + gtk_widget_show(mShell); + } + if (GdkIsWaylandDisplay()) { + SetUserTimeAndStartupTokenForActivatedWindow(); #ifdef MOZ_WAYLAND auto token = std::move(mWindowActivationTokenFromEnv); if (!token.IsEmpty()) { FocusWaylandWindow(token.get()); } #endif - } else { - LOG(" calling gtk_widget_show(mShell)\n"); - gtk_widget_show(mShell); - } - + } if (mHiddenPopupPositioned && IsPopup()) { LOG(" re-position hidden popup window"); gtk_window_move(GTK_WINDOW(mShell), mPopupPosition.x, mPopupPosition.y); mHiddenPopupPositioned = false; }