Skip to content

Non-native macOS UI patterns audit — remaining fixes #846

@datlechin

Description

@datlechin

Comprehensive UI audit found 33 issues. 12 critical/high fixed in commit 07ef029. 21 remaining:

Medium Priority

Toolbar & Split View

  • MainWindowToolbar.swift:218-246 — All toolbar items are NSHostingView wrappers; simple action items should use native NSToolbarItem with .image/.action/.target
  • MainWindowToolbar.swift:54autosavesConfiguration = false while allowsUserCustomization = true — customizations not persisted
  • MainSplitViewController.swift:119 — Shared autosave name across all windows causes divider positions to collide
  • MainSplitViewController.swift:148,454-460 — Manual UserDefaults for inspector state duplicates what autosaveName handles

Window

  • TabWindowController.swift — Missing window.titlebarAppearsTransparent = true for visual continuity under unified toolbar

Sidebar

  • SidebarView.swift:90.frame(minWidth: 280) conflicts with NSSplitViewItem.minimumThickness = 200

Settings & Forms

  • AppearanceSettingsView.swift:52-82 — VStack instead of Form for header section
  • ConnectionFormView.swift:139-148 — Manual segmented tab switcher instead of TabView
  • ConnectionFormView+Footer.swift:38-52 — Delete button position should be far left
  • AISettingsView.swift:347-370 — Manual VStack header in sheet; use .navigationTitle
  • DatabaseSwitcherSheet.swift:68-72 — Manual title in sheet body; use .navigationTitle
  • ConnectionFormView+Footer.swift:91-134 — URL import sheet as bare VStack; use Form
  • WelcomeWindowView.swift:128-158 — Custom button backgrounds; use .buttonStyle(.bordered)

Dialogs

  • ERDiagramView.swift:270 — bare alert.runModal() without window attachment
  • AppDelegate.swift:179 — bare alert.runModal() inside Task without window

Low Priority

Data Grid

  • DataGridView+Popovers.swift:235 — YES/NO uses NSMenu.popUp instead of NSPopUpButton
  • SetPickerView.swift:19-43 — Plain button with no affordance opens popover

Status Bar

  • MainStatusBarView.swift — SwiftUI Divider instead of NSBox separator

Localization

  • Multiple export/import views — Unlocalized string literals ("Stop", "Close", etc.)
  • SSH/SSL panels — Missing .message on NSOpenPanel
  • TableOperationDialog.swift:164,172 — Duplicate .onExitCommand

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions