flea-qml 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +511 -2
- package/THIRD-PARTY-NOTICES.md +29 -0
- package/demos/App.java +5 -0
- package/demos/Dockerfile +4 -0
- package/demos/Main.kt +3 -0
- package/demos/Program.cs +1 -0
- package/demos/README.md +12 -0
- package/demos/app.dart +3 -0
- package/demos/app.deb +0 -0
- package/demos/app.js +1 -0
- package/demos/backup.tar +0 -0
- package/demos/budget.xlsx +0 -0
- package/demos/build.sh +2 -0
- package/demos/bundle.zip +0 -0
- package/demos/clip.mp4 +0 -0
- package/demos/data.sqlite +0 -0
- package/demos/disk.iso +0 -0
- package/demos/engine.cpp +5 -0
- package/demos/firmware.bin +0 -0
- package/demos/flake.nix +4 -0
- package/demos/folder/inside.txt +1 -0
- package/demos/font.ttf +0 -0
- package/demos/index.html +5 -0
- package/demos/index.php +2 -0
- package/demos/init.lua +1 -0
- package/demos/letter.docx +0 -0
- package/demos/lib.rs +3 -0
- package/demos/main.c +6 -0
- package/demos/main.h +3 -0
- package/demos/math-and-diagrams.md +200 -0
- package/demos/notes.tar.gz +0 -0
- package/demos/notes.txt +3 -0
- package/demos/photo.png +0 -0
- package/demos/program +2 -0
- package/demos/report.pdf +32 -0
- package/demos/script.py +1 -0
- package/demos/server.go +7 -0
- package/demos/settings.json +4 -0
- package/demos/slides.pptx +0 -0
- package/demos/song.mp3 +0 -0
- package/demos/style.css +4 -0
- package/demos/tool.rb +1 -0
- package/demos/types.ts +2 -0
- package/docs/pele.md +23 -0
- package/docs/protocol.md +3420 -0
- package/docs/temml.md +63 -0
- package/index.js +107 -0
- package/package.json +34 -4
- package/src/archive.js +407 -0
- package/src/archiveops.js +728 -0
- package/src/backend.js +369 -0
- package/src/bulkrename.js +95 -0
- package/src/clip-host.js +76 -0
- package/src/clip.js +462 -0
- package/src/code.js +168 -0
- package/src/compare.js +74 -0
- package/src/create.js +128 -0
- package/src/dirsize.js +147 -0
- package/src/figure-svg.js +530 -0
- package/src/figure-thread.js +23 -0
- package/src/figure.js +132 -0
- package/src/find.js +55 -0
- package/src/flea.js +39 -0
- package/src/fsinfo.js +39 -0
- package/src/highlight.js +141 -0
- package/src/html.js +52 -0
- package/src/kinds.js +89 -0
- package/src/listing.js +130 -0
- package/src/markdown-html.js +317 -0
- package/src/mathml.js +186 -0
- package/src/menu.js +180 -0
- package/src/meta.js +135 -0
- package/src/office.js +810 -0
- package/src/order.js +100 -0
- package/src/peek.js +49 -0
- package/src/pele-wrapper.js +695 -0
- package/src/permissions.js +180 -0
- package/src/places.js +313 -0
- package/src/preview-language.js +10 -0
- package/src/terminal-server.js +95 -0
- package/src/terminal-shell.js +26 -0
- package/src/transfer.js +669 -0
- package/src/trash-record.js +41 -0
- package/src/trash.js +210 -0
- package/src/trashbrowse.js +327 -0
- package/src/uistate.js +393 -0
- package/src/uistore.js +168 -0
- package/src/vendor/LICENSES/Apache-2.0.txt +202 -0
- package/src/vendor/LICENSES/MIT-katex-2015.txt +27 -0
- package/src/vendor/LICENSES/MIT-katex.txt +21 -0
- package/src/vendor/LICENSES/MIT-mermaid.txt +21 -0
- package/src/vendor/LICENSES/MIT-pele.txt +40 -0
- package/src/vendor/LICENSES/MIT-perseus.txt +18 -0
- package/src/vendor/LICENSES/MIT-temml.txt +21 -0
- package/src/vendor/pele.js +145 -0
- package/src/vendor/temml.mjs +14708 -0
- package/src/watch.js +98 -0
- package/src/wayland/client.js +109 -0
- package/src/wayland/protocol.js +55 -0
- package/src/wayland/protocols/ext-data-control-v1.xml +276 -0
- package/src/wayland/protocols/wayland.xml +3248 -0
- package/src/wayland/protocols/wlr-data-control-unstable-v1.xml +278 -0
- package/src/wayland/resource-io.js +6 -0
- package/src/wayland/socket-discovery.js +26 -0
- package/src/wayland/transport-posix.js +120 -0
- package/src/wayland/transport-win32.js +11 -0
- package/src/wayland/transport.js +3 -0
- package/src/wayland/win32-resources.js +80 -0
- package/src/wayland/win32-wire.js +62 -0
- package/test/archive.test.js +80 -0
- package/test/bench-markdown-scroll.mjs +190 -0
- package/test/clip-host.test.js +113 -0
- package/test/code-preview.test.js +35 -0
- package/test/compare-ui-paths.test.js +24 -0
- package/test/compare.test.js +54 -0
- package/test/delete-trash.test.js +67 -0
- package/test/dirsize.test.js +138 -0
- package/test/file-ops.test.js +307 -0
- package/test/file-url.test.js +24 -0
- package/test/find-contents.test.js +161 -0
- package/test/find-input.test.js +66 -0
- package/test/fixtures/pele-parity.json +1006 -0
- package/test/highlight-launcher.test.js +35 -0
- package/test/html-preview.test.js +22 -0
- package/test/input.test.js +15 -0
- package/test/keymap.test.js +26 -0
- package/test/language-icons.test.js +36 -0
- package/test/launcher.test.js +51 -0
- package/test/manual-archive-here-ui.mjs +47 -0
- package/test/manual-code-scroll.mjs +28 -0
- package/test/manual-column-scroll.mjs +24 -0
- package/test/manual-compare-ui.mjs +20 -0
- package/test/manual-find-status.mjs +37 -0
- package/test/manual-folder-focus.mjs +63 -0
- package/test/manual-html-security.mjs +23 -0
- package/test/manual-html-ui.mjs +30 -0
- package/test/manual-syntax-preview.mjs +26 -0
- package/test/manual-terminal-lifecycle.mjs +42 -0
- package/test/manual-terminal-navigation.mjs +48 -0
- package/test/manual-terminal-ui.mjs +47 -0
- package/test/manual-trash-ui.mjs +86 -0
- package/test/markdown-diagrams.test.js +93 -0
- package/test/markdown-html.test.js +105 -0
- package/test/mathml.test.js +92 -0
- package/test/menu-transfer.test.js +57 -0
- package/test/office-preview.test.js +154 -0
- package/test/pele-parity.test.js +28 -0
- package/test/places.test.js +134 -0
- package/test/preview-keys.test.js +60 -0
- package/test/preview-language.test.js +22 -0
- package/test/status-filename.test.js +20 -0
- package/test/transfer-replace-merge.test.js +187 -0
- package/test/trash-address.test.js +23 -0
- package/test/trash-view.test.js +37 -0
- package/test/trashbrowse.test.js +135 -0
- package/ui/AboutFacts.qml +78 -0
- package/ui/ArchiveCards.qml +95 -0
- package/ui/ArchiveCompressDialog.qml +378 -0
- package/ui/ArchiveHereConfirm.qml +127 -0
- package/ui/ArchivePasswordDialog.qml +257 -0
- package/ui/Backend.qml +775 -0
- package/ui/BulkOldNames.qml +47 -0
- package/ui/BulkRenameDialog.qml +380 -0
- package/ui/CardFrame.qml +67 -0
- package/ui/CardScroll.qml +79 -0
- package/ui/CheckBox.qml +73 -0
- package/ui/ChromeBar.qml +360 -0
- package/ui/ChromeButton.qml +131 -0
- package/ui/ChromeModes.qml +43 -0
- package/ui/CodeLines.qml +256 -0
- package/ui/CodeRefusal.qml +52 -0
- package/ui/CollideConfirm.qml +147 -0
- package/ui/CollideHost.qml +167 -0
- package/ui/ColumnPane.qml +525 -0
- package/ui/ColumnRow.qml +380 -0
- package/ui/ColumnsArea.qml +594 -0
- package/ui/ColumnsLanding.qml +147 -0
- package/ui/CompareView.qml +321 -0
- package/ui/ContextMenu.qml +743 -0
- package/ui/ConvertDialog.qml +456 -0
- package/ui/CountedWorker.qml +7 -0
- package/ui/Crumb.qml +64 -0
- package/ui/CrumbDrop.qml +25 -0
- package/ui/CsvTable.qml +394 -0
- package/ui/CursorMark.qml +41 -0
- package/ui/DefaultClaim.qml +130 -0
- package/ui/DeviceLock.qml +47 -0
- package/ui/DeviceMounts.qml +540 -0
- package/ui/DialogButton.qml +150 -0
- package/ui/DialogField.qml +147 -0
- package/ui/DialogHeader.qml +31 -0
- package/ui/DialogScrim.qml +20 -0
- package/ui/DialogTitle.qml +37 -0
- package/ui/Divider.qml +9 -0
- package/ui/DropInto.qml +126 -0
- package/ui/DropTarget.qml +35 -0
- package/ui/DropboxMark.qml +60 -0
- package/ui/EmptyState.qml +150 -0
- package/ui/EscapeHint.qml +11 -0
- package/ui/FactsTable.qml +54 -0
- package/ui/FastScrollHandler.qml +476 -0
- package/ui/FatNamesConfirm.qml +157 -0
- package/ui/Favourites.qml +143 -0
- package/ui/FigureService.qml +120 -0
- package/ui/FileDrag.qml +267 -0
- package/ui/FilterStrip.qml +133 -0
- package/ui/FitMetrics.qml +22 -0
- package/ui/FlashDriveRows.qml +137 -0
- package/ui/FlashHost.qml +72 -0
- package/ui/FlashImageRow.qml +104 -0
- package/ui/FlashRunner.qml +119 -0
- package/ui/FlashStepRow.qml +172 -0
- package/ui/FlashStrip.qml +38 -0
- package/ui/FlashView.qml +397 -0
- package/ui/FleaMark.qml +88 -0
- package/ui/FlyoutFade.qml +23 -0
- package/ui/FontPane.qml +170 -0
- package/ui/Glass.qml +114 -0
- package/ui/GlassTagger.qml +59 -0
- package/ui/Glyph.qml +64 -0
- package/ui/GlyphSolid.qml +22 -0
- package/ui/GridArea.qml +664 -0
- package/ui/GridTile.qml +325 -0
- package/ui/GvfsBridge.qml +164 -0
- package/ui/Header.qml +433 -0
- package/ui/HoverTimers.qml +39 -0
- package/ui/HtmlClip.qml +30 -0
- package/ui/HtmlPane.qml +63 -0
- package/ui/HyprlandMark.qml +45 -0
- package/ui/Ipc.qml +1005 -0
- package/ui/IpcControls.qml +7 -0
- package/ui/IpcMenuState.qml +48 -0
- package/ui/IpcPreviewState.qml +185 -0
- package/ui/JumpPath.qml +51 -0
- package/ui/KeymapSheet.qml +561 -0
- package/ui/KeymapSheetResult.qml +89 -0
- package/ui/KindStack.qml +40 -0
- package/ui/LangMark.qml +51 -0
- package/ui/LangMarkLoader.qml +26 -0
- package/ui/List.qml +480 -0
- package/ui/LoadingState.qml +54 -0
- package/ui/LocalSend.qml +56 -0
- package/ui/LocalSendMark.qml +73 -0
- package/ui/MarkdownBlockView.qml +311 -0
- package/ui/MarkdownBlocks.qml +35 -0
- package/ui/MarkdownFigure.qml +254 -0
- package/ui/MarkdownImages.qml +72 -0
- package/ui/MarkdownList.qml +81 -0
- package/ui/MarkdownMathsText.qml +97 -0
- package/ui/MarkdownPane.qml +83 -0
- package/ui/MarkdownPictures.qml +41 -0
- package/ui/MarkdownQuote.qml +52 -0
- package/ui/MarkdownRemote.qml +82 -0
- package/ui/MarkdownSource.qml +155 -0
- package/ui/MarkdownTable.qml +222 -0
- package/ui/MarkdownTableScroll.qml +64 -0
- package/ui/MarkdownTableWheel.qml +126 -0
- package/ui/MarkdownText.qml +87 -0
- package/ui/MarkdownWorker.js +132 -0
- package/ui/MatchText.qml +99 -0
- package/ui/MediaSession.qml +38 -0
- package/ui/MediaSound.qml +26 -0
- package/ui/MediaStrip.qml +191 -0
- package/ui/MediaTrack.qml +36 -0
- package/ui/MediaVolume.qml +54 -0
- package/ui/MenuActionDialog.qml +396 -0
- package/ui/MenuEdgeFade.qml +24 -0
- package/ui/MenuHost.qml +227 -0
- package/ui/MenuRow.qml +351 -0
- package/ui/MountListing.qml +100 -0
- package/ui/NetworkDialog.qml +435 -0
- package/ui/NetworkForm.qml +426 -0
- package/ui/NetworkMounts.qml +913 -0
- package/ui/NetworkPlaces.qml +127 -0
- package/ui/OpenWithDialog.qml +613 -0
- package/ui/Opener.qml +95 -0
- package/ui/Pane.qml +1320 -0
- package/ui/PaneMenuActions.qml +527 -0
- package/ui/PanePath.qml +90 -0
- package/ui/PaneRail.qml +268 -0
- package/ui/PaneStates.qml +88 -0
- package/ui/PaneSwap.qml +339 -0
- package/ui/PaneWire.qml +601 -0
- package/ui/ParkedWait.qml +9 -0
- package/ui/PathEntry.qml +186 -0
- package/ui/PathJump.qml +400 -0
- package/ui/PdfViewer.qml +297 -0
- package/ui/PermissionsDialog.qml +658 -0
- package/ui/PermissionsHeadings.qml +31 -0
- package/ui/PhoneMounts.qml +67 -0
- package/ui/PickerAnswers.qml +75 -0
- package/ui/PickerBox.qml +26 -0
- package/ui/PickerChrome.qml +295 -0
- package/ui/PickerFilter.qml +97 -0
- package/ui/PickerGrid.qml +308 -0
- package/ui/PickerHeader.qml +28 -0
- package/ui/PickerLifecycle.qml +27 -0
- package/ui/PickerList.qml +218 -0
- package/ui/PickerListing.qml +149 -0
- package/ui/PickerPathBar.qml +127 -0
- package/ui/PickerPlaces.qml +189 -0
- package/ui/PickerRecent.qml +92 -0
- package/ui/PickerSave.qml +101 -0
- package/ui/PickerSelection.qml +155 -0
- package/ui/PickerWindow.qml +846 -0
- package/ui/PowerSectorsReader.qml +10 -0
- package/ui/PrebuildDriver.qml +146 -0
- package/ui/Preview.qml +1005 -0
- package/ui/PreviewAnimation.qml +24 -0
- package/ui/PreviewArchive.qml +91 -0
- package/ui/PreviewColumn.qml +553 -0
- package/ui/PreviewEdge.qml +63 -0
- package/ui/PreviewFacts.qml +30 -0
- package/ui/PreviewFactsLine.qml +34 -0
- package/ui/PreviewHtml.qml +233 -0
- package/ui/PreviewImage.qml +253 -0
- package/ui/PreviewImagePan.qml +13 -0
- package/ui/PreviewImageSharp.qml +32 -0
- package/ui/PreviewLines.qml +106 -0
- package/ui/PreviewMarkdown.qml +706 -0
- package/ui/PreviewMedia.qml +250 -0
- package/ui/PreviewPdf.qml +482 -0
- package/ui/PreviewScroll.qml +201 -0
- package/ui/PreviewSwap.qml +335 -0
- package/ui/PreviewText.qml +149 -0
- package/ui/ProtocolChip.qml +18 -0
- package/ui/QuickLookArchive.qml +41 -0
- package/ui/QuickLookBar.qml +103 -0
- package/ui/QuickLookPrepare.qml +355 -0
- package/ui/QuickLookSwap.qml +10 -0
- package/ui/QuickLookWarm.qml +65 -0
- package/ui/RailDrop.qml +155 -0
- package/ui/RailHeading.qml +19 -0
- package/ui/RailPlaces.qml +38 -0
- package/ui/RailTrashRow.qml +67 -0
- package/ui/RenameField.qml +353 -0
- package/ui/RendererRetry.qml +11 -0
- package/ui/ResizeHandle.qml +52 -0
- package/ui/Reveal.qml +54 -0
- package/ui/Row.qml +476 -0
- package/ui/RowDrag.qml +213 -0
- package/ui/RowDropTarget.qml +27 -0
- package/ui/RunCard.qml +286 -0
- package/ui/Scripts.qml +65 -0
- package/ui/SearchStrip.qml +232 -0
- package/ui/SelectionBand.qml +140 -0
- package/ui/SelectionPreview.qml +370 -0
- package/ui/SettingsFavourite.qml +122 -0
- package/ui/SettingsGroup.qml +96 -0
- package/ui/SettingsHint.qml +12 -0
- package/ui/SettingsMetrics.qml +29 -0
- package/ui/SettingsPane.qml +178 -0
- package/ui/SettingsPanel.qml +547 -0
- package/ui/SettingsRail.qml +128 -0
- package/ui/SettingsRow.qml +409 -0
- package/ui/SettingsRuler.qml +85 -0
- package/ui/SettingsSegment.qml +85 -0
- package/ui/ShareBrowser.qml +113 -0
- package/ui/ShareLink.qml +67 -0
- package/ui/ShelfPins.qml +101 -0
- package/ui/Sidebar.qml +728 -0
- package/ui/SidebarRow.qml +358 -0
- package/ui/Spinner.qml +60 -0
- package/ui/StableModel.qml +89 -0
- package/ui/StateMessage.qml +84 -0
- package/ui/StatusBar.qml +512 -0
- package/ui/StatusFileName.qml +27 -0
- package/ui/TabBar.qml +673 -0
- package/ui/TabDragGeometry.qml +60 -0
- package/ui/TagMenuMark.qml +52 -0
- package/ui/TagRailSection.qml +53 -0
- package/ui/TagSlot.qml +40 -0
- package/ui/TagState.qml +150 -0
- package/ui/TagSwatch.qml +28 -0
- package/ui/Taildrop.qml +86 -0
- package/ui/TailscaleMark.qml +50 -0
- package/ui/TerminalService.qml +69 -0
- package/ui/TerminalTab.qml +48 -0
- package/ui/TerminalTabs.qml +27 -0
- package/ui/Theme.qml +460 -0
- package/ui/ThemeColors.qml +43 -0
- package/ui/TransferCard.qml +239 -0
- package/ui/TrashConfirm.qml +129 -0
- package/ui/TrashDropHandler.qml +11 -0
- package/ui/TrashHost.qml +202 -0
- package/ui/TrashMonitor.qml +30 -0
- package/ui/TrashToolbar.qml +19 -0
- package/ui/TrashView.qml +492 -0
- package/ui/UnlockDialog.qml +450 -0
- package/ui/UnlockHost.qml +206 -0
- package/ui/UpdateCheck.qml +97 -0
- package/ui/UserDirs.qml +25 -0
- package/ui/ViewState.qml +565 -0
- package/ui/ViewportScrollBar.qml +195 -0
- package/ui/ViewportScrollBars.qml +25 -0
- package/ui/WebPreview.qml +33 -0
- package/ui/WebPreviewView.qml +26 -0
- package/ui/WindowBody.qml +829 -0
- package/ui/WindowDrag.qml +35 -0
- package/ui/boot/Commons/AudioNodes.qml +50 -0
- package/ui/boot/Commons/AudioNodesModel.js +96 -0
- package/ui/boot/Commons/Border.qml +243 -0
- package/ui/boot/Commons/BorderGeometry.js +373 -0
- package/ui/boot/Commons/Color.qml +258 -0
- package/ui/boot/Commons/I18n.qml +118 -0
- package/ui/boot/Commons/InputDevices.qml +112 -0
- package/ui/boot/Commons/InputMethodState.qml +38 -0
- package/ui/boot/Commons/IpcRegistry.qml +77 -0
- package/ui/boot/Commons/Numbers.js +19 -0
- package/ui/boot/Commons/Plural.js +91 -0
- package/ui/boot/Commons/ShellIpc.qml +12 -0
- package/ui/boot/Commons/Style.qml +561 -0
- package/ui/boot/Commons/Translations.qml +100 -0
- package/ui/boot/Commons/UntypedInput.qml +152 -0
- package/ui/boot/Commons/Util.qml +188 -0
- package/ui/boot/Commons/qmldir +13 -0
- package/ui/boot/LICENSE-omarchy +20 -0
- package/ui/boot/Ui/BackgroundMedia.qml +49 -0
- package/ui/boot/Ui/BarIconButton.qml +106 -0
- package/ui/boot/Ui/BarIconContent.qml +38 -0
- package/ui/boot/Ui/BarIndicator.qml +53 -0
- package/ui/boot/Ui/BarWidget.qml +50 -0
- package/ui/boot/Ui/BorderOverlay.qml +54 -0
- package/ui/boot/Ui/BorderSurface.qml +40 -0
- package/ui/boot/Ui/Button.qml +224 -0
- package/ui/boot/Ui/ButtonGroup.qml +131 -0
- package/ui/boot/Ui/ConfirmDialog.qml +134 -0
- package/ui/boot/Ui/CursorSurface.qml +42 -0
- package/ui/boot/Ui/Dropdown.qml +245 -0
- package/ui/boot/Ui/FilterInput.qml +26 -0
- package/ui/boot/Ui/IconContentBounds.qml +141 -0
- package/ui/boot/Ui/KeyboardPanel.qml +453 -0
- package/ui/boot/Ui/MultiSelect.qml +624 -0
- package/ui/boot/Ui/NumberField.qml +86 -0
- package/ui/boot/Ui/OpticalGlyph.qml +68 -0
- package/ui/boot/Ui/OverlayWindow.qml +102 -0
- package/ui/boot/Ui/Panel.qml +60 -0
- package/ui/boot/Ui/PanelActionButton.qml +105 -0
- package/ui/boot/Ui/PanelController.qml +16 -0
- package/ui/boot/Ui/PanelHero.qml +112 -0
- package/ui/boot/Ui/PanelKeyCatcher.qml +100 -0
- package/ui/boot/Ui/PanelSectionHeader.qml +31 -0
- package/ui/boot/Ui/PanelSeparator.qml +19 -0
- package/ui/boot/Ui/PanelSlider.qml +156 -0
- package/ui/boot/Ui/PanelToolTip.qml +50 -0
- package/ui/boot/Ui/PluginBarApi.qml +89 -0
- package/ui/boot/Ui/PointerMoveGate.qml +54 -0
- package/ui/boot/Ui/PopupCard.qml +181 -0
- package/ui/boot/Ui/ScreenMoveRemap.qml +43 -0
- package/ui/boot/Ui/SearchableDropdown.qml +354 -0
- package/ui/boot/Ui/SizedImage.qml +125 -0
- package/ui/boot/Ui/SpeedTestOverlay.qml +412 -0
- package/ui/boot/Ui/TextField.qml +58 -0
- package/ui/boot/Ui/Toggle.qml +118 -0
- package/ui/boot/Ui/ToggleSwitch.qml +115 -0
- package/ui/boot/Ui/WidgetButton.qml +172 -0
- package/ui/boot/Ui/qmldir +41 -0
- package/ui/boot/fleatab.qml +50 -0
- package/ui/boot/picker.qml +39 -0
- package/ui/boot/shell.qml +131 -0
- package/ui/boot/tabtearoff.qml +51 -0
- package/ui/js/Anchor.js +379 -0
- package/ui/js/AnchorHold.js +162 -0
- package/ui/js/Archive.js +157 -0
- package/ui/js/ArchiveCard.js +44 -0
- package/ui/js/ArchiveOps.js +44 -0
- package/ui/js/BackReturn.js +118 -0
- package/ui/js/BulkRename.js +100 -0
- package/ui/js/Buttons.js +54 -0
- package/ui/js/ChromeKeys.js +116 -0
- package/ui/js/ClipMarks.js +73 -0
- package/ui/js/ClipSelection.js +67 -0
- package/ui/js/Clipboard.js +179 -0
- package/ui/js/Cloud.js +97 -0
- package/ui/js/CodeRuns.js +72 -0
- package/ui/js/Collide.js +212 -0
- package/ui/js/ColumnFit.js +28 -0
- package/ui/js/ColumnMenu.js +111 -0
- package/ui/js/Columns.js +298 -0
- package/ui/js/ColumnsCarry.js +103 -0
- package/ui/js/Compare.js +74 -0
- package/ui/js/Contrast.js +157 -0
- package/ui/js/ControlReader.js +42 -0
- package/ui/js/Convert.js +52 -0
- package/ui/js/CopyAs.js +52 -0
- package/ui/js/Crumbs.js +178 -0
- package/ui/js/Csv.js +231 -0
- package/ui/js/Density.js +44 -0
- package/ui/js/Devices.js +440 -0
- package/ui/js/DirSizes.js +180 -0
- package/ui/js/Drag.js +360 -0
- package/ui/js/DragOut.js +166 -0
- package/ui/js/DropDev.js +52 -0
- package/ui/js/Dropbox.js +41 -0
- package/ui/js/Eject.js +217 -0
- package/ui/js/Errors.js +188 -0
- package/ui/js/ExtThumbs.js +115 -0
- package/ui/js/Facts.js +402 -0
- package/ui/js/FigureDate.js +14 -0
- package/ui/js/Filter.js +285 -0
- package/ui/js/Find.js +46 -0
- package/ui/js/Flash.js +184 -0
- package/ui/js/FlashCard.js +79 -0
- package/ui/js/FlashEndings.js +125 -0
- package/ui/js/FlashPane.js +116 -0
- package/ui/js/FleaBin.js +12 -0
- package/ui/js/Focus.js +504 -0
- package/ui/js/FolderSorts.js +108 -0
- package/ui/js/FolderViews.js +44 -0
- package/ui/js/Format.js +314 -0
- package/ui/js/Fuzzy.js +141 -0
- package/ui/js/GlassTag.js +72 -0
- package/ui/js/Grid.js +33 -0
- package/ui/js/GridGeometry.js +90 -0
- package/ui/js/GridNames.js +153 -0
- package/ui/js/GvfsBridge.js +200 -0
- package/ui/js/HostClipboard.js +29 -0
- package/ui/js/Icons.js +218 -0
- package/ui/js/Input.js +50 -0
- package/ui/js/Jump.js +200 -0
- package/ui/js/KeyName.js +64 -0
- package/ui/js/Keymap.js +401 -0
- package/ui/js/Kinds.js +164 -0
- package/ui/js/LICENSES/ISC-lucide.txt +43 -0
- package/ui/js/LangMarkPaths.js +47 -0
- package/ui/js/LangMarks.js +120 -0
- package/ui/js/Lists.js +11 -0
- package/ui/js/LocalSend.js +39 -0
- package/ui/js/LockedMenu.js +63 -0
- package/ui/js/MakeDefault.js +186 -0
- package/ui/js/MarkBox.js +7 -0
- package/ui/js/Markdown.js +119 -0
- package/ui/js/MarkdownLists.js +86 -0
- package/ui/js/MarkdownMaths.js +58 -0
- package/ui/js/MarkdownPictures.js +32 -0
- package/ui/js/MarkdownPrepared.js +139 -0
- package/ui/js/MarkdownTableFit.js +34 -0
- package/ui/js/Marks.js +148 -0
- package/ui/js/Marquee.js +96 -0
- package/ui/js/Match.js +93 -0
- package/ui/js/Material.js +109 -0
- package/ui/js/MdBlocks.js +437 -0
- package/ui/js/MdBreak.js +71 -0
- package/ui/js/MdChunks.js +70 -0
- package/ui/js/MdContainer.js +137 -0
- package/ui/js/MdDocument.js +337 -0
- package/ui/js/MdEmph.js +97 -0
- package/ui/js/MdEntity.js +108 -0
- package/ui/js/MdEntityTable.js +223 -0
- package/ui/js/MdEscape.js +59 -0
- package/ui/js/MdFront.js +37 -0
- package/ui/js/MdHold.js +32 -0
- package/ui/js/MdHtml.js +307 -0
- package/ui/js/MdHtmlBlock.js +290 -0
- package/ui/js/MdHtmlHeading.js +53 -0
- package/ui/js/MdHtmlImage.js +179 -0
- package/ui/js/MdInline.js +154 -0
- package/ui/js/MdItems.js +212 -0
- package/ui/js/MdLeaf.js +309 -0
- package/ui/js/MdLink.js +196 -0
- package/ui/js/MdMath.js +67 -0
- package/ui/js/MdParagraphs.js +138 -0
- package/ui/js/MdRefs.js +232 -0
- package/ui/js/MdResolve.js +226 -0
- package/ui/js/MdRun.js +300 -0
- package/ui/js/MdUrl.js +226 -0
- package/ui/js/Menu.js +514 -0
- package/ui/js/MenuContext.js +85 -0
- package/ui/js/MenuFit.js +13 -0
- package/ui/js/MenuRefresh.js +74 -0
- package/ui/js/MenuWheel.js +35 -0
- package/ui/js/Messages.js +186 -0
- package/ui/js/Motion.js +16 -0
- package/ui/js/Mounts.js +320 -0
- package/ui/js/MouseNav.js +13 -0
- package/ui/js/Nav.js +329 -0
- package/ui/js/NetFs.js +26 -0
- package/ui/js/OpenWith.js +83 -0
- package/ui/js/Ops.js +585 -0
- package/ui/js/Palette.js +33 -0
- package/ui/js/PathBar.js +260 -0
- package/ui/js/Permissions.js +179 -0
- package/ui/js/Phones.js +112 -0
- package/ui/js/Picker.js +353 -0
- package/ui/js/PlaceMenu.js +96 -0
- package/ui/js/Places.js +265 -0
- package/ui/js/PreviewAsk.js +21 -0
- package/ui/js/PreviewKeys.js +155 -0
- package/ui/js/PreviewSettle.js +29 -0
- package/ui/js/PreviewSwap.js +101 -0
- package/ui/js/PropertyFacts.js +144 -0
- package/ui/js/Protocols.js +296 -0
- package/ui/js/QuickLookKinds.js +27 -0
- package/ui/js/QuickLookRect.js +24 -0
- package/ui/js/RailDrop.js +51 -0
- package/ui/js/RailKeys.js +87 -0
- package/ui/js/RailMenu.js +133 -0
- package/ui/js/Recent.js +135 -0
- package/ui/js/RecentMode.js +156 -0
- package/ui/js/Reload.js +60 -0
- package/ui/js/Renderer.js +9 -0
- package/ui/js/RunFile.js +143 -0
- package/ui/js/Scripts.js +28 -0
- package/ui/js/Scroll.js +304 -0
- package/ui/js/ScrollOff.js +69 -0
- package/ui/js/Search.js +478 -0
- package/ui/js/Selection.js +97 -0
- package/ui/js/Settings.js +476 -0
- package/ui/js/SettingsAbout.js +97 -0
- package/ui/js/SettingsShelf.js +52 -0
- package/ui/js/SheetKeys.js +42 -0
- package/ui/js/SheetQuery.js +281 -0
- package/ui/js/ShelfPile.js +27 -0
- package/ui/js/SlowClick.js +53 -0
- package/ui/js/SlowOp.js +6 -0
- package/ui/js/Sort.js +134 -0
- package/ui/js/Startup.js +63 -0
- package/ui/js/StateWords.js +17 -0
- package/ui/js/Status.js +238 -0
- package/ui/js/Swap.js +166 -0
- package/ui/js/TabMove.js +39 -0
- package/ui/js/Tabs.js +751 -0
- package/ui/js/Tags.js +134 -0
- package/ui/js/Taildrop.js +128 -0
- package/ui/js/Tap.js +180 -0
- package/ui/js/TextSize.js +107 -0
- package/ui/js/Thumbs.js +158 -0
- package/ui/js/Transfer.js +172 -0
- package/ui/js/Trash.js +84 -0
- package/ui/js/TrashDates.js +47 -0
- package/ui/js/TrashDrop.js +64 -0
- package/ui/js/UiState.js +438 -0
- package/ui/js/Unlock.js +152 -0
- package/ui/js/Update.js +130 -0
- package/ui/js/UserDirs.js +56 -0
- package/ui/qmldir +230 -0
package/ui/PaneSwap.qml
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
import QtQuick
|
|
2
|
+
import "js/RecentMode.js" as RecentMode
|
|
3
|
+
import "js/Anchor.js" as Anchor
|
|
4
|
+
import "js/BackReturn.js" as BackReturn
|
|
5
|
+
import "js/DirSizes.js" as DirSizes
|
|
6
|
+
import "js/Nav.js" as Nav
|
|
7
|
+
import "js/Reload.js" as Reload
|
|
8
|
+
import "js/Search.js" as Search
|
|
9
|
+
import "js/Startup.js" as Startup
|
|
10
|
+
import "js/Swap.js" as Swap
|
|
11
|
+
import "js/Tabs.js" as Tabs
|
|
12
|
+
import "js/Thumbs.js" as Thumbs
|
|
13
|
+
|
|
14
|
+
// Where a listing's listed and rows replies land, holding the old rows until they do; see AGENTS.md "The listing swap".
|
|
15
|
+
Item {
|
|
16
|
+
id: root
|
|
17
|
+
|
|
18
|
+
property var pane: null
|
|
19
|
+
// ui/PaneWire.qml, which owns the anchor, the retry and the rename a landing listing settles.
|
|
20
|
+
property var wire: null
|
|
21
|
+
// The cursor a Back or Forward owes the asked listing, or null; hold() arms each listing's own.
|
|
22
|
+
property var restore: null
|
|
23
|
+
// The first window a landing set aside while its locate is out, or null.
|
|
24
|
+
property var parked: null
|
|
25
|
+
// A locate that never answers is a listing that never answers, so past Startup's listing wait the parked rows land at the top.
|
|
26
|
+
property int parkedWaitMs: Startup.LISTING_WAIT_MS
|
|
27
|
+
// Built on the first park, so a window that never parks a Back starts no object for it.
|
|
28
|
+
property var parkedWait: null
|
|
29
|
+
onParkedChanged: {
|
|
30
|
+
if (!root.parked) {
|
|
31
|
+
if (root.parkedWait !== null) root.parkedWait.stop()
|
|
32
|
+
return
|
|
33
|
+
}
|
|
34
|
+
if (root.parkedWait === null) {
|
|
35
|
+
var made = Qt.createComponent("ParkedWait.qml")
|
|
36
|
+
if (made.status !== Component.Ready) throw new Error("ParkedWait.qml did not load: " + made.errorString())
|
|
37
|
+
root.parkedWait = made.createObject(root, { swap: root })
|
|
38
|
+
}
|
|
39
|
+
root.parkedWait.restart()
|
|
40
|
+
}
|
|
41
|
+
property var phase: Swap.idle()
|
|
42
|
+
readonly property bool holding: root.phase.holding
|
|
43
|
+
readonly property bool fellBack: root.phase.fellBack
|
|
44
|
+
|
|
45
|
+
// What tests/ui.sh noblank reads through ui/Ipc.qml swapState: how each hold ended and every empty frame.
|
|
46
|
+
property int holds: 0
|
|
47
|
+
property int fallbacks: 0
|
|
48
|
+
// Rows lines that waited out the loading mark's minimum, which a rows line landing late does not count.
|
|
49
|
+
property int waits: 0
|
|
50
|
+
property int blankFrames: 0
|
|
51
|
+
// The gen whose rows last landed: a new gen parks the cursor on its best match, a re-answer keeps the file.
|
|
52
|
+
property int landedGen: 0
|
|
53
|
+
// The query the drawn rows answered, set in the turn they land; rows read it, never the live text.
|
|
54
|
+
property string answeredQuery: ""
|
|
55
|
+
property int loadingFrames: 0
|
|
56
|
+
property var last: ({ ms: 0, end: "" })
|
|
57
|
+
// When ui/PaneStates.qml drew the loading mark, 0 while none is drawn, and how long the last one stood.
|
|
58
|
+
property double markSince: 0
|
|
59
|
+
property int shownMs: 0
|
|
60
|
+
// Rows lines that came while the mark still owed time, landed in arrival order once it has stood its minimum.
|
|
61
|
+
property var waiting: []
|
|
62
|
+
// True from the turn after the search strip's first frame until the session closes: the views build what an answer draws then, unseen.
|
|
63
|
+
property bool searchWarm: false
|
|
64
|
+
|
|
65
|
+
// ui/js/Nav.js asks for every listing here; false means nothing is held, and one after a live answer holds the walk's state unless clearAtOnce.
|
|
66
|
+
function hold(ask) {
|
|
67
|
+
root.restore = ask.restore ? Object.assign({}, ask.restore) : null
|
|
68
|
+
root.parked = null
|
|
69
|
+
var now = Date.now()
|
|
70
|
+
root.phase = Swap.begin(root.phase, root.pane.listingState, root.pane.searchMode, ask, now)
|
|
71
|
+
if (!root.holding)
|
|
72
|
+
return false
|
|
73
|
+
root.holds += 1
|
|
74
|
+
cap.interval = Swap.capLeft(root.phase, now)
|
|
75
|
+
cap.restart()
|
|
76
|
+
return true
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function markShown(shown) {
|
|
80
|
+
if (!shown && root.markSince > 0)
|
|
81
|
+
root.shownMs = Date.now() - root.markSince
|
|
82
|
+
root.markSince = shown ? Date.now() : 0
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// The listed line held or fallen-back rows, or a drawn mark, wait for is kept for them, an earlier request's is dropped, any other applied.
|
|
86
|
+
function takeListed(total, readMs, sortMs, path, changed, gen) {
|
|
87
|
+
if (Swap.dropSessionLine(root.pane.searchMode, gen, root.pane.searchGen, root.pane.searchLeaving === true, root.pane.searchOpenedGen)) {
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
var marked = Swap.marked(root.markSince, root.pane.listInFlight, root.pane.searchMode, root.phase.walk)
|
|
91
|
+
var action = Swap.onListed(root.phase, root.pane.listInFlight, path, root.pane.listingPath, marked)
|
|
92
|
+
if (action === Swap.DROP) {
|
|
93
|
+
return
|
|
94
|
+
}
|
|
95
|
+
if (Swap.keepLive(root.pane.searchMode, root.pane.listInFlight) || action === Swap.KEEP) {
|
|
96
|
+
root.phase = Swap.kept(root.phase, { total: total, readMs: readMs, sortMs: sortMs, path: path, changed: changed })
|
|
97
|
+
root.pane.listedSeen = true
|
|
98
|
+
return
|
|
99
|
+
}
|
|
100
|
+
root.phase = Swap.heard(root.phase, root.pane.searchMode === Search.RESULTS)
|
|
101
|
+
root.applyListed(total, readMs, sortMs, path, changed)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// A rows line lands with the listed line kept for it, or alone; one ahead of its listed line is dropped as it always was.
|
|
105
|
+
function takeRows(start, items, kinds, listing, gen) {
|
|
106
|
+
if (Swap.dropSessionLine(root.pane.searchMode, gen, root.pane.searchGen, root.pane.searchLeaving === true, root.pane.searchOpenedGen)) {
|
|
107
|
+
return
|
|
108
|
+
}
|
|
109
|
+
var marked = Swap.marked(root.markSince, root.pane.listInFlight, root.pane.searchMode, root.phase.walk)
|
|
110
|
+
var left = marked ? Swap.showLeft(root.markSince, Date.now()) : 0
|
|
111
|
+
var action = Swap.onRows(root.phase, root.pane.listInFlight, root.pane.listedSeen, left)
|
|
112
|
+
if (action === Swap.DROP) {
|
|
113
|
+
return
|
|
114
|
+
}
|
|
115
|
+
if (action === Swap.WAIT) {
|
|
116
|
+
root.waiting.push({ start: start, items: items, kinds: kinds, listing: listing, gen: gen })
|
|
117
|
+
root.waits += 1
|
|
118
|
+
minShow.interval = left
|
|
119
|
+
minShow.restart()
|
|
120
|
+
return
|
|
121
|
+
}
|
|
122
|
+
if (gen > 0 && gen === root.pane.searchGen && root.pane.searchFirstRowsAt === 0) {
|
|
123
|
+
root.pane.searchFirstRowsAt = Date.now()
|
|
124
|
+
}
|
|
125
|
+
// A re-sort renumbers every row, so a selection made while it was in flight names other files under the new numbering.
|
|
126
|
+
if (Swap.clearsSelection(root.pane.backend.heldListing, listing) && root.pane.selectionCount() > 0)
|
|
127
|
+
root.pane.clearSelection()
|
|
128
|
+
root.pane.backend.heldListing = listing
|
|
129
|
+
root.stampTags(items, action === Swap.LAND || root.pane.listInFlight)
|
|
130
|
+
// Only a live answer names its query; a plain window reply answers none, so a scroll keeps the marks.
|
|
131
|
+
if (gen > 0)
|
|
132
|
+
root.answeredQuery = root.pane.searchQuery
|
|
133
|
+
if (action === Swap.LAND) {
|
|
134
|
+
// The owed name sits outside this window, so these rows wait for the window its locate names.
|
|
135
|
+
if (BackReturn.deferForLocate(root.pane, root.restore, items, root.phase.listed)) {
|
|
136
|
+
root.parked = { start: start, items: items, kinds: kinds }
|
|
137
|
+
return
|
|
138
|
+
}
|
|
139
|
+
root.parked = null
|
|
140
|
+
root.land(start, items, kinds, gen > 0 && gen !== root.landedGen && (root.pane.searchQuery || "").length > 0)
|
|
141
|
+
root.landedGen = gen
|
|
142
|
+
return
|
|
143
|
+
}
|
|
144
|
+
root.pane.held = start
|
|
145
|
+
root.pane.rows = RecentMode.stampRows(root.pane, items)
|
|
146
|
+
root.pane.kindNames = kinds
|
|
147
|
+
root.rowsLanded()
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// A rows reply is the held window: a tagged row builds the tag state, which stamps each row with its folder's slot.
|
|
151
|
+
function stampTags(items, fresh) {
|
|
152
|
+
if (root.pane.tagState === null && !items.some(function (row) { return row.tg !== undefined }))
|
|
153
|
+
return
|
|
154
|
+
root.pane.tags().take(items, fresh)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Reset, path and rows land in one turn (past the cap the reset already ran); a re-answer keeps the cursor's file, a new query takes row 0.
|
|
158
|
+
function land(start, items, kinds, fresh) {
|
|
159
|
+
var reply = root.phase.listed
|
|
160
|
+
var keep = root.pane.searchMode.length > 0 && start === 0 && !fresh && root.pane.rowFor(root.pane.cursorIndex)
|
|
161
|
+
// A live answer on the base the rows already stand on keeps the folder sizes and thumbnails it lists again; the first answer and an exit start clean.
|
|
162
|
+
var again = root.pane.searchLeaving !== true && root.pane.searchBase === reply.path
|
|
163
|
+
&& (root.pane.searchMode === Search.TYPING || root.pane.searchMode === Search.RESULTS)
|
|
164
|
+
var sizes = DirSizes.inlined(again ? DirSizes.carried(root.pane.dirSizeState, root.pane.rows, root.pane.held, items, start) : null, items, start)
|
|
165
|
+
var thumbs = again ? Thumbs.carried(root.pane.thumbState, root.pane.rows, root.pane.held, items, start) : null
|
|
166
|
+
if (root.holding)
|
|
167
|
+
root.release(Swap.landed(root.phase), "landed")
|
|
168
|
+
else
|
|
169
|
+
root.phase = Swap.landed(root.phase)
|
|
170
|
+
// The rows go in before the count, so each delegate the count builds is built on its own row.
|
|
171
|
+
root.pane.held = start
|
|
172
|
+
root.pane.rows = RecentMode.stampRows(root.pane, items)
|
|
173
|
+
root.pane.kindNames = kinds
|
|
174
|
+
root.applyListed(reply.total, reply.readMs, reply.sortMs, reply.path, reply.changed)
|
|
175
|
+
if (sizes)
|
|
176
|
+
root.pane.dirSizeState = sizes
|
|
177
|
+
if (thumbs)
|
|
178
|
+
root.pane.thumbState = thumbs
|
|
179
|
+
if (keep) {
|
|
180
|
+
root.pane.setCursor(Search.keptIndex(keep.n, items, start))
|
|
181
|
+
} else if (fresh) {
|
|
182
|
+
root.pane.setCursor(start)
|
|
183
|
+
}
|
|
184
|
+
root.rowsLanded()
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// A refused located window, any other failure or the wait running out lands the rows set aside, at the top, so the listing still ends.
|
|
188
|
+
function landParked() {
|
|
189
|
+
var parked = root.parked
|
|
190
|
+
if (!parked || root.phase.listed === null)
|
|
191
|
+
return false
|
|
192
|
+
root.parked = null
|
|
193
|
+
root.restore = null
|
|
194
|
+
root.land(parked.start, parked.items, parked.kinds, false)
|
|
195
|
+
return true
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// A failed or refused listing, or a kept live answer, lets the held rows go at once; the failure draws what it always did.
|
|
199
|
+
function drop() {
|
|
200
|
+
if (root.holding)
|
|
201
|
+
root.release(Swap.dropped(root.phase), "dropped")
|
|
202
|
+
else
|
|
203
|
+
root.phase = Swap.dropped(root.phase)
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function release(next, end) {
|
|
207
|
+
var query = root.phase.query
|
|
208
|
+
root.last = { ms: Date.now() - root.phase.since, end: end }
|
|
209
|
+
cap.stop()
|
|
210
|
+
root.phase = next
|
|
211
|
+
Nav.forget(root.pane, query)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function stopWaiting() {
|
|
215
|
+
minShow.stop()
|
|
216
|
+
root.waiting = []
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
function applyListed(total, readMs, sortMs, path, changed) {
|
|
220
|
+
var pane = root.pane
|
|
221
|
+
pane.thumbState = Thumbs.empty()
|
|
222
|
+
pane.dirSizeState = DirSizes.empty()
|
|
223
|
+
pane.reloadChanged = (changed === undefined || changed === null) ? -1 : changed
|
|
224
|
+
if (!pane.dualMode && !pane.listInFlight && pane.searchMode.length === 0) {
|
|
225
|
+
// With remember on each folder keeps its own order, so the fallback every other folder opens with stays untouched.
|
|
226
|
+
if (ViewState.state.rememberSort === false)
|
|
227
|
+
ViewState.changeLeaf("sort", { key: pane.backend.sortBy === "mtime" ? "date" : pane.backend.sortBy,
|
|
228
|
+
reverse: pane.backend.sortDesc })
|
|
229
|
+
pane.appliedListingPreferences = pane.listingPreferences
|
|
230
|
+
}
|
|
231
|
+
if (pane.listInFlight) {
|
|
232
|
+
pane.listedSeen = true
|
|
233
|
+
}
|
|
234
|
+
pane.total = total
|
|
235
|
+
// A live answer replaces rows in place with listed.path as the base in the same turn.
|
|
236
|
+
if (pane.searchMode === Search.TYPING || pane.searchMode === Search.RESULTS) {
|
|
237
|
+
pane.searchBase = path
|
|
238
|
+
pane.listingState = Search.listingState(pane, total)
|
|
239
|
+
pane.stateMessage = ""
|
|
240
|
+
return
|
|
241
|
+
}
|
|
242
|
+
if (path.length > 0) pane.path = path // the listing landed, so this is where the pane moves
|
|
243
|
+
pane.listingState = total === 0 ? "empty" : "ready"
|
|
244
|
+
pane.stateMessage = total === 0 ? "This folder is empty." : ""
|
|
245
|
+
pane.opened(pane.path)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Everything a rows reply does once its rows are in the pane, whether they came alone or with a swap.
|
|
249
|
+
function rowsLanded() {
|
|
250
|
+
// A landed live answer marks the phase a search, so an exit re-list forgets at once.
|
|
251
|
+
if (root.pane.searchMode.length > 0) {
|
|
252
|
+
root.phase = Swap.heard(root.phase, true)
|
|
253
|
+
}
|
|
254
|
+
var pane = root.pane
|
|
255
|
+
if (pane.rowsAt === 0 && pane.inputAt > 0 && pane.rowFor(pane.cursorIndex))
|
|
256
|
+
pane.rowsAt = Date.now()
|
|
257
|
+
pane.applyPendingSelect()
|
|
258
|
+
root.wire.anchor = Anchor.apply(pane, root.wire.anchor, Theme.fileRowHeight)
|
|
259
|
+
if (pane.preferenceAnchor)
|
|
260
|
+
pane.preferenceAnchor = Anchor.applyPreference(pane, pane.preferenceAnchor)
|
|
261
|
+
// A manual reload's notice, said only when rows changed; every other listing owes none.
|
|
262
|
+
Reload.landed(pane)
|
|
263
|
+
Tabs.applyPending(pane)
|
|
264
|
+
// The Back or Forward cursor lands with the rows, in this same turn, or not at all.
|
|
265
|
+
BackReturn.landRestore(pane, root.restore)
|
|
266
|
+
root.restore = null
|
|
267
|
+
pane.listArea.restartSettle()
|
|
268
|
+
if (pane.listInFlight) {
|
|
269
|
+
pane.listInFlight = false
|
|
270
|
+
pane.listedSeen = false
|
|
271
|
+
}
|
|
272
|
+
root.wire.locateRetry()
|
|
273
|
+
root.wire.openRenameOnArrival()
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
function describe() {
|
|
277
|
+
return { holding: root.holding, fellBack: root.fellBack, holds: root.holds, fallbacks: root.fallbacks, waits: root.waits,
|
|
278
|
+
blankFrames: root.blankFrames, loadingFrames: root.loadingFrames, last: root.last, shownMs: root.shownMs }
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// A slow listing falls back to the loading state, which stands until its rows land with their listed line.
|
|
282
|
+
Timer {
|
|
283
|
+
id: cap
|
|
284
|
+
repeat: false
|
|
285
|
+
onTriggered: {
|
|
286
|
+
if (!root.holding)
|
|
287
|
+
return
|
|
288
|
+
root.fallbacks += 1
|
|
289
|
+
root.release(Swap.expired(root.phase), "expired")
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// The mark has stood its minimum, so the rows that came meanwhile land now.
|
|
294
|
+
Timer {
|
|
295
|
+
id: minShow
|
|
296
|
+
repeat: false
|
|
297
|
+
onTriggered: {
|
|
298
|
+
var rows = root.waiting
|
|
299
|
+
root.waiting = []
|
|
300
|
+
// Every line that arrived inside the minimum lands now, in the order it arrived.
|
|
301
|
+
for (var i = 0; i < rows.length; i++)
|
|
302
|
+
root.takeRows(rows[i].start, rows[i].items, rows[i].kinds, rows[i].listing, rows[i].gen)
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
Connections {
|
|
307
|
+
target: root.pane
|
|
308
|
+
function onListInFlightChanged() {
|
|
309
|
+
if (root.pane.listInFlight)
|
|
310
|
+
return
|
|
311
|
+
cap.stop()
|
|
312
|
+
root.stopWaiting()
|
|
313
|
+
root.restore = null
|
|
314
|
+
root.parked = null
|
|
315
|
+
root.phase = Swap.ended(root.phase)
|
|
316
|
+
}
|
|
317
|
+
function onSearchModeChanged() { if (root.pane.searchMode.length === 0) root.searchWarm = false }
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Runs one turn after the frame that drew the strip, so the strip never waits for what it builds.
|
|
321
|
+
function warmSearch() { root.searchWarm = root.pane.searchMode.length > 0 }
|
|
322
|
+
|
|
323
|
+
// afterAnimating runs on this thread just before each frame is synchronised, so it sees what that frame draws.
|
|
324
|
+
Connections {
|
|
325
|
+
target: root.Window.window
|
|
326
|
+
function onAfterAnimating() {
|
|
327
|
+
// Search and "/" never put a list in flight, so their blank is no row drawn while the count still names rows.
|
|
328
|
+
var live = Search.live(root.pane) || root.pane.filterQuery.length > 0
|
|
329
|
+
var kind = Swap.frameKind(root.pane.listInFlight, root.pane.listingState, root.fellBack,
|
|
330
|
+
root.pane.rows.length, root.pane.total, live)
|
|
331
|
+
if (kind === "blank")
|
|
332
|
+
root.blankFrames += 1
|
|
333
|
+
else if (kind === "loading")
|
|
334
|
+
root.loadingFrames += 1
|
|
335
|
+
if (root.pane.searchMode.length > 0 && !root.searchWarm)
|
|
336
|
+
Qt.callLater(root.warmSearch)
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|