@@ -1626,6 +1626,10 @@ zoom_level_changed_callback (NemoView *view,
16261626 nemo_window_sync_zoom_widgets (window );
16271627}
16281628
1629+ /* Forward declarations */
1630+ static void nemo_window_preview_pane_on_internal (NemoWindow * window , gboolean write_metadata );
1631+ static void nemo_window_preview_pane_off_internal (NemoWindow * window , gboolean write_metadata );
1632+
16291633/* Check if any slot in the window (across all panes and tabs) has
16301634 * preview pane enabled in its metadata, excluding the given slot.
16311635 */
@@ -1672,13 +1676,15 @@ any_other_slot_wants_preview_pane (NemoWindow *window,
16721676/* Synchronize the preview pane state based on a slot's directory metadata.
16731677 * This checks the slot's current directory's saved preference and applies it,
16741678 * taking into account whether other slots in the window want the preview pane.
1679+ * If no metadata is saved for this directory, uses the default from GSettings.
16751680 */
16761681static void
16771682sync_preview_pane_from_slot_metadata (NemoWindow * window ,
16781683 NemoWindowSlot * slot )
16791684{
16801685 NemoFile * directory_file ;
16811686 gboolean show_preview ;
1687+ gboolean default_show_preview ;
16821688
16831689 if (slot == NULL || slot -> content_view == NULL ) {
16841690 return ;
@@ -1689,17 +1695,23 @@ sync_preview_pane_from_slot_metadata (NemoWindow *window,
16891695 return ;
16901696 }
16911697
1698+ /* Get the default from GSettings - this is used when directory has no saved metadata */
1699+ default_show_preview = g_settings_get_boolean (nemo_preferences ,
1700+ NEMO_PREFERENCES_SHOW_PREVIEW_PANE );
1701+
1702+ /* Get the preview pane preference: uses directory metadata if saved,
1703+ * otherwise falls back to the GSettings default */
16921704 show_preview = nemo_file_get_boolean_metadata (directory_file ,
16931705 NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE ,
1694- FALSE );
1706+ default_show_preview );
16951707
1696- /* Apply the saved state */
1708+ /* Apply the saved state (don't write metadata - this is automatic sync, not user action) */
16971709 if (show_preview && !window -> details -> show_preview_pane ) {
1698- nemo_window_preview_pane_on (window );
1710+ nemo_window_preview_pane_on_internal (window , FALSE );
16991711 } else if (!show_preview && window -> details -> show_preview_pane ) {
17001712 /* Only close preview pane if no other slot wants it */
17011713 if (!any_other_slot_wants_preview_pane (window , slot )) {
1702- nemo_window_preview_pane_off (window );
1714+ nemo_window_preview_pane_off_internal (window , FALSE );
17031715 }
17041716 }
17051717}
@@ -2546,8 +2558,9 @@ nemo_window_split_view_showing (NemoWindow *window)
25462558 return g_list_length (NEMO_WINDOW (window )-> details -> panes ) > 1 ;
25472559}
25482560
2549- void
2550- nemo_window_preview_pane_on (NemoWindow * window )
2561+ static void
2562+ nemo_window_preview_pane_on_internal (NemoWindow * window ,
2563+ gboolean write_metadata )
25512564{
25522565 NemoWindowSlot * slot ;
25532566 GList * selection ;
@@ -2602,8 +2615,8 @@ nemo_window_preview_pane_on (NemoWindow *window)
26022615 window -> details -> show_preview_pane = TRUE;
26032616 // nemo_window_update_show_hide_ui_elements (window);
26042617
2605- /* Save preview pane state to directory metadata */
2606- if (slot != NULL && slot -> content_view != NULL ) {
2618+ /* Save preview pane state to directory metadata (only if explicitly requested) */
2619+ if (write_metadata && slot != NULL && slot -> content_view != NULL ) {
26072620 NemoFile * directory_file ;
26082621
26092622 directory_file = nemo_view_get_directory_as_file (slot -> content_view );
@@ -2620,7 +2633,15 @@ nemo_window_preview_pane_on (NemoWindow *window)
26202633}
26212634
26222635void
2623- nemo_window_preview_pane_off (NemoWindow * window )
2636+ nemo_window_preview_pane_on (NemoWindow * window )
2637+ {
2638+ /* User-triggered action: write metadata to remember this choice */
2639+ nemo_window_preview_pane_on_internal (window , TRUE);
2640+ }
2641+
2642+ static void
2643+ nemo_window_preview_pane_off_internal (NemoWindow * window ,
2644+ gboolean write_metadata )
26242645{
26252646 GtkPaned * paned ;
26262647 NemoWindowSlot * slot ;
@@ -2653,9 +2674,9 @@ nemo_window_preview_pane_off (NemoWindow *window)
26532674
26542675 // nemo_window_update_show_hide_ui_elements (window);
26552676
2656- /* Save preview pane state to directory metadata */
2677+ /* Save preview pane state to directory metadata (only if explicitly requested) */
26572678 slot = nemo_window_get_active_slot (window );
2658- if (slot != NULL && slot -> content_view != NULL ) {
2679+ if (write_metadata && slot != NULL && slot -> content_view != NULL ) {
26592680 NemoFile * directory_file ;
26602681
26612682 directory_file = nemo_view_get_directory_as_file (slot -> content_view );
@@ -2671,6 +2692,13 @@ nemo_window_preview_pane_off (NemoWindow *window)
26712692 g_object_notify_by_pspec (G_OBJECT (window ), properties [PROP_SHOW_PREVIEW_PANE ]);
26722693}
26732694
2695+ void
2696+ nemo_window_preview_pane_off (NemoWindow * window )
2697+ {
2698+ /* User-triggered action: write metadata to remember this choice */
2699+ nemo_window_preview_pane_off_internal (window , TRUE);
2700+ }
2701+
26742702gboolean
26752703nemo_window_preview_pane_showing (NemoWindow * window )
26762704{
0 commit comments