diff --git a/data/org.gnome.nautilus.gschema.xml b/data/org.gnome.nautilus.gschema.xml
index e32cac3e36d722d346abd8594fd301a958a4c323..cbc3290989c8c6c57dfc6dd58001911f856be44d 100644
--- a/data/org.gnome.nautilus.gschema.xml
+++ b/data/org.gnome.nautilus.gschema.xml
@@ -168,6 +168,11 @@
Whether to show hidden files
This key is deprecated and ignored. The “show-hidden” key from “org.gtk.Settings.FileChooser” is now used instead.
+
+ false
+ Whether GTK 4 settings migration happened
+ Whether settings shared with GtkFileChooser have been migrated from their GTK 3 key to the GTK 4 ones.
+
'list-view'
What viewer should be used when searching
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index c3e5881034bb6ff7ca6b3edc887b72710e9e4dfc..5d8d750b975581b905673aa6393de60447c4291c 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -1133,6 +1133,38 @@ icon_theme_changed_callback (GtkIconTheme *icon_theme,
emit_change_signals_for_all_files_in_all_directories ();
}
+static void
+maybe_migrate_gtk_filechooser_preferences (void)
+{
+ if (!g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_MIGRATED_GTK_SETTINGS))
+ {
+ g_autoptr (GSettingsSchema) schema = NULL;
+
+ /* We don't depend on GTK 3. Check whether its schema is installed. */
+ schema = g_settings_schema_source_lookup (g_settings_schema_source_get_default (),
+ "org.gtk.Settings.FileChooser",
+ FALSE);
+ if (schema != NULL)
+ {
+ g_autoptr (GSettings) gtk3_settings = NULL;
+
+ gtk3_settings = g_settings_new_with_path ("org.gtk.Settings.FileChooser",
+ "/org/gtk/settings/file-chooser/");
+ g_settings_set_boolean (gtk_filechooser_preferences,
+ NAUTILUS_PREFERENCES_SORT_DIRECTORIES_FIRST,
+ g_settings_get_boolean (gtk3_settings,
+ NAUTILUS_PREFERENCES_SORT_DIRECTORIES_FIRST));
+ g_settings_set_boolean (gtk_filechooser_preferences,
+ NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES,
+ g_settings_get_boolean (gtk3_settings,
+ NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES));
+ }
+ g_settings_set_boolean (nautilus_preferences,
+ NAUTILUS_PREFERENCES_MIGRATED_GTK_SETTINGS,
+ TRUE);
+ }
+}
+
void
nautilus_application_startup_common (NautilusApplication *self)
{
@@ -1173,6 +1205,7 @@ nautilus_application_startup_common (NautilusApplication *self)
if (g_strcmp0 (g_getenv ("RUNNING_TESTS"), "TRUE") != 0)
{
+ maybe_migrate_gtk_filechooser_preferences ();
nautilus_tag_manager_maybe_migrate_tracker2_data (priv->tag_manager);
}
diff --git a/src/nautilus-global-preferences.c b/src/nautilus-global-preferences.c
index fd6d53e08194d359ff750f8a1825e9751c1341e9..6bc991908f2d767661987cab38997906b7e6aab7 100644
--- a/src/nautilus-global-preferences.c
+++ b/src/nautilus-global-preferences.c
@@ -59,8 +59,8 @@ nautilus_global_preferences_init (void)
nautilus_icon_view_preferences = g_settings_new ("org.gnome.nautilus.icon-view");
nautilus_list_view_preferences = g_settings_new ("org.gnome.nautilus.list-view");
/* Some settings such as show hidden files are shared between Nautilus and GTK file chooser */
- gtk_filechooser_preferences = g_settings_new_with_path ("org.gtk.Settings.FileChooser",
- "/org/gtk/settings/file-chooser/");
+ gtk_filechooser_preferences = g_settings_new_with_path ("org.gtk.gtk4.Settings.FileChooser",
+ "/org/gtk/gtk4/settings/file-chooser/");
gnome_lockdown_preferences = g_settings_new ("org.gnome.desktop.lockdown");
gnome_interface_preferences = g_settings_new ("org.gnome.desktop.interface");
gnome_privacy_preferences = g_settings_new ("org.gnome.desktop.privacy");
diff --git a/src/nautilus-global-preferences.h b/src/nautilus-global-preferences.h
index 5168f383fb06f4fa52094c2d6c63996c235019af..5a73717b3023f3dd90fdf1a80ba0f21c7bec3aeb 100644
--- a/src/nautilus-global-preferences.h
+++ b/src/nautilus-global-preferences.h
@@ -127,6 +127,9 @@ typedef enum
/* Full Text Search enabled */
#define NAUTILUS_PREFERENCES_FTS_ENABLED "fts-enabled"
+/* Gtk settings migration happened */
+#define NAUTILUS_PREFERENCES_MIGRATED_GTK_SETTINGS "migrated-gtk-settings"
+
void nautilus_global_preferences_init (void);
extern GSettings *nautilus_preferences;