Skip to content

Patched Add dual-panelayout options (vertical spit, separate sidebars/nav bars/status menu)#3735

Open
cdmdotnet wants to merge 5 commits intolinuxmint:masterfrom
cdmdotnet:master
Open

Patched Add dual-panelayout options (vertical spit, separate sidebars/nav bars/status menu)#3735
cdmdotnet wants to merge 5 commits intolinuxmint:masterfrom
cdmdotnet:master

Conversation

@cdmdotnet
Copy link

Includes the missing check-in the previous PR lacked - confirmed the github build action now runs.
There's a spec doc, the most useful aspect of which will be the wire-frame diagrams that give you an idea of what the changes are/do.
nemo_dual_pane_spec.docx

Dual-pane enhancements:

vertical split mode (panes stacked one above other),
separate sidebar per pane,
separate Path Bar / Location Entry per pane
separate status bar per pane

All options default to off, preserving existing behaviour when not enabled. New preferences exposed in a dedicated Dual Pane section of the Behaviour tab.

Details

  • "Show panes vertically – one above the other" (default: off)
    Adds a VPaned orientation for split-view in addition to the existing
    side-by-side HPaned layout. The split_view_hpane is recreated with
    the appropriate GtkOrientation when the preference changes.
  • "Separate sidebar per pane" (default: off, requires vertical split)
    In vertical split mode each pane column gets its own independent
    sidebar (places or tree) locked to that pane's navigation so
    browsing in one pane does not move the other pane's sidebar.
    Implemented by wrapping pane1 in a new inline HPaned
    (primary_pane_content_paned) and adding a second sidebar box
    (sidebar2 / secondary_pane_content_paned) for pane2.
  • "Separate Path Bar/Location Entry per pane" (default: off, requires vertical split)
    Embeds a full toolbar (path bar / location entry) directly inside
    each pane column so each pane tracks its own navigation history
    independently without sharing the window-level toolbar.
  • "Separate statusbar per pane" (default: off, requires vertical split + separate sidebar)
    Adds a full-width NemoStatusBar below each pane column (spanning
    both the sidebar and content area). The global statusbar is hidden
    by concealing its outer event-box wrapper rather than changing its
    visible property, preserving the GSettings binding that controls the
    floating-bar "selected items" overlay. Each per-pane bar is locked
    to its pane via a new PROP_PANE construct property so its zoom
    slider and sidebar buttons operate on that pane only. The places /
    tree toggle buttons call the new nemo_window_set_pane_sidebar_type()
    helper which swaps the sidebar widget in-place without firing the
    global notify::sidebar-view-id signal, keeping each pane's sidebar
    type independent.

…idebars, separate nav bars)

Three new preferences in Preferences > Behavior > Dual Pane:

- "Show panes vertically (one above the other)" [dual-pane-vertical-split]
  Switches the split-view HPaned to a VPaned so panes stack top/bottom
  instead of side by side.

- "Separate sidebar per pane" [dual-pane-separate-sidebar]
  Requires vertical split. Each pane gets its own Places/Tree sidebar,
  allowing the second pane's sidebar to track its own location without
  needing to change focus first. Sidebar type (Places/Tree) and
  visibility remain global toggles.

- "Separate path bar / location entry per pane" [dual-pane-separate-nav-bar]
  Requires vertical split. Each pane embeds its own toolbar (path bar
  and location entry) above its tab strip. Toggle Location Entry,
  clicking the path bar to switch to location entry, and Go menu /
  bookmarks all operate on the focused pane only.

"Always start in dual-pane view" is moved into the new Dual Pane section.

Implementation:
- GSettings schema: 3 new bool keys in org.nemo.preferences (default false)
- Layout: pri_paned/sec_paned wrapper HPaneds hold sidebar+pane columns
  when separate-sidebar is active; torn down cleanly on pref change or
  split-view-off
- Sidebar: NemoPlacesSidebar and FMTreeView accept an optional
  NemoWindowPane* to filter loading-uri signals to their own pane
- Toolbar: nemo_window_pane_embed/detach_toolbar reparents the toolbar
  into/out of the pane widget for per-pane nav bar mode
- CSS: .nemo-active-sidebar / .nemo-inactive-pane classes colour each
  sidebar to match its pane's active/inactive state
- Path bar callbacks: right-click, middle-click, and location-entry
  toggle all route to pane->active_slot (not the window's active slot)
- Destroy order: pane1 wrapper → sidebar2 → sidebar → panes (all paths)

Tests:
- test/test-dual-pane-schema.c: 9 GSettings unit tests verifying the
  three new keys exist with correct schema defaults and round-trip
  correctly; runs without a display or D-Bus session
… + separate sidebar)

      Adds a full-width NemoStatusBar below each pane column (spanning
      both the sidebar and content area).  Each per-pane bar is locked
      to its pane so its zoom and sidebar buttons operate on that pane only.
      The places / tree toggle buttons swap the per-pane sidebar widget,
      keeping each pane's sidebar type independent.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant