@@ -1626,6 +1626,49 @@ zoom_level_changed_callback (NemoView *view,
16261626 nemo_window_sync_zoom_widgets (window );
16271627}
16281628
1629+ /* Check if any slot in the window (across all panes and tabs) has
1630+ * preview pane enabled in its metadata, excluding the given slot.
1631+ */
1632+ static gboolean
1633+ any_other_slot_wants_preview_pane (NemoWindow * window ,
1634+ NemoWindowSlot * exclude_slot )
1635+ {
1636+ GList * pane_node ;
1637+ GList * slot_node ;
1638+ NemoWindowPane * pane ;
1639+ NemoWindowSlot * slot ;
1640+ NemoFile * directory_file ;
1641+ gboolean show_preview ;
1642+
1643+ for (pane_node = window -> details -> panes ; pane_node != NULL ; pane_node = pane_node -> next ) {
1644+ pane = NEMO_WINDOW_PANE (pane_node -> data );
1645+
1646+ for (slot_node = pane -> slots ; slot_node != NULL ; slot_node = slot_node -> next ) {
1647+ slot = NEMO_WINDOW_SLOT (slot_node -> data );
1648+
1649+ /* Skip the slot we're excluding */
1650+ if (slot == exclude_slot ) {
1651+ continue ;
1652+ }
1653+
1654+ /* Check if this slot has a view with a directory */
1655+ if (slot -> content_view != NULL ) {
1656+ directory_file = nemo_view_get_directory_as_file (slot -> content_view );
1657+ if (directory_file != NULL ) {
1658+ show_preview = nemo_file_get_boolean_metadata (directory_file ,
1659+ NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE ,
1660+ FALSE);
1661+ if (show_preview ) {
1662+ return TRUE;
1663+ }
1664+ }
1665+ }
1666+ }
1667+ }
1668+
1669+ return FALSE;
1670+ }
1671+
16291672
16301673/* These are called
16311674 * A) when switching the view within the active slot
@@ -1664,7 +1707,10 @@ nemo_window_connect_content_view (NemoWindow *window,
16641707 if (show_preview && !window -> details -> show_preview_pane ) {
16651708 nemo_window_preview_pane_on (window );
16661709 } else if (!show_preview && window -> details -> show_preview_pane ) {
1667- nemo_window_preview_pane_off (window );
1710+ /* Only close preview pane if no other slot wants it */
1711+ if (!any_other_slot_wants_preview_pane (window , slot )) {
1712+ nemo_window_preview_pane_off (window );
1713+ }
16681714 }
16691715 }
16701716
@@ -2321,7 +2367,10 @@ slot_location_changed_callback (NemoWindowSlot *slot,
23212367 if (show_preview && !window -> details -> show_preview_pane ) {
23222368 nemo_window_preview_pane_on (window );
23232369 } else if (!show_preview && window -> details -> show_preview_pane ) {
2324- nemo_window_preview_pane_off (window );
2370+ /* Only close preview pane if no other slot wants it */
2371+ if (!any_other_slot_wants_preview_pane (window , slot )) {
2372+ nemo_window_preview_pane_off (window );
2373+ }
23252374 }
23262375 }
23272376 }
@@ -2485,6 +2534,29 @@ nemo_window_split_view_off (NemoWindow *window)
24852534 window -> details -> show_split_view = FALSE;
24862535 nemo_window_update_show_hide_ui_elements (window );
24872536
2537+ /* After closing split view, check if the remaining active slot
2538+ * wants the preview pane based on its directory metadata */
2539+ if (active_pane -> active_slot != NULL && active_pane -> active_slot -> content_view != NULL ) {
2540+ NemoFile * directory_file ;
2541+ gboolean show_preview ;
2542+
2543+ directory_file = nemo_view_get_directory_as_file (active_pane -> active_slot -> content_view );
2544+ if (directory_file != NULL ) {
2545+ show_preview = nemo_file_get_boolean_metadata (directory_file ,
2546+ NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE ,
2547+ FALSE);
2548+
2549+ if (show_preview && !window -> details -> show_preview_pane ) {
2550+ nemo_window_preview_pane_on (window );
2551+ } else if (!show_preview && window -> details -> show_preview_pane ) {
2552+ /* Only close preview pane if no other slot wants it */
2553+ if (!any_other_slot_wants_preview_pane (window , active_pane -> active_slot )) {
2554+ nemo_window_preview_pane_off (window );
2555+ }
2556+ }
2557+ }
2558+ }
2559+
24882560 g_object_notify_by_pspec (G_OBJECT (window ), properties [PROP_SHOW_SPLIT_VIEW ]);
24892561}
24902562
0 commit comments