Skip to content

Commit d45a674

Browse files
committed
fix jumpiness when switching tabs/panes.
1 parent 3ef7e02 commit d45a674

1 file changed

Lines changed: 74 additions & 2 deletions

File tree

src/nemo-window.c

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)