diff --git a/src/nautilus-window.c b/src/nautilus-window.c index c81d150d12fcb39e9b66572d85273771356b4e70..c597377ab83217331a06f15e3be32a0eaf1f54e2 100644 --- a/src/nautilus-window.c +++ b/src/nautilus-window.c @@ -2695,6 +2695,23 @@ on_is_maximized_changed (GObject *object, NAUTILUS_WINDOW_STATE_MAXIMIZED, is_maximized); } +static void +screen_changed (GtkWidget *widget, + GdkScreen *old_screen, + gpointer userdata) +{ + GdkScreen *screen = gtk_widget_get_screen (widget); + GdkVisual *visual = gdk_screen_get_rgba_visual (screen); + + if (visual == NULL || !gdk_screen_is_composited (screen)) + { + visual = gdk_screen_get_system_visual (screen); + } + + gtk_widget_set_visual (widget, visual); +} + + static gboolean nautilus_window_delete_event (GtkWidget *widget, GdkEventAny *event) @@ -2778,6 +2795,11 @@ nautilus_window_init (NautilusWindow *window) g_signal_connect (window, "notify::is-maximized", G_CALLBACK (on_is_maximized_changed), NULL); + /* GTK4 uses RGBA visuals by default. When upgrading to it, this can be removed. */ + g_signal_connect (window, "screen-changed", + G_CALLBACK (screen_changed), NULL); + screen_changed (GTK_WIDGET (window), NULL, NULL); + g_signal_connect_object (window->in_app_notification_undo_close_button, "clicked", G_CALLBACK (on_in_app_notification_undo_close_button_clicked), window, 0); g_signal_connect_object (window->in_app_notification_undo_undo_button, "clicked",