@@ -1669,6 +1669,41 @@ any_other_slot_wants_preview_pane (NemoWindow *window,
16691669 return FALSE;
16701670}
16711671
1672+ /* Synchronize the preview pane state based on a slot's directory metadata.
1673+ * This checks the slot's current directory's saved preference and applies it,
1674+ * taking into account whether other slots in the window want the preview pane.
1675+ */
1676+ static void
1677+ sync_preview_pane_from_slot_metadata (NemoWindow * window ,
1678+ NemoWindowSlot * slot )
1679+ {
1680+ NemoFile * directory_file ;
1681+ gboolean show_preview ;
1682+
1683+ if (slot == NULL || slot -> content_view == NULL ) {
1684+ return ;
1685+ }
1686+
1687+ directory_file = nemo_view_get_directory_as_file (slot -> content_view );
1688+ if (directory_file == NULL ) {
1689+ return ;
1690+ }
1691+
1692+ show_preview = nemo_file_get_boolean_metadata (directory_file ,
1693+ NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE ,
1694+ FALSE);
1695+
1696+ /* Apply the saved state */
1697+ if (show_preview && !window -> details -> show_preview_pane ) {
1698+ nemo_window_preview_pane_on (window );
1699+ } else if (!show_preview && window -> details -> show_preview_pane ) {
1700+ /* Only close preview pane if no other slot wants it */
1701+ if (!any_other_slot_wants_preview_pane (window , slot )) {
1702+ nemo_window_preview_pane_off (window );
1703+ }
1704+ }
1705+ }
1706+
16721707
16731708/* These are called
16741709 * A) when switching the view within the active slot
@@ -1680,8 +1715,6 @@ nemo_window_connect_content_view (NemoWindow *window,
16801715 NemoView * view )
16811716{
16821717 NemoWindowSlot * slot ;
1683- NemoFile * directory_file ;
1684- gboolean show_preview ;
16851718
16861719 g_assert (NEMO_IS_WINDOW (window ));
16871720 g_assert (NEMO_IS_VIEW (view ));
@@ -1697,22 +1730,7 @@ nemo_window_connect_content_view (NemoWindow *window,
16971730 window );
16981731
16991732 /* Check if this directory has a saved preview pane state */
1700- directory_file = nemo_view_get_directory_as_file (view );
1701- if (directory_file != NULL ) {
1702- show_preview = nemo_file_get_boolean_metadata (directory_file ,
1703- NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE ,
1704- FALSE);
1705-
1706- /* Apply the saved state */
1707- if (show_preview && !window -> details -> show_preview_pane ) {
1708- nemo_window_preview_pane_on (window );
1709- } else if (!show_preview && window -> details -> show_preview_pane ) {
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- }
1714- }
1715- }
1733+ sync_preview_pane_from_slot_metadata (window , slot );
17161734
17171735 /* Connect preview pane selection updates if preview is showing */
17181736 if (window -> details -> preview_pane ) {
@@ -2352,28 +2370,9 @@ slot_location_changed_callback (NemoWindowSlot *slot,
23522370{
23532371 GList * selection ;
23542372 NemoFile * file = NULL ;
2355- NemoFile * directory_file ;
2356- gboolean show_preview ;
23572373
23582374 /* Check if this directory has a saved preview pane state */
2359- if (slot -> content_view != NULL ) {
2360- directory_file = nemo_view_get_directory_as_file (slot -> content_view );
2361- if (directory_file != NULL ) {
2362- show_preview = nemo_file_get_boolean_metadata (directory_file ,
2363- NEMO_METADATA_KEY_WINDOW_SHOW_PREVIEW_PANE ,
2364- FALSE);
2365-
2366- /* Apply the saved state */
2367- if (show_preview && !window -> details -> show_preview_pane ) {
2368- nemo_window_preview_pane_on (window );
2369- } else if (!show_preview && window -> details -> show_preview_pane ) {
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- }
2374- }
2375- }
2376- }
2375+ sync_preview_pane_from_slot_metadata (window , slot );
23772376
23782377 /* Update preview pane content when location changes */
23792378 if (window -> details -> preview_pane != NULL ) {
@@ -2536,26 +2535,7 @@ nemo_window_split_view_off (NemoWindow *window)
25362535
25372536 /* After closing split view, check if the remaining active slot
25382537 * 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- }
2538+ sync_preview_pane_from_slot_metadata (window , active_pane -> active_slot );
25592539
25602540 g_object_notify_by_pspec (G_OBJECT (window ), properties [PROP_SHOW_SPLIT_VIEW ]);
25612541}
0 commit comments