├── .editorconfig ├── .github ├── dependabot.yml └── workflows │ ├── gettext-template.yml │ ├── main.yml │ └── release.yml ├── .gitignore ├── AUTHORS ├── COPYING ├── README.md ├── config.h.in ├── data ├── files.gresource.xml ├── files.metainfo.xml.in.in ├── icons │ ├── permission-execute-prevent.svg │ ├── permission-execute.svg │ ├── permission-read-prevent.svg │ ├── permission-read.svg │ ├── permission-write-prevent.svg │ └── permission-write.svg ├── io.elementary.files-filemanager1.service.in ├── io.elementary.files-pkexec.in ├── io.elementary.files.desktop.in.in ├── io.elementary.files.policy.in.in ├── io.elementary.files.service.in ├── meson.build ├── schemas │ └── io.elementary.files.gschema.xml ├── screenshot-column.png ├── screenshot-grid.png ├── screenshot-list.png ├── styles │ ├── Application.css │ ├── ColorButton.css │ ├── DiskRenderer.css │ └── SidebarExpander.css └── tests │ └── images │ ├── testimage.jpg │ ├── testimage.jpg.thumb.png │ ├── testimage.png │ └── testimage.png.thumb.png ├── filechooser-portal ├── ExternalWindow.vala ├── FileChooserChoice.vala ├── FileChooserDialog.vala ├── Main.vala ├── io.elementary.files.portal ├── io.elementary.files.xdg-desktop-portal.service.in ├── meson.build └── org.freedesktop.impl.portal.desktop.elementary.files.service.in ├── libcore ├── AbstractSlot.vala ├── Bookmark.vala ├── BookmarkList.vala ├── CallWhenReady.vala ├── ConnectServerDialog.vala ├── ConnectServerOperation.vala ├── Directory.vala ├── DndHandler.vala ├── Enums.vala ├── File.vala ├── FileChanges.vala ├── FileConflictDialog.vala ├── FileOperations │ ├── CommonJob.vala │ ├── CopyMoveJob.vala │ ├── CreateJob.vala │ ├── DeleteJob.vala │ ├── EmptyTrashJob.vala │ └── MountUtils.vala ├── FileUtils.vala ├── IconInfo.vala ├── Interfaces │ ├── LocatableInterface.vala │ ├── NavigatableInterface.vala │ ├── SearchableInterface.vala │ ├── SidebarInterface.vala │ ├── SidebarItemInterface.vala │ └── SidebarListInterface.vala ├── ListModel.vala ├── PixbufUtils.vala ├── Plugin.vala ├── PluginManager.vala ├── Preferences.vala ├── ProgressInfo.vala ├── ProgressInfoManager.vala ├── Resources.vala ├── SidebarPluginItem.vala ├── SoundManager.vala ├── StockDialogs.vala ├── Thumbnailer.vala ├── TrashMonitor.vala ├── UndoManager.vala ├── UserUtils.vala ├── Widgets │ ├── BasicBreadcrumbsEntry.vala │ ├── BasicLocationBar.vala │ ├── BreadcrumbElement.vala │ ├── BreadcrumbIconList.vala │ ├── ButtonWithMenu.vala │ └── ViewSwitcher.vala ├── marlin-file-operations.c ├── marlin-file-operations.h ├── meson.build ├── pantheon-files-core-C.vapi ├── pantheon-files-core.deps └── tests │ ├── GOFDirectoryAsyncTests │ ├── GOFDirectoryAsyncTests.vala │ └── meson.build │ ├── GOFFileTests │ ├── GOFFileTests.vala │ └── meson.build │ ├── MarlinIconInfoTests │ ├── MarlinIconInfoTests.vala │ └── meson.build │ ├── UtilTests │ ├── UtilTests.vala │ └── meson.build │ └── meson.build ├── meson.build ├── meson_options.txt ├── pantheon-files-daemon ├── FileManager1.vala ├── main.vala ├── marlind-tagging.vala └── meson.build ├── plugins ├── contractor │ ├── meson.build │ ├── pantheon-files-contractor.plug │ └── plugin.vala ├── git │ ├── meson.build │ ├── pantheon-files-git.plug │ └── plugin.vala ├── meson.build ├── pantheon-files-cloud │ ├── meson.build │ ├── pantheon-files-cloudproviders.plug │ └── plugin.vala ├── pantheon-files-ctags │ ├── meson.build │ ├── pantheon-files-ctags.plug │ └── plugin.vala ├── pantheon-files-trash │ ├── meson.build │ ├── pantheon-files-trash.plug │ └── plugin.vala └── send-by-email │ ├── Portal.vala │ ├── meson.build │ ├── pantheon-files-send-by-email.plug │ └── plugin.vala ├── po ├── LINGUAS ├── POTFILES ├── aa.po ├── ab.po ├── ae.po ├── af.po ├── ak.po ├── am.po ├── an.po ├── ar.po ├── as.po ├── ast.po ├── av.po ├── ay.po ├── az.po ├── ba.po ├── be.po ├── bg.po ├── bh.po ├── bi.po ├── bm.po ├── bn.po ├── bo.po ├── br.po ├── bs.po ├── ca.po ├── ce.po ├── ch.po ├── ckb.po ├── co.po ├── cr.po ├── cs.po ├── cu.po ├── cv.po ├── cy.po ├── da.po ├── de.po ├── dv.po ├── dz.po ├── ee.po ├── el.po ├── en_AU.po ├── en_CA.po ├── en_GB.po ├── eo.po ├── es.po ├── et.po ├── eu.po ├── extra │ ├── LINGUAS │ ├── POTFILES │ ├── aa.po │ ├── ab.po │ ├── ae.po │ ├── af.po │ ├── ak.po │ ├── am.po │ ├── an.po │ ├── ar.po │ ├── as.po │ ├── ast.po │ ├── av.po │ ├── ay.po │ ├── az.po │ ├── ba.po │ ├── be.po │ ├── bg.po │ ├── bh.po │ ├── bi.po │ ├── bm.po │ ├── bn.po │ ├── bo.po │ ├── br.po │ ├── bs.po │ ├── ca.po │ ├── ce.po │ ├── ch.po │ ├── ckb.po │ ├── co.po │ ├── cr.po │ ├── cs.po │ ├── cu.po │ ├── cv.po │ ├── cy.po │ ├── da.po │ ├── de.po │ ├── dv.po │ ├── dz.po │ ├── ee.po │ ├── el.po │ ├── en_AU.po │ ├── en_CA.po │ ├── en_GB.po │ ├── eo.po │ ├── es.po │ ├── et.po │ ├── eu.po │ ├── extra.pot │ ├── fa.po │ ├── ff.po │ ├── fi.po │ ├── fj.po │ ├── fo.po │ ├── fr.po │ ├── fr_CA.po │ ├── fy.po │ ├── ga.po │ ├── gd.po │ ├── gl.po │ ├── gn.po │ ├── gu.po │ ├── gv.po │ ├── ha.po │ ├── he.po │ ├── hi.po │ ├── ho.po │ ├── hr.po │ ├── ht.po │ ├── hu.po │ ├── hy.po │ ├── hz.po │ ├── ia.po │ ├── id.po │ ├── ie.po │ ├── ig.po │ ├── ii.po │ ├── ik.po │ ├── io.po │ ├── is.po │ ├── it.po │ ├── iu.po │ ├── ja.po │ ├── jbo.po │ ├── jv.po │ ├── ka.po │ ├── kg.po │ ├── ki.po │ ├── kj.po │ ├── kk.po │ ├── kl.po │ ├── km.po │ ├── kn.po │ ├── ko.po │ ├── kr.po │ ├── ks.po │ ├── ku.po │ ├── kv.po │ ├── kw.po │ ├── ky.po │ ├── la.po │ ├── lb.po │ ├── lg.po │ ├── li.po │ ├── ln.po │ ├── lo.po │ ├── lt.po │ ├── lu.po │ ├── lv.po │ ├── meson.build │ ├── mg.po │ ├── mh.po │ ├── mi.po │ ├── mk.po │ ├── ml.po │ ├── mn.po │ ├── mo.po │ ├── mr.po │ ├── ms.po │ ├── mt.po │ ├── my.po │ ├── na.po │ ├── nb.po │ ├── nd.po │ ├── ne.po │ ├── ng.po │ ├── nl.po │ ├── nn.po │ ├── no.po │ ├── nr.po │ ├── nv.po │ ├── ny.po │ ├── oc.po │ ├── oj.po │ ├── om.po │ ├── or.po │ ├── os.po │ ├── pa.po │ ├── pi.po │ ├── pl.po │ ├── ps.po │ ├── pt.po │ ├── pt_BR.po │ ├── qu.po │ ├── rm.po │ ├── rn.po │ ├── ro.po │ ├── ru.po │ ├── rue.po │ ├── rw.po │ ├── sa.po │ ├── sc.po │ ├── sd.po │ ├── se.po │ ├── sg.po │ ├── si.po │ ├── sk.po │ ├── sl.po │ ├── sm.po │ ├── sma.po │ ├── sn.po │ ├── so.po │ ├── sq.po │ ├── sr.po │ ├── sr@latin.po │ ├── ss.po │ ├── st.po │ ├── su.po │ ├── sv.po │ ├── sw.po │ ├── szl.po │ ├── ta.po │ ├── te.po │ ├── tg.po │ ├── th.po │ ├── ti.po │ ├── tk.po │ ├── tl.po │ ├── tn.po │ ├── to.po │ ├── tr.po │ ├── ts.po │ ├── tt.po │ ├── tw.po │ ├── ty.po │ ├── ug.po │ ├── uk.po │ ├── ur.po │ ├── uz.po │ ├── ve.po │ ├── vi.po │ ├── vo.po │ ├── wa.po │ ├── wo.po │ ├── xh.po │ ├── yi.po │ ├── yo.po │ ├── za.po │ ├── zh.po │ ├── zh_CN.po │ ├── zh_HK.po │ ├── zh_TW.po │ └── zu.po ├── fa.po ├── ff.po ├── fi.po ├── fj.po ├── fo.po ├── fr.po ├── fr_CA.po ├── fy.po ├── ga.po ├── gd.po ├── gl.po ├── gn.po ├── gu.po ├── gv.po ├── ha.po ├── he.po ├── hi.po ├── ho.po ├── hr.po ├── ht.po ├── hu.po ├── hy.po ├── hz.po ├── ia.po ├── id.po ├── ie.po ├── ig.po ├── ii.po ├── ik.po ├── io.elementary.files.pot ├── io.po ├── is.po ├── it.po ├── its │ ├── polkit.its │ └── polkit.loc ├── iu.po ├── ja.po ├── jbo.po ├── jv.po ├── ka.po ├── kg.po ├── ki.po ├── kj.po ├── kk.po ├── kl.po ├── km.po ├── kn.po ├── ko.po ├── kr.po ├── ks.po ├── ku.po ├── kv.po ├── kw.po ├── ky.po ├── la.po ├── lb.po ├── lg.po ├── li.po ├── ln.po ├── lo.po ├── lt.po ├── lu.po ├── lv.po ├── meson.build ├── mg.po ├── mh.po ├── mi.po ├── mk.po ├── ml.po ├── mn.po ├── mo.po ├── mr.po ├── ms.po ├── mt.po ├── my.po ├── na.po ├── nb.po ├── nd.po ├── ne.po ├── ng.po ├── nl.po ├── nn.po ├── no.po ├── nr.po ├── nv.po ├── ny.po ├── oc.po ├── oj.po ├── om.po ├── or.po ├── os.po ├── pa.po ├── pi.po ├── pl.po ├── ps.po ├── pt.po ├── pt_BR.po ├── qu.po ├── rm.po ├── rn.po ├── ro.po ├── ru.po ├── rue.po ├── rw.po ├── sa.po ├── sc.po ├── sd.po ├── se.po ├── sg.po ├── si.po ├── sk.po ├── sl.po ├── sm.po ├── sma.po ├── sn.po ├── so.po ├── sq.po ├── sr.po ├── sr@latin.po ├── ss.po ├── st.po ├── su.po ├── sv.po ├── sw.po ├── szl.po ├── ta.po ├── te.po ├── tg.po ├── th.po ├── ti.po ├── tk.po ├── tl.po ├── tn.po ├── to.po ├── tr.po ├── ts.po ├── tt.po ├── tw.po ├── ty.po ├── ug.po ├── uk.po ├── ur.po ├── uz.po ├── ve.po ├── vi.po ├── vo.po ├── wa.po ├── wo.po ├── xh.po ├── yi.po ├── yo.po ├── za.po ├── zh.po ├── zh_CN.po ├── zh_HK.po ├── zh_TW.po └── zu.po ├── src ├── Application.vala ├── ClipboardManager.vala ├── DeepCount.vala ├── DesktopLauncher.vala ├── Dialogs │ ├── AbstractPropertiesDialog.vala │ ├── BulkRenamer │ │ ├── Renamer.vala │ │ ├── RenamerDialog.vala │ │ ├── RenamerListRow.vala │ │ └── RenamerModifier.vala │ ├── ChooseAppDialog.vala │ ├── PropertiesWindow.vala │ └── VolumePropertiesWindow.vala ├── EmblemRenderer.vala ├── IconRenderer.vala ├── ProgressUIHandler.vala ├── TextRenderer.vala ├── Utils │ ├── AppUtils.vala │ ├── MimeActions.vala │ └── Permissions.vala ├── View │ ├── AbstractDirectoryView.vala │ ├── AbstractTreeView.vala │ ├── Browser.vala │ ├── ColumnView.vala │ ├── DirectoryNotFound.vala │ ├── IconView.vala │ ├── ListView.vala │ ├── Miller.vala │ ├── PrivacyModeOn.vala │ ├── Sidebar │ │ ├── AbstractMountableRow.vala │ │ ├── BookmarkListBox.vala │ │ ├── BookmarkRow.vala │ │ ├── DeviceListBox.vala │ │ ├── DriveRow.vala │ │ ├── NetworkListBox.vala │ │ ├── NetworkRow.vala │ │ ├── SidebarWindow.vala │ │ ├── VolumeRow.vala │ │ └── VolumelessMountRow.vala │ ├── Slot.vala │ ├── ViewContainer.vala │ ├── Widgets │ │ ├── AbstractEditableLabel.vala │ │ ├── AppMenu.vala │ │ ├── BreadcrumbsEntry.vala │ │ ├── LocationBar.vala │ │ ├── MultiLineEditableLabel.vala │ │ ├── OverlayBar.vala │ │ ├── PermissionButton.vala │ │ ├── ProgressInfoWidget.vala │ │ ├── SearchResults.vala │ │ ├── SingleLineEditableLabel.vala │ │ └── Welcome.vala │ └── Window.vala ├── ZeitgeistManager.vala ├── main.vala └── meson.build └── vapi ├── gdk-wayland-3.0.vapi └── libgit2-glib-1.0.vapi /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig 2 | root = true 3 | 4 | # elementary defaults 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | indent_size = tab 9 | indent_style = space 10 | insert_final_newline = true 11 | max_line_length = 80 12 | tab_width = 4 13 | 14 | [{*.xml,*.xml.in,*.yml}] 15 | tab_width = 2 16 | 17 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | -------------------------------------------------------------------------------- /.github/workflows/gettext-template.yml: -------------------------------------------------------------------------------- 1 | name: Gettext Updates 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-22.04 10 | container: 11 | image: ghcr.io/elementary/docker:next-unstable 12 | 13 | steps: 14 | - name: Install git 15 | run: | 16 | apt-get update 17 | apt-get install git -y 18 | 19 | - name: Clone repository 20 | uses: actions/checkout@v4 21 | with: 22 | token: ${{ secrets.GIT_USER_TOKEN }} 23 | 24 | - name: Update Translation Files 25 | uses: elementary/actions/gettext-template@next 26 | env: 27 | GIT_USER_TOKEN: ${{ secrets.GIT_USER_TOKEN }} 28 | GIT_USER_NAME: "elementaryBot" 29 | GIT_USER_EMAIL: "builds@elementary.io" 30 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | pull_request: 5 | types: 6 | - opened 7 | - reopened 8 | - synchronize 9 | 10 | jobs: 11 | build: 12 | 13 | runs-on: ubuntu-22.04 14 | 15 | strategy: 16 | fail-fast: false 17 | matrix: 18 | version: [stable, unstable, development-target] 19 | container: 20 | image: ghcr.io/elementary/docker:${{ matrix.version }} 21 | 22 | steps: 23 | - uses: actions/checkout@v4 24 | - name: Install Dependencies 25 | run: | 26 | apt update 27 | apt install -y libgee-0.8-dev libglib2.0-dev libgranite-dev libgtk-3-dev libhandy-1-dev libcanberra-dev libportal-gtk3-dev 28 | apt install -y libcloudproviders-dev libdbus-glib-1-dev libpango1.0-dev 29 | apt install -y libsqlite3-dev libunity-dev libzeitgeist-2.0-dev policykit-1 libgit2-glib-1.0-dev 30 | apt install -y meson valac 31 | - name: Build 32 | env: 33 | DESTDIR: out 34 | run: | 35 | meson --prefix=/usr build 36 | cd build 37 | ninja install 38 | 39 | - name: Test 40 | env: 41 | DESTDIR: out 42 | run: | 43 | cd build 44 | ninja test 45 | 46 | lint: 47 | 48 | runs-on: ubuntu-latest 49 | 50 | container: 51 | image: valalang/lint 52 | 53 | steps: 54 | - uses: actions/checkout@v4 55 | - name: Lint 56 | run: io.elementary.vala-lint -d . 57 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | pull_request: 5 | branches: [main] 6 | types: [closed] 7 | jobs: 8 | release: 9 | runs-on: ubuntu-latest 10 | if: github.event.pull_request.merged == true && true == contains(join(github.event.pull_request.labels.*.name), 'Release') 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: elementary/actions/release@master 14 | env: 15 | GIT_USER_TOKEN: "${{ secrets.GIT_USER_TOKEN }}" 16 | GIT_USER_NAME: "elementaryBot" 17 | GIT_USER_EMAIL: "builds@elementary.io" 18 | with: 19 | release_branch: 'horus' 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | *~ 3 | .buildconfig 4 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015-2018 elementary LLC 2 | 3 | ammonkey 4 | Mathijs Henquet 5 | Robert Roth 6 | Vadim Rutkovsky 7 | Rico Tzschichholz 8 | Mario Guerriero 9 | Jeremy Wootten 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Files 2 | [![Packaging status](https://repology.org/badge/tiny-repos/elementary-files.svg)](https://repology.org/metapackage/pantheon-files) 3 | [![Translation status](https://l10n.elementary.io/widgets/files/-/svg-badge.svg)](https://l10n.elementary.io/projects/files/?utm_source=widget) 4 | 5 | ![Files Screenshot](data/screenshot-grid.png?raw=true) 6 | 7 | ## Building, Testing, and Installation 8 | 9 | You'll need the following dependencies: 10 | * meson 11 | * valac 12 | * libcanberra-dev 13 | * libcloudproviders-dev >= 0.3.0 14 | * libdbus-glib-1-dev 15 | * libgee-0.8-dev 16 | * libgit2-glib-1.0-dev 17 | * libglib2.0-dev 18 | * libgranite-dev >= 6.1.0 19 | * libgtk-3-dev 20 | * libhandy-1-dev >= 1.2.0 21 | * libpango1.0-dev 22 | * libportal-dev 23 | * libportal-gtk3-dev 24 | * libsqlite3-dev 25 | * libunity-dev 26 | * libzeitgeist-2.0-dev 27 | 28 | Run `meson build` to configure the build environment. Change to the build directory and run `ninja` to build 29 | 30 | ```bash 31 | meson build --prefix=/usr 32 | cd build 33 | ninja 34 | ``` 35 | 36 | To install, use `ninja install`, then execute with `io.elementary.files` 37 | 38 | ```bash 39 | sudo ninja install 40 | io.elementary.files 41 | ``` 42 | -------------------------------------------------------------------------------- /config.h.in: -------------------------------------------------------------------------------- 1 | #ifndef H_CONFIG_H 2 | #define H_CONFIG_H 3 | 4 | #define GETTEXT_PACKAGE "@gettext_package@" 5 | #define VERSION "@version@" 6 | #define PLUGIN_DIR "@plugin_dir@" 7 | #define TESTDATA_DIR "@testdata_dir@" 8 | #define LOCALE_DIR "@locale_dir@" 9 | #define APP_NAME "@app_name@" 10 | 11 | #define HAVE_DBUS 12 | #endif 13 | -------------------------------------------------------------------------------- /data/files.gresource.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | styles/Application.css 5 | styles/ColorButton.css 6 | styles/DiskRenderer.css 7 | styles/SidebarExpander.css 8 | 9 | 10 | icons/permission-execute-prevent.svg 11 | icons/permission-execute.svg 12 | icons/permission-read-prevent.svg 13 | icons/permission-read.svg 14 | icons/permission-write-prevent.svg 15 | icons/permission-write.svg 16 | 17 | 18 | -------------------------------------------------------------------------------- /data/icons/permission-execute-prevent.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 14 | 15 | 17 | image/svg+xml 18 | 20 | 21 | 22 | 23 | 25 | 29 | 39 | 40 | -------------------------------------------------------------------------------- /data/icons/permission-execute.svg: -------------------------------------------------------------------------------- 1 | 2 | 12 | 14 | 15 | 17 | image/svg+xml 18 | 20 | 21 | 22 | 23 | 25 | 29 | 30 | -------------------------------------------------------------------------------- /data/icons/permission-read-prevent.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 11 | 15 | 25 | 26 | -------------------------------------------------------------------------------- /data/icons/permission-read.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 11 | 15 | 16 | -------------------------------------------------------------------------------- /data/icons/permission-write-prevent.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 11 | 15 | 25 | 26 | -------------------------------------------------------------------------------- /data/icons/permission-write.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 11 | 15 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /data/io.elementary.files-filemanager1.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=org.freedesktop.FileManager1 3 | Exec=@install_prefix@/@bin_dir@/@exec_name@-daemon 4 | -------------------------------------------------------------------------------- /data/io.elementary.files-pkexec.in: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | pkexec "@exec_name@" 3 | -------------------------------------------------------------------------------- /data/io.elementary.files.desktop.in.in: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.5 3 | Type=Application 4 | 5 | Name=Files 6 | Comment=Browse your files 7 | Categories=System; 8 | Keywords=folder;manager;explore;disk;filesystem; 9 | 10 | Icon=system-file-manager 11 | Exec=@exec_name@ %U 12 | SingleMainWindow=false 13 | StartupNotify=true 14 | Terminal=false 15 | 16 | MimeType=inode/directory; 17 | 18 | X-GNOME-Gettext-Domain=@exec_name@ 19 | X-GNOME-UsesNotifications=true 20 | 21 | Actions=new-window;root; 22 | 23 | [Desktop Action new-window] 24 | Name=New Window 25 | Exec=@exec_name@ -n 26 | 27 | [Desktop Action root] 28 | Name=New Window As Administrator 29 | Exec=@exec_name@-pkexec 30 | -------------------------------------------------------------------------------- /data/io.elementary.files.policy.in.in: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | elementary 7 | https://github.com/elementary/files 8 | system-file-manager 9 | 10 | Run Pantheon Files as Administrator 11 | Authentication is required to run Files as Administrator 12 | 13 | auth_admin 14 | auth_admin 15 | auth_admin 16 | 17 | @install_prefix@/@bin_dir@/@exec_name@ 18 | true 19 | 20 | 21 | -------------------------------------------------------------------------------- /data/io.elementary.files.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=@exec_name@.db 3 | Exec=@install_prefix@/@bin_dir@/@exec_name@-daemon 4 | -------------------------------------------------------------------------------- /data/meson.build: -------------------------------------------------------------------------------- 1 | config_data = configuration_data() 2 | config_data.set('install_prefix', get_option('prefix')) 3 | config_data.set('bin_dir', get_option('bindir')) 4 | config_data.set('exec_name', meson.project_name()) 5 | 6 | configure_file( 7 | input: meson.project_name() + '.service.in', 8 | output: meson.project_name() + '.service', 9 | configuration: config_data, 10 | install: true, 11 | install_dir: join_paths(get_option('datadir'), 'dbus-1', 'services') 12 | ) 13 | 14 | configure_file( 15 | input: meson.project_name() + '-filemanager1.service.in', 16 | output: meson.project_name() + '.Filemanager1.service', 17 | configuration: config_data, 18 | install: true, 19 | install_dir: join_paths(get_option('datadir'), 'dbus-1', 'services') 20 | ) 21 | 22 | configure_file( 23 | input: meson.project_name() + '-pkexec.in', 24 | output: meson.project_name() + '-pkexec', 25 | configuration: config_data, 26 | install: true, 27 | install_dir: get_option('bindir') 28 | ) 29 | 30 | policy_in = configure_file( 31 | input: meson.project_name() + '.policy.in.in', 32 | output: meson.project_name() + '.policy.in', 33 | configuration: config_data, 34 | install: false, 35 | ) 36 | 37 | desktop_in = configure_file( 38 | input: meson.project_name() + '.desktop.in.in', 39 | output: meson.project_name() + '.desktop.in', 40 | configuration: config_data, 41 | install: false, 42 | ) 43 | 44 | appdata_in = configure_file( 45 | input: 'files.metainfo.xml.in.in', 46 | output: 'files.metainfo.xml.in', 47 | configuration: config_data, 48 | install: false, 49 | ) 50 | 51 | i18n.merge_file( 52 | input: policy_in, 53 | output: meson.project_name() + '.policy', 54 | po_dir: join_paths(meson.project_source_root(), 'po', 'extra'), 55 | data_dirs: join_paths(meson.project_source_root(), 'po'), 56 | install: true, 57 | install_dir: join_paths(get_option('datadir'), 'polkit-1', 'actions'), 58 | ) 59 | 60 | i18n.merge_file( 61 | input: desktop_in, 62 | output: meson.project_name() + '.desktop', 63 | install: true, 64 | install_dir: join_paths(get_option('datadir'), 'applications'), 65 | po_dir: join_paths(meson.project_source_root(), 'po', 'extra'), 66 | type: 'desktop' 67 | ) 68 | 69 | i18n.merge_file( 70 | input: appdata_in, 71 | output: meson.project_name() + '.metainfo.xml', 72 | install: true, 73 | install_dir: get_option('datadir') / 'metainfo', 74 | po_dir: meson.project_source_root() / 'po' / 'extra', 75 | type: 'xml' 76 | ) 77 | 78 | 79 | install_data( 80 | join_paths(meson.current_source_dir(),'schemas', meson.project_name() + '.gschema.xml'), 81 | install_dir: join_paths(get_option('datadir'), 'glib-2.0', 'schemas') 82 | ) 83 | -------------------------------------------------------------------------------- /data/screenshot-column.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/elementary/files/435027788944431d05e33c80594bdd59691b0a7a/data/screenshot-column.png -------------------------------------------------------------------------------- /data/screenshot-grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/elementary/files/435027788944431d05e33c80594bdd59691b0a7a/data/screenshot-grid.png -------------------------------------------------------------------------------- /data/screenshot-list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/elementary/files/435027788944431d05e33c80594bdd59691b0a7a/data/screenshot-list.png -------------------------------------------------------------------------------- /data/styles/Application.css: -------------------------------------------------------------------------------- 1 | /*FIXME: Remove list styles in Gtk4*/ 2 | list.rich-list > row { 3 | padding: 6px; 4 | min-height: 32px; 5 | } 6 | 7 | list.rich-list label { 8 | margin: 0 6px; 9 | } 10 | 11 | list.rich-list button.toggle { 12 | margin: 3px 0; 13 | } 14 | 15 | list:not(.horizontal) row.separator, 16 | list.separators:not(.horizontal) > row:not(.separator) + row:not(.separator) { 17 | border-top: 1px solid @menu_separator; 18 | } 19 | 20 | list.boxed-list { 21 | border-radius: 6px; 22 | box-shadow: 0 1px 3px alpha(black, 0.1); 23 | } 24 | 25 | list.boxed-list > row:first-child { 26 | border-top-left-radius: 6px; 27 | border-top-right-radius: 6px; 28 | } 29 | 30 | list.boxed-list > row:last-child { 31 | border-bottom-left-radius: 6px; 32 | border-bottom-right-radius: 6px; 33 | border-bottom-width: 0; 34 | } 35 | -------------------------------------------------------------------------------- /data/styles/ColorButton.css: -------------------------------------------------------------------------------- 1 | .color-button.none check { 2 | background: @base_color; 3 | color: mix(@text_color, @base_color, 0.5); 4 | min-height: 14px; 5 | min-width: 14px; 6 | -gtk-icon-source: -gtk-icontheme("close-symbolic"); 7 | } 8 | -------------------------------------------------------------------------------- /data/styles/DiskRenderer.css: -------------------------------------------------------------------------------- 1 | .sidebar button.image-button { 2 | padding: 0; 3 | } 4 | 5 | .sidebar levelbar block { 6 | min-height: 3px; 7 | } 8 | 9 | /* Override the success color */ 10 | .sidebar levelbar block.filled.low { 11 | background: alpha(@text_color, 0.6); 12 | } 13 | 14 | .sidebar levelbar block.filled.low + .empty, 15 | .sidebar levelbar block.filled.low:backdrop { 16 | background: alpha(@text_color, 0.2); 17 | } 18 | -------------------------------------------------------------------------------- /data/styles/SidebarExpander.css: -------------------------------------------------------------------------------- 1 | .expander { 2 | background: transparent; 3 | border: none; 4 | box-shadow: none; 5 | padding: 0 0.58333333rem; /* 0 6px */ 6 | } 7 | 8 | .expander .arrow { 9 | animation: none; 10 | transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1); 11 | opacity: 0; 12 | -gtk-icon-source: -gtk-icontheme("pan-end-symbolic"); 13 | } 14 | 15 | .expander:checked .arrow { 16 | transition: all 250ms cubic-bezier(0.4, 0, 0.2, 1); 17 | -gtk-icon-transform: rotate(90deg); 18 | } 19 | 20 | .expander:hover .arrow { 21 | transition: all 100ms cubic-bezier(0.4, 0, 0.2, 1); 22 | opacity: 1; 23 | } 24 | -------------------------------------------------------------------------------- /data/tests/images/testimage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/elementary/files/435027788944431d05e33c80594bdd59691b0a7a/data/tests/images/testimage.jpg -------------------------------------------------------------------------------- /data/tests/images/testimage.jpg.thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/elementary/files/435027788944431d05e33c80594bdd59691b0a7a/data/tests/images/testimage.jpg.thumb.png -------------------------------------------------------------------------------- /data/tests/images/testimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/elementary/files/435027788944431d05e33c80594bdd59691b0a7a/data/tests/images/testimage.png -------------------------------------------------------------------------------- /data/tests/images/testimage.png.thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/elementary/files/435027788944431d05e33c80594bdd59691b0a7a/data/tests/images/testimage.png.thumb.png -------------------------------------------------------------------------------- /filechooser-portal/FileChooserChoice.vala: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2021 elementary, Inc. (https://elementary.io) 3 | * SPDX-License-Identifier: LGPL-2.1-or-later 4 | */ 5 | 6 | public class Files.FileChooserChoice : Gtk.Box { 7 | public Variant? options { get; construct; } 8 | public string label { get; set; } 9 | public string selected { get; set; } 10 | 11 | public FileChooserChoice.from_variant (Variant variant) requires ( 12 | variant.is_of_type (new VariantType ("(ssa(ss)s)")) 13 | ) { 14 | string id, label, selected; 15 | Variant? options; 16 | 17 | variant.get ("(ss@a(ss)s)", out id, out label, out options, out selected); 18 | 19 | Object (name: id, label: label, options: options, selected: selected); 20 | } 21 | 22 | construct { 23 | orientation = Gtk.Orientation.HORIZONTAL; 24 | halign = Gtk.Align.START; 25 | spacing = 6; 26 | 27 | var label = new Gtk.Label (label); 28 | bind_property ("label", label, "label", BindingFlags.DEFAULT); 29 | add (label); 30 | 31 | if (options.n_children () == 0) { 32 | var check = new Gtk.CheckButton (); 33 | bind_property ( 34 | "selected", check, "active", BindingFlags.BIDIRECTIONAL, 35 | (b, s, ref t) => { 36 | t.set_boolean (bool.parse ((string) s)); 37 | return true; 38 | }, 39 | (b, s, ref t) => { 40 | t.set_string (((bool) s).to_string ()); 41 | return true; 42 | } 43 | ); 44 | 45 | add (check); 46 | } else { 47 | var combo = new Gtk.ComboBoxText (); 48 | var iter = options.iterator (); 49 | string key, val; 50 | 51 | while (iter.next ("(ss)", out key, out val)) { 52 | combo.append (key, val); 53 | } 54 | 55 | bind_property ("selected", combo, "active-id", BindingFlags.BIDIRECTIONAL); 56 | add (combo); 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /filechooser-portal/io.elementary.files.portal: -------------------------------------------------------------------------------- 1 | [portal] 2 | DBusName=org.freedesktop.impl.portal.desktop.elementary.files 3 | Interfaces=org.freedesktop.impl.portal.FileChooser 4 | UseIn=pantheon 5 | -------------------------------------------------------------------------------- /filechooser-portal/io.elementary.files.xdg-desktop-portal.service.in: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Portal service (Pantheon Files) 3 | 4 | [Service] 5 | Type=dbus 6 | BusName=org.freedesktop.impl.portal.desktop.elementary.files 7 | ExecStart=@libexecdir@/io.elementary.files.xdg-desktop-portal 8 | -------------------------------------------------------------------------------- /filechooser-portal/meson.build: -------------------------------------------------------------------------------- 1 | libexec_dir = join_paths(get_option('prefix'), get_option ('libexecdir')) 2 | 3 | executable( 4 | 'io.elementary.files.xdg-desktop-portal', 5 | 'ExternalWindow.vala', 6 | 'FileChooserChoice.vala', 7 | 'FileChooserDialog.vala', 8 | 'Main.vala', 9 | 10 | dependencies : [ 11 | pantheon_files_core_dep, 12 | dependency('gdk-x11-3.0'), 13 | dependency('gdk-wayland-3.0'), 14 | handy_dep, 15 | project_config_dep 16 | ], 17 | install: true, 18 | install_dir: libexec_dir, 19 | ) 20 | 21 | conf_data = configuration_data() 22 | conf_data.set('libexecdir', libexec_dir) 23 | 24 | systemd_systemduserunitdir = get_option('systemduserunitdir') 25 | if systemd_systemduserunitdir != 'no' 26 | 27 | if systemd_systemduserunitdir == '' 28 | systemd_dep = dependency('systemd', version: '>= 206', required: false) 29 | assert(systemd_dep.found(), 'systemd required but not found, please provide a valid systemd user unit dir or disable it') 30 | systemd_systemduserunitdir = systemd_dep.get_variable('systemduserunitdir', pkgconfig_define: ['prefix', get_option('prefix')]) 31 | endif 32 | 33 | configure_file( 34 | input: 'io.elementary.files.xdg-desktop-portal.service.in', 35 | output: '@BASENAME@', 36 | configuration: conf_data, 37 | install: true, 38 | install_dir: systemd_systemduserunitdir 39 | ) 40 | endif 41 | 42 | install_data( 43 | 'io.elementary.files.portal', 44 | install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'xdg-desktop-portal', 'portals') 45 | ) 46 | 47 | configure_file( 48 | input: 'org.freedesktop.impl.portal.desktop.elementary.files.service.in', 49 | output: '@BASENAME@', 50 | configuration: conf_data, 51 | install: true, 52 | install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'dbus-1', 'services') 53 | ) 54 | -------------------------------------------------------------------------------- /filechooser-portal/org.freedesktop.impl.portal.desktop.elementary.files.service.in: -------------------------------------------------------------------------------- 1 | [D-BUS Service] 2 | Name=org.freedesktop.impl.portal.desktop.elementary.files 3 | Exec=@libexecdir@/io.elementary.files.xdg-desktop-portal 4 | SystemdService=io.elementary.files.xdg-desktop-portal.service 5 | -------------------------------------------------------------------------------- /libcore/CallWhenReady.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2011 Marlin Developers 3 | 4 | This program is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation, Inc.,, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with this program. If not, see . 16 | 17 | Author: ammonkey 18 | ***/ 19 | 20 | GLib.List? callwhenready_cache = null; 21 | 22 | public class Files.CallWhenReady : Object { 23 | public delegate void call_when_ready_func (GLib.Listfiles); 24 | 25 | public GLib.List files; 26 | private unowned call_when_ready_func? f; 27 | private GLib.List? call_when_ready_list = null; 28 | 29 | 30 | public CallWhenReady (GLib.List _files, call_when_ready_func? _f = null) { 31 | files = _files.copy_deep ((GLib.CopyFunc) GLib.Object.ref); // only used for limited length lists currently 32 | f = _f; 33 | 34 | int count = 0; 35 | int total = 0; 36 | foreach (unowned Files.File gof in files) { 37 | total++; 38 | if (gof.info == null) { 39 | call_when_ready_list.prepend (gof); 40 | query_info_async.begin (gof, file_ready); 41 | } else { 42 | count++; 43 | } 44 | } 45 | 46 | /* we didn't need to queue anything, all the infos were available */ 47 | if (count > 0 && count == total && f != null) { 48 | f (files); 49 | } 50 | 51 | callwhenready_cache.prepend (this); 52 | } 53 | 54 | private void file_ready (Files.File gof) { 55 | gof.update (); 56 | } 57 | 58 | /**TODO** move this to Files.File */ 59 | 60 | private unowned string gio_default_attributes = "standard::is-hidden,standard::is-backup,standard::is-symlink," + 61 | "standard::type,standard::name,standard::display-name,standard::fast-content-type,standard::size," + 62 | "standard::symlink-target,access::*,time::*,owner::*,trash::*,unix::*,id::filesystem,thumbnail::*"; 63 | 64 | private delegate void func_query_info (Files.File gof); 65 | 66 | private async void query_info_async (Files.File gof, func_query_info? fqi = null) { 67 | try { 68 | gof.info = yield gof.location.query_info_async (gio_default_attributes, 69 | FileQueryInfoFlags.NONE, 70 | Priority.DEFAULT); 71 | if (fqi != null) { 72 | fqi (gof); 73 | } 74 | } catch (Error err) { 75 | debug ("query info failed, %s %s", err.message, gof.uri); 76 | if (err is IOError.NOT_FOUND) { 77 | gof.exists = false; 78 | } 79 | 80 | if (err is IOError.NOT_MOUNTED) { 81 | gof.is_mounted = false; 82 | } 83 | } 84 | 85 | call_when_ready_list.remove (gof); 86 | if (call_when_ready_list == null) { 87 | debug ("call when ready OK - empty list"); 88 | if (f != null) { 89 | f (files); 90 | } 91 | } 92 | 93 | callwhenready_cache.remove (this); 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /libcore/ConnectServerOperation.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2010 Cosimo Cecchi 3 | Copyright (c) 2015-2018 elementary LLC 4 | 5 | This program is free software: you can redistribute it and/or modify it 6 | under the terms of the GNU Lesser General Public License version 3, as published 7 | by the Free Software Foundation. 8 | 9 | This program is distributed in the hope that it will be useful, but 10 | WITHOUT ANY WARRANTY; without even the implied warranties of 11 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 12 | PURPOSE. See the GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License along 15 | with this program. If not, see . 16 | 17 | Authors: Cosimo Cecchi 18 | Julián Unrrein 19 | ***/ 20 | 21 | public class Files.ConnectServer.Operation : Gtk.MountOperation { 22 | 23 | private PF.ConnectServerDialog dialog; 24 | 25 | public Operation (PF.ConnectServerDialog dialog) { 26 | this.dialog = dialog; 27 | this.set_parent (dialog); 28 | 29 | /* Turn the parent's modal functionality off because the mount operation needs to take over */ 30 | this.dialog.modal = false; 31 | this.reply.connect ( (result) => { 32 | this.dialog.modal = true; 33 | }); 34 | } 35 | 36 | /* 37 | When mounting a network share, the ask_password implementation in 38 | Gtk.MountOperation asks the user the password in a little separate window. 39 | But we don't want an extra window. Our ConnectServer.Dialog already 40 | provided a place to put the password in. 41 | 42 | This ask_password implementation gets the password directly from the 43 | dialog, so no extra window is spawned. 44 | */ 45 | public override void ask_password (string message, 46 | string default_user, 47 | string default_domain, 48 | AskPasswordFlags flags) { 49 | 50 | this.dialog.fill_details_async.begin (this, default_user, default_domain, flags, 51 | (source, result) => { 52 | bool res = this.dialog.fill_details_async.end (result); 53 | 54 | if (res) { 55 | reply (MountOperationResult.HANDLED); 56 | } else { 57 | reply (MountOperationResult.ABORTED); 58 | } 59 | }); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /libcore/FileOperations/CreateJob.vala: -------------------------------------------------------------------------------- 1 | /* Copyright 2022 elementary LLC (https://elementary.io) 2 | * 3 | * This program is free software; you can redistribute it and/or 4 | * modify it under the terms of the GNU General Public License as 5 | * published by the Free Software Foundation, Inc.,; either version 2 of 6 | * the License, or (at your option) any later version. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public 14 | * License along with this program; if not, write to the Free 15 | * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 | * Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | public class Files.FileOperations.CreateJob : CommonJob { 20 | protected GLib.File dest_dir; 21 | protected string? filename; 22 | protected bool make_dir; 23 | protected GLib.File? src; 24 | [CCode (array_length_cname = "length")] 25 | protected uint8[]? src_data; 26 | protected GLib.File created_file; 27 | 28 | ~CreateJob () { 29 | Files.FileChanges.consume_changes (true); 30 | } 31 | 32 | public CreateJob.folder (Gtk.Window? parent_window, GLib.File dest_dir) { 33 | base (parent_window); 34 | this.dest_dir = dest_dir; 35 | this.make_dir = true; 36 | 37 | undo_redo_data = new UndoActionData (Files.UndoActionType.CREATEFOLDER, 1); 38 | } 39 | 40 | public CreateJob.file_from_template (Gtk.Window? parent_window, GLib.File dest_dir, string target_filename, GLib.File? src) { 41 | base (parent_window); 42 | this.dest_dir = dest_dir; 43 | this.filename = target_filename; 44 | this.src = src; 45 | 46 | undo_redo_data = new UndoActionData (Files.UndoActionType.CREATEFILEFROMTEMPLATE, 1); 47 | } 48 | 49 | public CreateJob.file (Gtk.Window? parent_window, GLib.File dest_dir, string? target_filename, [CCode (array_length_cname = "length")] uint8[] src_data) { 50 | base (parent_window); 51 | this.dest_dir = dest_dir; 52 | this.filename = target_filename; 53 | this.src_data = src_data; 54 | 55 | undo_redo_data = new UndoActionData (Files.UndoActionType.CREATEEMPTYFILE, 1); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /libcore/Interfaces/LocatableInterface.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2015-2018 elementary LLC 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | 16 | Authors : Jeremy Wootten 17 | ***/ 18 | namespace Files.View.Chrome { 19 | /* Interface implemented by BasicLocationBar and LocationBar */ 20 | public interface Locatable : Gtk.Box { 21 | public signal void path_change_request (string path, Files.OpenFlag flag = Files.OpenFlag.DEFAULT); 22 | 23 | public abstract void set_display_path (string path); 24 | public abstract string get_display_path (); 25 | public abstract bool set_focussed (); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /libcore/Interfaces/NavigatableInterface.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2015-2018 elementary LLC 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | 16 | Authors : Jeremy Wootten 17 | ***/ 18 | namespace Files.View.Chrome { 19 | /* Interface implemented by BasicBreadcrumbsEntry and BreadCrumbsEntry */ 20 | public interface Navigatable : Gtk.Widget { 21 | public abstract string? action_icon_name { get; set; } 22 | public abstract bool hide_breadcrumbs { get; set; default = false; } 23 | 24 | public signal void entry_text_changed (string txt); 25 | public signal void activate_path (string path, Files.OpenFlag flag = Files.OpenFlag.DEFAULT); 26 | public signal void action_icon_press (); 27 | public signal void primary_icon_press (); 28 | 29 | public abstract void set_breadcrumbs_path (string newpath); 30 | public abstract string get_breadcrumbs_path (bool include_file_protocol = true); 31 | 32 | public abstract void set_action_icon_tooltip (string? tip); 33 | public abstract void hide_action_icon (); 34 | 35 | public abstract void set_entry_text (string? txt); 36 | public abstract void reset (); 37 | 38 | public virtual void set_animation_visible (bool visible) {} 39 | /*Note: This is not the same as the Gtk.Entry placeholder_text */ 40 | public abstract void set_placeholder (string placeholder); 41 | public abstract void show_default_action_icon (); 42 | public abstract void set_default_action_icon_tooltip (); 43 | 44 | public abstract string get_entry_text (); 45 | public abstract int get_minimum_width (); 46 | 47 | protected abstract void set_default_entry_tooltip (); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /libcore/Interfaces/SearchableInterface.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2015-2018 elementary LLC 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | 16 | Authors : Jeremy Wootten 17 | ***/ 18 | namespace Files.View.Chrome { 19 | /* Interface implemented by SearchResults */ 20 | public interface Searchable : Gtk.Widget { 21 | public signal void file_selected (GLib.File file); 22 | public signal void file_activated (GLib.File file); 23 | public signal void cursor_changed (GLib.File? file); 24 | public signal void first_match_found (GLib.File? file); 25 | public signal void exit (bool exit_navigate = true); 26 | 27 | public abstract void cancel (); 28 | public abstract void search (string txt, GLib.File search_location); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /libcore/Interfaces/SidebarInterface.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright 2020 elementary Inc. 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | 16 | Authors : Jeremy Wootten 17 | ***/ 18 | 19 | namespace Files { 20 | [CCode (has_target = false)] 21 | public delegate void SidebarCallbackFunc (Gtk.Widget widget); 22 | 23 | public enum PlaceType { 24 | BUILT_IN, 25 | MOUNTED_VOLUME, 26 | BOOKMARK, 27 | BOOKMARKS_CATEGORY, 28 | PERSONAL_CATEGORY, 29 | STORAGE_CATEGORY, 30 | NETWORK_CATEGORY, 31 | PLUGIN_ITEM 32 | } 33 | } 34 | 35 | public interface Files.SidebarInterface : Gtk.Widget { 36 | /* Plugin interface */ 37 | public abstract uint32 add_plugin_item (Files.SidebarPluginItem item, Files.PlaceType category); 38 | public abstract bool update_plugin_item (Files.SidebarPluginItem item, uint32 item_id); 39 | /* Window interface */ 40 | public signal bool request_focus (); 41 | public signal void sync_needed (); 42 | public signal void path_change_request (string uri, Files.OpenFlag flag); 43 | public abstract void add_favorite_uri (string uri, string custom_name = ""); 44 | public abstract bool has_favorite_uri (string uri); 45 | public abstract void sync_uri (string uri); 46 | public abstract void reload (); 47 | public abstract void on_free_space_change (); 48 | public abstract void focus (); 49 | } 50 | -------------------------------------------------------------------------------- /libcore/Interfaces/SidebarItemInterface.vala: -------------------------------------------------------------------------------- 1 | /* 2 | * SidebarItemInterface.vala 3 | * 4 | * Copyright 2020 elementary LLC. 5 | * 6 | * This program is free software; you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License as published by 8 | * the Free Software Foundation; either version 2 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | * GNU General Public License for more details. 15 | * 16 | * You should have received a copy of the GNU General Public License 17 | * along with this program; if not, write to the Free Software 18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 19 | * MA 02110-1301, USA. 20 | * 21 | * Authors : Jeremy Wootten 22 | */ 23 | 24 | public interface Sidebar.SidebarItemInterface : Object { 25 | /* Non constant static members must be initialised in implementing class */ 26 | protected static uint32 row_id; 27 | protected static Gee.HashMap item_id_map; 28 | protected static Mutex item_map_lock; 29 | 30 | protected static uint32 get_next_item_id () { 31 | return ++row_id; //Must be > 0 32 | } 33 | 34 | public static SidebarItemInterface? get_item (uint32 id) { 35 | if (id == 0) { 36 | return null; 37 | } 38 | 39 | item_map_lock.@lock (); 40 | var item = item_id_map.@get (id); 41 | item_map_lock.unlock (); 42 | return item; 43 | } 44 | 45 | public abstract SidebarListInterface list { get; set construct; } 46 | public abstract uint32 id { get; set construct; } 47 | public abstract string uri { get; set construct; } 48 | public abstract string custom_name { get; set ; } 49 | public abstract Icon gicon { get; set construct; } 50 | public abstract bool pinned { get; set construct; } // Whether can be dragged 51 | public abstract bool permanent { get; set construct; } // Whether can be deleted 52 | public abstract bool can_insert_before { get; set; default = true; } 53 | public abstract bool can_insert_after { get; set; default = true; } 54 | public abstract int get_index (); 55 | 56 | /* Provision of plugin items with additional menu options */ 57 | //TODO Make a separate interface? 58 | public abstract MenuModel? menu_model {get; set; default = null;} 59 | public abstract ActionGroup? action_group {get; set; default = null;} 60 | public abstract string? action_group_namespace { get; set; default = null;} 61 | 62 | public abstract void destroy_bookmark (); 63 | public virtual void update_icon (Icon icon) { 64 | gicon = icon; 65 | } 66 | 67 | public virtual void add_extra_menu_items (GLib.Menu menu) {} 68 | public virtual void update_plugin_data (Files.SidebarPluginItem item) {} 69 | 70 | public virtual void activated (Files.OpenFlag flag = Files.OpenFlag.DEFAULT) { 71 | list.open_item (this, flag); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /libcore/Plugin.vala: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2015-2018 elementary LLC 2 | * 3 | * This program is free software; you can redistribute it and/or 4 | * modify it under the terms of the GNU General Public License as 5 | * published by the Free Software Foundation, Inc.,; either version 2 of 6 | * the License, or (at your option) any later version. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public 14 | * License along with this program; if not, write to the Free 15 | * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 | * Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | public abstract class Files.Plugins.Base { 20 | public virtual void directory_loaded (Gtk.ApplicationWindow window, Files.AbstractSlot view, Files.File directory) { } 21 | public virtual void context_menu (Gtk.Widget widget, List files) { } 22 | public virtual void sidebar_loaded (Gtk.Widget widget) { } 23 | public virtual void update_sidebar (Gtk.Widget widget) { } 24 | public virtual void update_file_info (Files.File file) { } 25 | 26 | public Gtk.Widget window; 27 | 28 | public void interface_loaded (Gtk.Widget widget) { 29 | window = widget; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /libcore/Preferences.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (C) 2011 ammonkey 3 | 4 | This program is free software: you can redistribute it and/or modify 5 | it under the terms of the GNU General Public License as published by 6 | the Free Software Foundation, Inc.,, either version 3 of the License, or 7 | (at your option) any later version. 8 | 9 | This program is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License 15 | along with this program. If not, see . 16 | ***/ 17 | 18 | namespace Files { 19 | 20 | public static Preferences? preferences = null; 21 | 22 | public class Preferences : Object { 23 | /* First element set to null in order that the text renderer background is not set */ 24 | public const string?[] TAGS_COLORS = { 25 | null, "#64baff", "#43d6b5", "#9bdb4d", "#ffe16b", "#ffc27d", "#ff8c82", "#f4679d", "#cd9ef7", "#a3907c", "#95a3ab", null 26 | }; 27 | 28 | public bool show_hidden_files {get; set; default = false;} 29 | public bool show_remote_thumbnails {set; get; default = true;} 30 | public bool show_local_thumbnails {set; get; default = true;} 31 | public bool singleclick_select {set; get; default = false;} 32 | public bool confirm_trash {set; get; default = true;} 33 | public bool force_icon_size {set; get; default = true;} 34 | public bool sort_directories_first { get; set; default = true; } 35 | public bool remember_history { get; set; default = true; } 36 | 37 | public string date_format {set; get; default = "iso";} 38 | public string clock_format {set; get; default = "24h";} 39 | 40 | public static Preferences get_default () { 41 | if (preferences == null) { 42 | preferences = new Preferences (); 43 | } 44 | 45 | return preferences; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /libcore/ProgressInfoManager.vala: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2018 elementary LLC (https://elementary.io) 2 | * 3 | * This program is free software; you can redistribute it and/or 4 | * modify it under the terms of the GNU General Public License as 5 | * published by the Free Software Foundation, Inc.,; either version 2 of 6 | * the License, or (at your option) any later version. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public 14 | * License along with this program; if not, write to the Free 15 | * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 | * Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | /* Maintains a list of active infos and signals when a new one added */ 20 | /* Used by the ProgressUIHandler to update the progress window and launcher */ 21 | public class PF.Progress.InfoManager : GLib.Object { 22 | public signal void new_progress_info (PF.Progress.Info info); 23 | 24 | private Gee.LinkedList progress_infos; 25 | 26 | private static PF.Progress.InfoManager progress_info_manager; 27 | public static PF.Progress.InfoManager get_instance () { 28 | if (progress_info_manager == null) { 29 | progress_info_manager = new Progress.InfoManager (); 30 | } 31 | 32 | return progress_info_manager; 33 | } 34 | 35 | construct { 36 | progress_infos = new Gee.LinkedList (); 37 | } 38 | 39 | public void add_new_info (PF.Progress.Info info) { 40 | if (info in progress_infos) { 41 | warning ("Adding two times the same progress info object to the manager"); 42 | return; 43 | } 44 | 45 | progress_infos.add (info); 46 | new_progress_info (info); 47 | } 48 | 49 | public void remove_finished_info (PF.Progress.Info info) { 50 | progress_infos.remove (info); 51 | } 52 | 53 | public unowned Gee.LinkedList get_all_infos () { 54 | return progress_infos; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /libcore/SidebarPluginItem.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2018 elementary LLC 3 | 4 | Pantheon Files is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU General Public License as 6 | published by the Free Software Foundation; either version 2 of the 7 | License, or (at your option) any later version. 8 | 9 | Pantheon Files is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License along 15 | with this program. If not, see . 16 | 17 | Author(s): Fernando da Silva Sousa 18 | ***/ 19 | 20 | public class Files.SidebarPluginItem : Object { 21 | //TODO This can be simplified with rewritten Sidebar 22 | public const PlaceType PLACE_TYPE = PlaceType.PLUGIN_ITEM; 23 | public string name { get; set; } 24 | public string? uri { get; set; } 25 | public Drive? drive { get; set; } 26 | public Volume? volume { get; set; } 27 | public Mount? mount { get; set; } 28 | public Icon? icon { get; set; } 29 | public uint index { get; set; } 30 | public bool can_eject { get; set; } 31 | public string? tooltip { get; set; } 32 | public Icon? action_icon { get; set; } 33 | public bool show_spinner { get; set; default = false; } 34 | public uint64 free_space { get; set; default = 0; } 35 | public uint64 disk_size { get; set; default = 0; } 36 | public ActionGroup? action_group { get; set; } 37 | public string? action_group_namespace { get; set; } 38 | public MenuModel? menu_model { get; set; } 39 | public SidebarCallbackFunc? cb { get; set; } //Not currently used? 40 | } 41 | -------------------------------------------------------------------------------- /libcore/SoundManager.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2016-2018 elementary LLC 3 | 4 | This program is free software; you can redistribute it and/or modify it 5 | under the terms of the GNU General Public License as published by the Free 6 | Software Foundation; either version 2 of the License, or (at your option) 7 | any later version. 8 | 9 | This program is distributed in the hope that it will be useful, but WITHOUT 10 | ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 | more details. 13 | 14 | You should have received a copy of the GNU General Public License along with 15 | this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, 16 | Fifth Floor Boston, MA 02110-1335 USA. 17 | 18 | Authors : Jeremy Wootten 19 | 20 | Some convenience wrappers around libcanberra for using sounds within io.elementary.files. 21 | 22 | ***/ 23 | 24 | namespace PF { 25 | 26 | public class SoundManager : GLib.Object { 27 | private static SoundManager? instance = null; 28 | private static Settings sound_settings; 29 | public static unowned SoundManager get_instance () { 30 | if (instance == null) { 31 | instance = new SoundManager (); 32 | } 33 | 34 | return instance; 35 | } 36 | 37 | Canberra.Context? ca_context; 38 | 39 | static construct { 40 | sound_settings = new Settings ("org.gnome.desktop.sound"); 41 | } 42 | 43 | private SoundManager () { 44 | ca_context = null; 45 | Canberra.Context.create (out ca_context); 46 | if (ca_context != null) { 47 | ca_context.change_props (Canberra.PROP_APPLICATION_NAME, _(PF.Sound.APP_TITLE), 48 | Canberra.PROP_APPLICATION_ID, PF.Sound.APP_ID, 49 | Canberra.PROP_CANBERRA_XDG_THEME_NAME, PF.Sound.THEME, 50 | Canberra.PROP_APPLICATION_ICON_NAME, PF.Sound.APP_LOGO); 51 | ca_context.open (); 52 | } 53 | } 54 | 55 | public void play_delete_sound () { 56 | play_sound (PF.Sound.DELETE); 57 | } 58 | public void play_empty_trash_sound () { 59 | play_sound (PF.Sound.EMPTY_TRASH); 60 | } 61 | public void play_sound (string pf_sound_id) { 62 | if (ca_context == null) { 63 | return; 64 | } 65 | 66 | if (sound_settings.get_boolean ("event-sounds")) { 67 | ca_context.play (0, Canberra.PROP_EVENT_ID, pf_sound_id); 68 | } 69 | } 70 | } 71 | 72 | namespace Sound { 73 | const string APP_TITLE = "Files"; 74 | const string APP_ID = "io.elementary.files"; 75 | const string APP_LOGO = "system-file-manager"; 76 | public const string THEME = "elementary"; 77 | public const string DELETE = "trash-empty"; 78 | public const string EMPTY_TRASH = "trash-empty"; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /libcore/StockDialogs.vala: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2018-19 elementary LLC (https://elementary.io) 2 | * 3 | * This program is free software; you can redistribute it and/or 4 | * modify it under the terms of the GNU General Public License as 5 | * published by the Free Software Foundation, Inc.,; either version 2 of 6 | * the License, or (at your option) any later version. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public 14 | * License along with this program; if not, write to the Free 15 | * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 | * Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | /* Common dialog buttons */ 20 | public const string CANCEL = _("_Cancel"); 21 | public const string DELETE = _("Delete"); 22 | public const string SKIP = _("_Skip"); 23 | public const string SKIP_ALL = _("S_kip All"); 24 | public const string RETRY = _("_Retry"); 25 | public const string DELETE_ALL = _("Delete _All"); 26 | public const string REPLACE = _("_Replace"); 27 | public const string REPLACE_ALL = _("Replace _All"); 28 | public const string MERGE = _("_Merge"); 29 | public const string MERGE_ALL = _("Merge _All"); 30 | public const string COPY_FORCE = _("Copy _Anyway"); 31 | public const string EMPTY_TRASH = _("Empty _Trash"); 32 | 33 | namespace PF.Dialogs { 34 | public Granite.MessageDialog show_error_dialog (string primary_text, 35 | string secondary_text, 36 | Gtk.Window? parent) { 37 | /* Use default button type "CLOSE" */ 38 | var dialog = new Granite.MessageDialog.with_image_from_icon_name (primary_text, secondary_text, "dialog-error"); 39 | return display_dialog (dialog, parent); 40 | } 41 | 42 | public Granite.MessageDialog show_warning_dialog (string primary_text, 43 | string secondary_text, 44 | Gtk.Window? parent) { 45 | /* Use default button type "CLOSE" */ 46 | var dialog = new Granite.MessageDialog.with_image_from_icon_name (primary_text, secondary_text, 47 | "dialog-warning"); 48 | return display_dialog (dialog, parent); 49 | } 50 | 51 | private Granite.MessageDialog display_dialog (Granite.MessageDialog dialog, Gtk.Window? parent) { 52 | if (parent != null && parent is Gtk.Window) { 53 | dialog.set_transient_for (parent); 54 | } 55 | 56 | dialog.response.connect_after (() => { 57 | dialog.destroy (); 58 | }); 59 | 60 | dialog.show (); 61 | return dialog; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /libcore/TrashMonitor.vala: -------------------------------------------------------------------------------- 1 | /* Copyright (c) 2018 elementary LLC (https://elementary.io) 2 | * 3 | * This program is free software; you can redistribute it and/or 4 | * modify it under the terms of the GNU General Public License as 5 | * published by the Free Software Foundation, Inc.,; either version 2 of 6 | * the License, or (at your option) any later version. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public 14 | * License along with this program; if not, write to the Free 15 | * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 | * Boston, MA 02110-1301, USA. 17 | */ 18 | 19 | public class Files.TrashMonitor : GLib.Object { 20 | public const string URI = "trash://"; 21 | 22 | private static Files.TrashMonitor marlin_trash_monitor; 23 | public static unowned Files.TrashMonitor get_default () { 24 | if (marlin_trash_monitor == null) { 25 | marlin_trash_monitor = new Files.TrashMonitor (); 26 | } 27 | 28 | return marlin_trash_monitor; 29 | } 30 | 31 | public bool is_empty { get; private set; default = true; } 32 | private GLib.Icon icon; 33 | private GLib.FileMonitor file_monitor; 34 | private GLib.File trash_file; 35 | 36 | construct { 37 | icon = new GLib.ThemedIcon ("user-trash"); 38 | trash_file = GLib.File.new_for_uri (TrashMonitor.URI); 39 | try { 40 | file_monitor = trash_file.monitor (GLib.FileMonitorFlags.NONE); 41 | file_monitor.changed.connect ((file, other_file, event_type) => { 42 | update_info.begin (); 43 | }); 44 | } catch (Error e) { 45 | critical (e.message); 46 | } 47 | 48 | update_info.begin (() => { /* Ensure a notify signal is emitted when first set accurately */ 49 | notify_property ("is-empty"); 50 | }); 51 | } 52 | 53 | public GLib.Icon get_icon () { 54 | return icon; 55 | } 56 | 57 | private async void update_info () { 58 | try { 59 | var attribs = GLib.FileAttribute.STANDARD_ICON + "," + GLib.FileAttribute.TRASH_ITEM_COUNT; 60 | var info = yield trash_file.query_info_async (attribs, GLib.FileQueryInfoFlags.NONE); 61 | var new_icon = info.get_attribute_object (GLib.FileAttribute.STANDARD_ICON) as GLib.Icon; 62 | if (new_icon != null) { 63 | icon = new_icon; 64 | } 65 | 66 | var toplevel_trash_count = info.get_attribute_uint32 (GLib.FileAttribute.TRASH_ITEM_COUNT); 67 | is_empty = toplevel_trash_count == 0; 68 | } catch (Error e) { 69 | critical (e.message); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /libcore/Widgets/ButtonWithMenu.vala: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: GPL-3.0 3 | * SPDX-FileCopyrightText: 2011-2013 Mathijs Henquet 4 | * 2023 elementary, Inc. (https://elementary.io) 5 | * 6 | * Authored by: Mathijs Henquet , 7 | * ammonkey 8 | */ 9 | 10 | /** 11 | * ButtonWithMenu 12 | * - support long click / right click with depressed button states 13 | * - activate a GtkAction if any or popup a menu 14 | * (used in history navigation buttons) 15 | */ 16 | public class Files.View.Chrome.ButtonWithMenu : Gtk.ToggleButton { 17 | public signal void slow_press (); 18 | 19 | private Gtk.Menu gtk_menu; 20 | 21 | public Menu menu { 22 | set { 23 | gtk_menu.bind_model (value, null, false); 24 | } 25 | } 26 | 27 | public ButtonWithMenu (string icon_name) { 28 | image = new Gtk.Image.from_icon_name (icon_name, Gtk.IconSize.LARGE_TOOLBAR); 29 | } 30 | 31 | construct { 32 | use_underline = true; 33 | 34 | gtk_menu = new Gtk.Menu (); 35 | gtk_menu.attach_to_widget (this, null); 36 | gtk_menu.deactivate.connect ( () => { 37 | active = false; 38 | }); 39 | 40 | mnemonic_activate.connect (on_mnemonic_activate); 41 | 42 | var press_gesture = new Gtk.GestureMultiPress (this) { 43 | button = Gdk.BUTTON_PRIMARY 44 | }; 45 | press_gesture.released.connect (() => { 46 | slow_press (); 47 | press_gesture.set_state (CLAIMED); 48 | }); 49 | 50 | var secondary_click_gesture = new Gtk.GestureMultiPress (this) { 51 | button = Gdk.BUTTON_SECONDARY 52 | }; 53 | secondary_click_gesture.pressed.connect (() => { 54 | popup_menu (); 55 | secondary_click_gesture.set_state (CLAIMED); 56 | }); 57 | 58 | var long_press_gesture = new Gtk.GestureLongPress (this); 59 | 60 | long_press_gesture.pressed.connect (() => { 61 | popup_menu (); 62 | long_press_gesture.set_state (CLAIMED); 63 | }); 64 | } 65 | 66 | private bool on_mnemonic_activate (bool group_cycling) { 67 | /* ToggleButton always grabs focus away from the editor, 68 | * so reimplement Widget's version, which only grabs the 69 | * focus if we are group cycling. 70 | */ 71 | if (!group_cycling) { 72 | activate (); 73 | } else if (can_focus) { 74 | grab_focus (); 75 | } 76 | 77 | return true; 78 | } 79 | 80 | protected new void popup_menu () { 81 | active = true; 82 | gtk_menu.popup_at_widget (this, SOUTH_WEST, NORTH_WEST, Gtk.get_current_event ()); 83 | gtk_menu.select_first (false); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /libcore/Widgets/ViewSwitcher.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | ViewSwicher.cs 3 | 4 | Authors: 5 | mathijshenquet 6 | ammonkey 7 | 8 | Copyright (c) 2010 mathijshenquet 9 | 10 | This program is free software: you can redistribute it and/or modify 11 | it under the terms of the GNU General Public License as published by 12 | the Free Software Foundation, either version 3 of the License, or 13 | (at your option) any later version. 14 | 15 | This program is distributed in the hope that it will be useful, 16 | but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 | GNU General Public License for more details. 19 | 20 | You should have received a copy of the GNU General Public License 21 | along with this program. If not, see . 22 | ***/ 23 | 24 | namespace Files.View.Chrome { 25 | public class ViewSwitcher : Gtk.Box { 26 | public GLib.SimpleAction action { get; construct; } 27 | 28 | public ViewSwitcher (GLib.SimpleAction view_mode_action) { 29 | Object (action: view_mode_action); 30 | } 31 | 32 | construct { 33 | get_style_context ().add_class (Gtk.STYLE_CLASS_LINKED); 34 | 35 | /* Grid View item */ 36 | var id = (uint32)ViewMode.ICON; 37 | var grid_view_btn = new Gtk.RadioButton (null) { 38 | image = new Gtk.Image.from_icon_name ("view-grid-symbolic", Gtk.IconSize.BUTTON), 39 | tooltip_markup = get_tooltip_for_id (id, _("View as Grid")) 40 | }; 41 | grid_view_btn.set_mode (false); 42 | grid_view_btn.toggled.connect (on_mode_changed); 43 | grid_view_btn.set_data ("id", id); 44 | 45 | /* List View */ 46 | id = (uint32)ViewMode.LIST; 47 | var list_view_btn = new Gtk.RadioButton.from_widget (grid_view_btn) { 48 | image = new Gtk.Image.from_icon_name ("view-list-symbolic", Gtk.IconSize.BUTTON), 49 | tooltip_markup = get_tooltip_for_id (id, _("View as List")) 50 | }; 51 | list_view_btn.set_mode (false); 52 | list_view_btn.toggled.connect (on_mode_changed); 53 | list_view_btn.set_data ("id", id); 54 | 55 | 56 | /* Item 2 */ 57 | id = (uint32)ViewMode.MILLER_COLUMNS; 58 | var column_view_btn = new Gtk.RadioButton.from_widget (grid_view_btn) { 59 | image = new Gtk.Image.from_icon_name ("view-column-symbolic", Gtk.IconSize.BUTTON), 60 | tooltip_markup = get_tooltip_for_id (id, _("View in Columns")) 61 | }; 62 | column_view_btn.set_mode (false); 63 | column_view_btn.toggled.connect (on_mode_changed); 64 | column_view_btn.set_data ("id", ViewMode.MILLER_COLUMNS); 65 | 66 | valign = Gtk.Align.CENTER; 67 | add (grid_view_btn); 68 | add (list_view_btn); 69 | add (column_view_btn); 70 | } 71 | 72 | private string get_tooltip_for_id (uint32 id, string description) { 73 | var app = (Gtk.Application)Application.get_default (); 74 | var detailed_name = Action.print_detailed_name ("win." + action.name, new Variant.uint32 (id)); 75 | var accels = app.get_accels_for_action (detailed_name); 76 | return Granite.markup_accel_tooltip (accels, description); 77 | } 78 | 79 | private void on_mode_changed (Gtk.ToggleButton source) { 80 | if (!source.active) { 81 | return; 82 | } 83 | 84 | action.activate (source.get_data ("id")); 85 | } 86 | 87 | public void set_mode (uint32 mode) { 88 | this.@foreach ((child) => { 89 | if (child.get_data ("id") == mode) { 90 | ((Gtk.RadioButton)child).active = true; 91 | action.activate (child.get_data ("id")); 92 | } 93 | }); 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /libcore/meson.build: -------------------------------------------------------------------------------- 1 | pantheon_files_core_name = 'pantheon-files-core' 2 | 3 | pantheon_files_core_deps = [ 4 | common_deps, 5 | posix_dep, 6 | linux_dep, 7 | math_dep, 8 | pango_dep, 9 | sqlite3_dep, 10 | libcanberra_dep, 11 | ] 12 | 13 | pantheon_files_core_vala_files = files( 14 | 'AbstractSlot.vala', 15 | 'Bookmark.vala', 16 | 'BookmarkList.vala', 17 | 'CallWhenReady.vala', 18 | 'ConnectServerOperation.vala', 19 | 'ConnectServerDialog.vala', 20 | 'Directory.vala', 21 | 'DndHandler.vala', 22 | 'Enums.vala', 23 | 'File.vala', 24 | 'FileChanges.vala', 25 | 'FileConflictDialog.vala', 26 | 'FileUtils.vala', 27 | 'IconInfo.vala', 28 | 'ListModel.vala', 29 | 'PixbufUtils.vala', 30 | 'Preferences.vala', 31 | 'PluginManager.vala', 32 | 'Plugin.vala', 33 | 'ProgressInfo.vala', 34 | 'ProgressInfoManager.vala', 35 | 'Resources.vala', 36 | 'SidebarPluginItem.vala', 37 | 'SoundManager.vala', 38 | 'StockDialogs.vala', 39 | 'Thumbnailer.vala', 40 | 'TrashMonitor.vala', 41 | 'UserUtils.vala', 42 | 'UndoManager.vala', 43 | 'FileOperations/CommonJob.vala', 44 | 'FileOperations/CopyMoveJob.vala', 45 | 'FileOperations/CreateJob.vala', 46 | 'FileOperations/DeleteJob.vala', 47 | 'FileOperations/EmptyTrashJob.vala', 48 | 'FileOperations/MountUtils.vala', 49 | 'Interfaces/SidebarInterface.vala', 50 | 'Interfaces/LocatableInterface.vala', 51 | 'Interfaces/NavigatableInterface.vala', 52 | 'Interfaces/SearchableInterface.vala', 53 | 'Interfaces/SidebarListInterface.vala', 54 | 'Interfaces/SidebarItemInterface.vala', 55 | 'Widgets/BasicBreadcrumbsEntry.vala', 56 | 'Widgets/BasicLocationBar.vala', 57 | 'Widgets/BreadcrumbElement.vala', 58 | 'Widgets/BreadcrumbIconList.vala', 59 | 'Widgets/ButtonWithMenu.vala', 60 | 'Widgets/ViewSwitcher.vala' 61 | ) 62 | 63 | pantheon_files_core_c_files = files( 64 | 'marlin-file-operations.c' 65 | ) 66 | 67 | pantheon_files_core_h_files = files( 68 | 'marlin-file-operations.h' 69 | ) 70 | 71 | pantheon_files_core_files = [ 72 | pantheon_files_core_vala_files, 73 | pantheon_files_core_c_files, 74 | pantheon_files_core_h_files, 75 | ] 76 | 77 | pantheon_file_core_c_dep = vala.find_library('pantheon-files-core-C', dirs: join_paths(meson.current_source_dir())) 78 | 79 | pantheon_files_core_library = shared_library( 80 | pantheon_files_core_name, 81 | pantheon_files_core_files, 82 | dependencies : [ pantheon_files_core_deps, pantheon_file_core_c_dep ], 83 | install: true, 84 | install_dir: [true, join_paths(get_option('prefix'), get_option('includedir'), pantheon_files_core_name), true], 85 | version: meson.project_version(), 86 | ) 87 | 88 | install_headers( 89 | pantheon_files_core_h_files, 90 | subdir: pantheon_files_core_name 91 | ) 92 | 93 | pantheon_files_core_dep = declare_dependency( 94 | link_with: pantheon_files_core_library, 95 | include_directories: include_directories('.'), 96 | dependencies : [ pantheon_files_core_deps, pantheon_file_core_c_dep ], 97 | ) 98 | 99 | pantheon_files_core_pkgconfig = pkg.generate( 100 | pantheon_files_core_library, 101 | subdirs: pantheon_files_core_name, 102 | filebase: pantheon_files_core_name, 103 | name: 'elementary Files Core Library', 104 | description: 'Core library used by io.elementary.files and by io.elementary.file-chooser', 105 | version: meson.project_version(), 106 | ) 107 | 108 | subdir('tests') 109 | -------------------------------------------------------------------------------- /libcore/pantheon-files-core-C.vapi: -------------------------------------------------------------------------------- 1 | using GLib; 2 | 3 | [CCode (cprefix = "", lower_case_cprefix = "", cheader_filename = "config.h")] 4 | namespace Config { 5 | public const string GETTEXT_PACKAGE; 6 | public const string UI_DIR; 7 | public const string VERSION; 8 | public const string PLUGIN_DIR; 9 | public const string TESTDATA_DIR; 10 | public const string LOCALE_DIR; 11 | public const string APP_NAME; 12 | } 13 | 14 | namespace Files { 15 | [CCode (lower_case_cprefix = "marlin_file_operations_", cname = "MarlinFileOperations")] 16 | namespace FileOperations { 17 | [CCode (cheader_filename = "marlin-file-operations.h")] 18 | static async GLib.File? new_folder (Gtk.Widget? parent_view, GLib.File file, GLib.Cancellable? cancellable = null) throws GLib.Error; 19 | [CCode (cheader_filename = "marlin-file-operations.h")] 20 | static async bool @delete (GLib.List locations, Gtk.Window window, bool try_trash, GLib.Cancellable? cancellable = null) throws GLib.Error; 21 | [CCode (cheader_filename = "marlin-file-operations.h")] 22 | static async bool copy_move_link (GLib.List files, GLib.File target_dir, Gdk.DragAction copy_action, Gtk.Widget? parent_view = null, GLib.Cancellable? cancellable = null) throws GLib.Error; 23 | [CCode (cheader_filename = "marlin-file-operations.h")] 24 | static async GLib.File? new_file (Gtk.Widget parent_view, string parent_dir, string? target_filename, string? initial_contents, int length, GLib.Cancellable? cancellable = null) throws GLib.Error; 25 | [CCode (cheader_filename = "marlin-file-operations.h")] 26 | static async GLib.File? new_file_from_template (Gtk.Widget parent_view, GLib.File parent_dir, string? target_filename, GLib.File template, GLib.Cancellable? cancellable = null) throws GLib.Error; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /libcore/pantheon-files-core.deps: -------------------------------------------------------------------------------- 1 | granite 2 | gtk+-3.0 3 | gio-2.0 4 | gee-0.8 5 | gmodule-2.0 6 | pantheon-files-core-C 7 | libcanberra 8 | posix 9 | linux 10 | -------------------------------------------------------------------------------- /libcore/tests/GOFDirectoryAsyncTests/meson.build: -------------------------------------------------------------------------------- 1 | directory_async_test_exec = executable ( 2 | 'GOFDirectoryAsyncTests', 3 | 'GOFDirectoryAsyncTests.vala', 4 | 5 | dependencies : pantheon_files_core_dep, 6 | install: false, 7 | ) 8 | 9 | test ('GOFDirectoryAsyncTests', directory_async_test_exec) 10 | -------------------------------------------------------------------------------- /libcore/tests/GOFFileTests/meson.build: -------------------------------------------------------------------------------- 1 | file_test_exec = executable ( 2 | 'GOFFileTests', 3 | 'GOFFileTests.vala', 4 | 5 | dependencies : pantheon_files_core_dep, 6 | install: false, 7 | ) 8 | 9 | test ('GOFFileTests', file_test_exec) 10 | -------------------------------------------------------------------------------- /libcore/tests/MarlinIconInfoTests/meson.build: -------------------------------------------------------------------------------- 1 | icon_info_test_exec = executable ( 2 | 'MarlinIconInfoTests', 3 | 'MarlinIconInfoTests.vala', 4 | 5 | dependencies : [ pantheon_files_core_dep, project_config_dep ], 6 | install: false, 7 | ) 8 | 9 | test ('MarlinIconInfoTests', icon_info_test_exec) 10 | -------------------------------------------------------------------------------- /libcore/tests/UtilTests/meson.build: -------------------------------------------------------------------------------- 1 | util_test_exec = executable ( 2 | 'UtilTests', 3 | 'UtilTests.vala', 4 | 5 | dependencies : pantheon_files_core_dep, 6 | install: false, 7 | ) 8 | 9 | test ('UtilTests', util_test_exec) 10 | -------------------------------------------------------------------------------- /libcore/tests/meson.build: -------------------------------------------------------------------------------- 1 | subdir ('UtilTests') 2 | subdir ('MarlinIconInfoTests') 3 | subdir ('GOFFileTests') 4 | subdir ('GOFDirectoryAsyncTests') 5 | -------------------------------------------------------------------------------- /meson.build: -------------------------------------------------------------------------------- 1 | project( 2 | 'io.elementary.files', 3 | 'vala', 'c', 4 | version: '7.1.1', 5 | meson_version: '>= 0.59.0' 6 | ) 7 | 8 | # 9 | # Meson module imports 10 | # 11 | pkg = import('pkgconfig') 12 | i18n = import('i18n') 13 | 14 | # 15 | # Define the global directories and variables 16 | # 17 | plugin_dir = join_paths(get_option('prefix'), get_option('libdir'), meson.project_name(), 'plugins') 18 | 19 | add_project_arguments( 20 | ['-DGETTEXT_PACKAGE="' + meson.project_name() + '"', 21 | '-DHANDY_USE_UNSTABLE_API', 22 | '-w'], 23 | language:'c' 24 | ) 25 | 26 | # 27 | # Define Vala minimal version 28 | # 29 | vala_version_required = '0.50.0' 30 | vala = meson.get_compiler('vala') 31 | cc = meson.get_compiler('c') 32 | 33 | if not vala.version().version_compare('>= @0@'.format(vala_version_required)) 34 | error('Valac >= @0@ required!'.format(vala_version_required)) 35 | endif 36 | 37 | # 38 | # Project dependencies 39 | # 40 | min_glib_version = '2.64.6' 41 | 42 | glib_dep = dependency('glib-2.0', version: '>='+min_glib_version) 43 | gobject_dep = dependency('gobject-2.0', version: '>='+min_glib_version) 44 | gio_dep = dependency('gio-2.0', version: '>='+min_glib_version) 45 | gio_unix_dep = dependency('gio-unix-2.0', version: '>='+min_glib_version) 46 | gmodule_dep = dependency('gmodule-2.0', version: '>='+min_glib_version) 47 | gee_dep = dependency('gee-0.8') 48 | gtk_dep = dependency('gtk+-3.0', version: '>=3.22.25') 49 | granite_dep = dependency('granite', version: '>=6.1.0') 50 | handy_dep = dependency('libhandy-1', version: '>=0.83.0') 51 | portal_dep = dependency('libportal') 52 | portal_gtk3_dep = dependency('libportal-gtk3') 53 | 54 | common_deps = [ 55 | glib_dep, 56 | gobject_dep, 57 | gio_dep, 58 | gio_unix_dep, 59 | gmodule_dep, 60 | gee_dep, 61 | gtk_dep, 62 | granite_dep 63 | ] 64 | 65 | pango_dep = dependency('pango', version: '>=1.1.2') 66 | sqlite3_dep = dependency('sqlite3') 67 | libcanberra_dep = dependency('libcanberra', version: '>=0.30') 68 | 69 | posix_dep = vala.find_library('posix') 70 | linux_dep = vala.find_library('linux') 71 | math_dep = cc.find_library('m') 72 | 73 | zeitgeist_dep = dependency('zeitgeist-2.0', required: get_option('with-zeitgeist')) 74 | if (zeitgeist_dep.found()) 75 | add_project_arguments('--define=HAVE_ZEITGEIST', language: 'vala') 76 | endif 77 | 78 | add_project_arguments( 79 | ['--vapidir', join_paths(meson.current_source_dir(), 'vapi')], 80 | language: 'vala' 81 | ) 82 | 83 | 84 | #Configuration file 85 | 86 | config_data = configuration_data() 87 | config_data.set('plugin_dir', plugin_dir) 88 | config_data.set('version', meson.project_version()) 89 | config_data.set('testdata_dir', join_paths(meson.project_source_root(), 'data', 'tests')) 90 | config_data.set('app_name', meson.project_name()) 91 | config_data.set('gettext_package', meson.project_name()) 92 | config_data.set('locale_dir', join_paths(get_option('prefix'), get_option('localedir'))) 93 | 94 | config_file = configure_file( 95 | input: 'config.h.in', 96 | output: 'config.h', 97 | configuration: config_data 98 | ) 99 | 100 | project_config_dep = declare_dependency( 101 | sources: config_file, 102 | include_directories: include_directories('.') 103 | ) 104 | 105 | gnome = import('gnome') 106 | resources = gnome.compile_resources( 107 | 'files-resources', 'data/files.gresource.xml', 108 | source_dir: 'data', 109 | c_name: 'files' 110 | ) 111 | 112 | subdir('libcore') 113 | subdir('src') 114 | subdir('data') 115 | subdir('pantheon-files-daemon') 116 | subdir('plugins') 117 | subdir('filechooser-portal') 118 | subdir('po') 119 | 120 | gnome.post_install( 121 | glib_compile_schemas: true, 122 | update_desktop_database: true 123 | ) 124 | -------------------------------------------------------------------------------- /meson_options.txt: -------------------------------------------------------------------------------- 1 | option('with-zeitgeist', type : 'feature', value : 'auto', description : 'Add Zeitgeist support') 2 | option('systemduserunitdir', type: 'string', value: '', description: 'custom directory for systemd user units, or \'no\' to disable') 3 | -------------------------------------------------------------------------------- /pantheon-files-daemon/FileManager1.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2017 - 2018 elementary LLC. 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | 16 | Authors: Jeremy Wootten 17 | ***/ 18 | 19 | [DBus (name = "org.freedesktop.FileManager1")] 20 | public class FileManager1 : Object { 21 | 22 | [DBus (name = "ShowFolders")] 23 | public void show_folders (string[] uris, string startup_id) throws DBusError, IOError { 24 | open_items_and_folders (uris, startup_id); 25 | } 26 | 27 | [DBus (name = "ShowItems")] 28 | public void show_items (string[] uris, string startup_id) throws DBusError, IOError { 29 | open_items_and_folders (uris, startup_id); 30 | } 31 | 32 | [DBus (name = "ShowItemProperties")] 33 | public void show_item_properties (string[] uris, string startup_id) throws DBusError, IOError { 34 | var msg = "ShowItemProperties method not currently supported by Files."; 35 | throw new DBusError.NOT_SUPPORTED (msg); 36 | } 37 | 38 | private void open_items_and_folders (string[] uris, string startup_id) throws DBusError, IOError { 39 | /* The io.elementary.files app will open folder uris as view, other items will cause the parent folder 40 | * to open and the item be selected. Each view will open in a separate tab in one window */ 41 | 42 | StringBuilder sb = new StringBuilder ("io.elementary.files -t"); 43 | foreach (string s in uris) { 44 | sb.append (" "); 45 | sb.append (FileManager1.prepare_uri_for_appinfo_create (s)); 46 | } 47 | 48 | try { 49 | var pf_app_info = AppInfo.create_from_commandline (sb.str, 50 | null, 51 | AppInfoCreateFlags.NONE); 52 | if (pf_app_info != null) { 53 | pf_app_info.launch (null, null); 54 | } 55 | } catch (Error e) { 56 | var msg = "Unable to open item or folder with command %s: %s".printf (sb.str, e.message); 57 | throw new IOError.FAILED (msg); 58 | } 59 | } 60 | 61 | static string reserved_chars = (GLib.Uri.RESERVED_CHARS_GENERIC_DELIMITERS + 62 | GLib.Uri.RESERVED_CHARS_SUBCOMPONENT_DELIMITERS) 63 | .replace ("#", "") 64 | .replace ("*", ""); 65 | 66 | private static string prepare_uri_for_appinfo_create (string uri, bool allow_utf8 = true) { 67 | string? escaped_uri = Uri.escape_string ((Uri.unescape_string (uri) ?? uri), reserved_chars, allow_utf8); 68 | return (escaped_uri ?? "").replace ("%", "%%"); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /pantheon-files-daemon/main.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (C) 2010 Jordi Puigdellívol 3 | Copyright (c) 2017 - 2018 elementary LLC. 4 | 5 | This program is free software: you can redistribute it and/or modify it 6 | under the terms of the GNU Lesser General Public License version 3, as published 7 | by the Free Software Foundation. 8 | 9 | This program is distributed in the hope that it will be useful, but 10 | WITHOUT ANY WARRANTY; without even the implied warranties of 11 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 12 | PURPOSE. See the GNU General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public License along 15 | with this program. If not, see . 16 | 17 | Authors: Jordi Puigdellívol 18 | ammonkey 19 | Jeremy Wootten 20 | ***/ 21 | 22 | void on_bus_aquired (DBusConnection conn, string n) { 23 | try { 24 | string name = "/io/elementary/files/db"; 25 | var object = new MarlinTags (); 26 | conn.register_object (name, object); 27 | debug ("MarlinTags object registered with dbus connection name %s", name); 28 | } catch (IOError e) { 29 | error ("Could not register MarlinTags service"); 30 | } 31 | } 32 | 33 | void on_fm1_bus_aquired (DBusConnection conn, string n) { 34 | try { 35 | string name = "/org/freedesktop/FileManager1"; 36 | var object = new FileManager1 (); 37 | conn.register_object (name, object); 38 | debug ("FileManager1 object registered with dbus connection name %s", name); 39 | } catch (IOError e) { 40 | error ("Could not register FileManager1 service"); 41 | } 42 | } 43 | 44 | // Exit C function to quit the loop 45 | extern void exit (int exit_code); 46 | 47 | void on_name_lost (DBusConnection connection, string name) { 48 | critical ("Name %s was not acquired", name); 49 | exit (-1); 50 | } 51 | 52 | void main () { 53 | Bus.own_name (BusType.SESSION, "io.elementary.files.db", BusNameOwnerFlags.NONE, 54 | on_bus_aquired, 55 | () => {}, 56 | on_name_lost); 57 | 58 | Bus.own_name (BusType.SESSION, "org.freedesktop.FileManager1", BusNameOwnerFlags.REPLACE, 59 | on_fm1_bus_aquired, 60 | () => {}, 61 | on_name_lost); 62 | 63 | new MainLoop ().run (); 64 | } 65 | -------------------------------------------------------------------------------- /pantheon-files-daemon/meson.build: -------------------------------------------------------------------------------- 1 | pantheon_files_daemon_files = files( 2 | 'main.vala', 3 | 'FileManager1.vala', 4 | 'marlind-tagging.vala' 5 | ) 6 | 7 | executable( 8 | meson.project_name() + '-daemon', 9 | pantheon_files_daemon_files, 10 | 11 | dependencies : [ 12 | pantheon_files_core_dep 13 | ], 14 | install: true, 15 | ) 16 | -------------------------------------------------------------------------------- /plugins/contractor/meson.build: -------------------------------------------------------------------------------- 1 | contractor_plugin_dir = join_paths(plugin_dir, 'core') 2 | 3 | shared_module( 4 | 'pantheon-files-contractor', 5 | 'plugin.vala', 6 | dependencies : pantheon_files_core_dep, 7 | install: true, 8 | install_dir: contractor_plugin_dir, 9 | ) 10 | 11 | install_data( 12 | 'pantheon-files-contractor.plug', 13 | install_dir: contractor_plugin_dir, 14 | ) 15 | -------------------------------------------------------------------------------- /plugins/contractor/pantheon-files-contractor.plug: -------------------------------------------------------------------------------- 1 | [Plugin] 2 | Name=Contractor 3 | File=libpantheon-files-contractor.so 4 | -------------------------------------------------------------------------------- /plugins/git/meson.build: -------------------------------------------------------------------------------- 1 | git_plugin_dir = join_paths(plugin_dir, 'core') 2 | 3 | ggit_dep = dependency('libgit2-glib-1.0') 4 | 5 | shared_module( 6 | 'pantheon-files-git', 7 | 'plugin.vala', 8 | dependencies : [pantheon_files_core_dep, ggit_dep], 9 | install: true, 10 | install_dir: git_plugin_dir, 11 | ) 12 | 13 | install_data( 14 | 'pantheon-files-git.plug', 15 | install_dir: git_plugin_dir 16 | ) 17 | -------------------------------------------------------------------------------- /plugins/git/pantheon-files-git.plug: -------------------------------------------------------------------------------- 1 | [Plugin] 2 | Name=Git 3 | File=libpantheon-files-git.so 4 | -------------------------------------------------------------------------------- /plugins/meson.build: -------------------------------------------------------------------------------- 1 | subdir('contractor') 2 | subdir('pantheon-files-trash') 3 | subdir('pantheon-files-ctags') 4 | subdir('pantheon-files-cloud') 5 | subdir('git') 6 | subdir('send-by-email') 7 | -------------------------------------------------------------------------------- /plugins/pantheon-files-cloud/meson.build: -------------------------------------------------------------------------------- 1 | cloudproviders_plugin_dir = join_paths(plugin_dir, 'core') 2 | 3 | cloudproviders_dep = dependency('cloudproviders', version: '>=0.3.0') 4 | 5 | shared_module( 6 | 'pantheon-files-cloudproviders', 7 | 'plugin.vala', 8 | dependencies: [ pantheon_files_core_dep, cloudproviders_dep], 9 | install: true, 10 | install_dir: cloudproviders_plugin_dir 11 | ) 12 | 13 | install_data( 14 | 'pantheon-files-cloudproviders.plug', 15 | install_dir: cloudproviders_plugin_dir 16 | ) 17 | -------------------------------------------------------------------------------- /plugins/pantheon-files-cloud/pantheon-files-cloudproviders.plug: -------------------------------------------------------------------------------- 1 | [Plugin] 2 | Name=Cloud 3 | File=libpantheon-files-cloudproviders.so 4 | -------------------------------------------------------------------------------- /plugins/pantheon-files-ctags/meson.build: -------------------------------------------------------------------------------- 1 | ctags_plugin_dir = join_paths(plugin_dir, 'core') 2 | 3 | shared_module( 4 | 'pantheon-files-ctags', 5 | 'plugin.vala', 6 | dependencies : pantheon_files_core_dep, 7 | install: true, 8 | install_dir: ctags_plugin_dir, 9 | ) 10 | 11 | install_data( 12 | 'pantheon-files-ctags.plug', 13 | install_dir: ctags_plugin_dir 14 | ) 15 | -------------------------------------------------------------------------------- /plugins/pantheon-files-ctags/pantheon-files-ctags.plug: -------------------------------------------------------------------------------- 1 | [Plugin] 2 | Name=Ctags 3 | File=libpantheon-files-ctags.so 4 | -------------------------------------------------------------------------------- /plugins/pantheon-files-trash/meson.build: -------------------------------------------------------------------------------- 1 | trash_plugin_dir = join_paths(plugin_dir, 'core') 2 | 3 | shared_module( 4 | 'pantheon-files-trash', 5 | 'plugin.vala', 6 | dependencies : pantheon_files_core_dep, 7 | install: true, 8 | install_dir: trash_plugin_dir, 9 | ) 10 | 11 | install_data( 12 | 'pantheon-files-trash.plug', 13 | install_dir: trash_plugin_dir 14 | ) 15 | -------------------------------------------------------------------------------- /plugins/pantheon-files-trash/pantheon-files-trash.plug: -------------------------------------------------------------------------------- 1 | [Plugin] 2 | Name=Empty the trash! 3 | File=libpantheon-files-trash.so 4 | -------------------------------------------------------------------------------- /plugins/send-by-email/Portal.vala: -------------------------------------------------------------------------------- 1 | /*- 2 | * Copyright (c) 2021 elementary, Inc. (https://elementary.io) 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | namespace Portal { 19 | const string DBUS_DESKTOP_PATH = "/org/freedesktop/portal/desktop"; 20 | const string DBUS_DESKTOP_NAME = "org.freedesktop.portal.Desktop"; 21 | Email? email = null; 22 | 23 | public static string generate_token () { 24 | return "%s_%i".printf ( 25 | GLib.Application.get_default ().application_id.replace (".", "_"), 26 | Random.int_range (0, int32.MAX) 27 | ); 28 | } 29 | 30 | [DBus (name = "org.freedesktop.portal.Email")] 31 | interface Email : DBusProxy { 32 | [DBus (name = "version")] 33 | public abstract uint version { get; } 34 | 35 | public static Email @get () throws IOError, DBusError { 36 | if (email == null) { 37 | var connection = GLib.Application.get_default ().get_dbus_connection (); 38 | email = connection.get_proxy_sync (DBUS_DESKTOP_NAME, DBUS_DESKTOP_PATH); 39 | } 40 | 41 | return email; 42 | } 43 | 44 | [DBus (visible = false)] 45 | public ObjectPath compose_email (string window_handle, HashTable options, UnixFDList? attachments) throws Error { 46 | var options_builder = new VariantBuilder (VariantType.VARDICT); 47 | options.foreach ((key, val) => { 48 | options_builder.add ("{sv}", key, val); 49 | }); 50 | 51 | var response = call_with_unix_fd_list_sync ( 52 | "ComposeEmail", 53 | new Variant ("(sa{sv})", window_handle, options_builder), 54 | DBusCallFlags.NONE, 55 | -1, 56 | attachments 57 | ); 58 | 59 | return (ObjectPath) response.get_child_value (0).get_string (); 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /plugins/send-by-email/meson.build: -------------------------------------------------------------------------------- 1 | send_by_email_plugin_dir = join_paths(plugin_dir, 'core') 2 | 3 | gdk_dep = [ dependency('gdk-x11-3.0'), dependency('gdk-wayland-3.0') ] 4 | 5 | shared_module( 6 | 'pantheon-files-send-by-email', 7 | 'plugin.vala', 8 | 'Portal.vala', 9 | dependencies: [pantheon_files_core_dep, gdk_dep], 10 | install: true, 11 | install_dir: send_by_email_plugin_dir 12 | ) 13 | 14 | install_data( 15 | 'pantheon-files-send-by-email.plug', 16 | install_dir: send_by_email_plugin_dir 17 | ) 18 | -------------------------------------------------------------------------------- /plugins/send-by-email/pantheon-files-send-by-email.plug: -------------------------------------------------------------------------------- 1 | [Plugin] 2 | Name=Send by Email 3 | File=libpantheon-files-send-by-email.so 4 | -------------------------------------------------------------------------------- /po/LINGUAS: -------------------------------------------------------------------------------- 1 | # 2 | # please keep this list sorted alphabetically 3 | ae 4 | af 5 | ak 6 | am 7 | ar 8 | as 9 | ast 10 | av 11 | ay 12 | az 13 | ba 14 | be 15 | bg 16 | bh 17 | bi 18 | bm 19 | bn 20 | bo 21 | br 22 | bs 23 | ca 24 | ce 25 | ch 26 | ckb 27 | co 28 | cr 29 | cs 30 | cu 31 | cv 32 | cy 33 | da 34 | de 35 | dv 36 | dz 37 | ee 38 | el 39 | en_AU 40 | en_CA 41 | en_GB 42 | eo 43 | es 44 | et 45 | eu 46 | fa 47 | ff 48 | fi 49 | fj 50 | fo 51 | fr 52 | fr_CA 53 | fy 54 | ga 55 | gd 56 | gl 57 | gu 58 | gv 59 | ha 60 | he 61 | hi 62 | ho 63 | hr 64 | ht 65 | hu 66 | hy 67 | hz 68 | ia 69 | id 70 | ie 71 | ig 72 | ii 73 | ik 74 | io 75 | is 76 | it 77 | iu 78 | ja 79 | jv 80 | ka 81 | kg 82 | ki 83 | kj 84 | kk 85 | kl 86 | km 87 | kn 88 | ko 89 | kr 90 | ks 91 | ku 92 | kv 93 | kw 94 | ky 95 | la 96 | lb 97 | lg 98 | li 99 | ln 100 | lo 101 | lt 102 | lu 103 | lv 104 | mg 105 | mh 106 | mi 107 | mk 108 | ml 109 | mn 110 | mo 111 | mr 112 | ms 113 | mt 114 | my 115 | na 116 | nb 117 | nd 118 | ne 119 | ng 120 | nl 121 | nn 122 | no 123 | nr 124 | nv 125 | ny 126 | oc 127 | oj 128 | om 129 | or 130 | os 131 | pa 132 | pi 133 | pl 134 | ps 135 | pt 136 | pt_BR 137 | qu 138 | rm 139 | rn 140 | ro 141 | ru 142 | rue 143 | rw 144 | sa 145 | sc 146 | sd 147 | se 148 | sg 149 | si 150 | sk 151 | sl 152 | sm 153 | sma 154 | sn 155 | so 156 | sq 157 | sr 158 | ss 159 | st 160 | su 161 | sv 162 | sw 163 | szl 164 | ta 165 | te 166 | tg 167 | th 168 | ti 169 | tk 170 | tl 171 | tn 172 | to 173 | tr 174 | ts 175 | tt 176 | tw 177 | ty 178 | ug 179 | uk 180 | ur 181 | uz 182 | ve 183 | vi 184 | vo 185 | wa 186 | wo 187 | xh 188 | yi 189 | yo 190 | za 191 | zh 192 | zh_CN 193 | zh_HK 194 | zh_TW 195 | zu 196 | sr@latin 197 | aa 198 | ab 199 | gn 200 | jbo 201 | an 202 | -------------------------------------------------------------------------------- /po/POTFILES: -------------------------------------------------------------------------------- 1 | filechooser-portal/FileChooserDialog.vala 2 | filechooser-portal/Main.vala 3 | 4 | libcore/AbstractSlot.vala 5 | libcore/BookmarkList.vala 6 | libcore/Bookmark.vala 7 | libcore/CallWhenReady.vala 8 | libcore/ConnectServerDialog.vala 9 | libcore/ConnectServerOperation.vala 10 | libcore/Directory.vala 11 | libcore/DndHandler.vala 12 | libcore/Enums.vala 13 | libcore/File.vala 14 | libcore/FileChanges.vala 15 | libcore/FileConflictDialog.vala 16 | libcore/FileUtils.vala 17 | libcore/IconInfo.vala 18 | libcore/ListModel.vala 19 | libcore/marlin-file-operations.c 20 | libcore/PixbufUtils.vala 21 | libcore/PluginManager.vala 22 | libcore/Plugin.vala 23 | libcore/Preferences.vala 24 | libcore/ProgressInfoManager.vala 25 | libcore/ProgressInfo.vala 26 | libcore/Resources.vala 27 | libcore/SidebarPluginItem.vala 28 | libcore/SoundManager.vala 29 | libcore/StockDialogs.vala 30 | libcore/Thumbnailer.vala 31 | libcore/TrashMonitor.vala 32 | libcore/UndoManager.vala 33 | libcore/UserUtils.vala 34 | 35 | libcore/FileOperations/CommonJob.vala 36 | libcore/FileOperations/EmptyTrashJob.vala 37 | libcore/FileOperations/MountUtils.vala 38 | libcore/FileOperations/CopyMoveJob.vala 39 | libcore/FileOperations/CreateJob.vala 40 | libcore/FileOperations/DeleteJob.vala 41 | 42 | libcore/Widgets/BasicBreadcrumbsEntry.vala 43 | libcore/Widgets/BasicLocationBar.vala 44 | libcore/Widgets/BreadcrumbElement.vala 45 | libcore/Widgets/BreadcrumbIconList.vala 46 | libcore/Widgets/ButtonWithMenu.vala 47 | libcore/Widgets/ViewSwitcher.vala 48 | 49 | plugins/pantheon-files-trash/plugin.vala 50 | plugins/send-by-email/plugin.vala 51 | 52 | src/Application.vala 53 | src/DeepCount.vala 54 | src/DesktopLauncher.vala 55 | src/main.vala 56 | src/ProgressUIHandler.vala 57 | src/TextRenderer.vala 58 | src/ClipboardManager.vala 59 | src/IconRenderer.vala 60 | src/ZeitgeistManager.vala 61 | 62 | src/Dialogs/AbstractPropertiesDialog.vala 63 | src/Dialogs/BulkRenamer/RenamerDialog.vala 64 | src/Dialogs/BulkRenamer/RenamerListRow.vala 65 | src/Dialogs/BulkRenamer/RenamerModifier.vala 66 | src/Dialogs/ChooseAppDialog.vala 67 | src/Dialogs/PropertiesWindow.vala 68 | src/Dialogs/VolumePropertiesWindow.vala 69 | 70 | src/Utils/MimeActions.vala 71 | src/Utils/Permissions.vala 72 | 73 | src/View/AbstractDirectoryView.vala 74 | src/View/AbstractTreeView.vala 75 | src/View/Browser.vala 76 | src/View/ColumnView.vala 77 | src/View/DirectoryNotFound.vala 78 | src/View/IconView.vala 79 | src/View/ListView.vala 80 | src/View/Miller.vala 81 | src/View/PrivacyModeOn.vala 82 | src/View/Slot.vala 83 | src/View/ViewContainer.vala 84 | src/View/Window.vala 85 | 86 | src/View/Sidebar/AbstractMountableRow.vala 87 | src/View/Sidebar/BookmarkListBox.vala 88 | src/View/Sidebar/BookmarkRow.vala 89 | src/View/Sidebar/DeviceListBox.vala 90 | src/View/Sidebar/DriveRow.vala 91 | src/View/Sidebar/NetworkListBox.vala 92 | src/View/Sidebar/NetworkRow.vala 93 | src/View/Sidebar/SidebarWindow.vala 94 | src/View/Sidebar/VolumeRow.vala 95 | src/View/Sidebar/VolumelessMountRow.vala 96 | 97 | src/View/Widgets/AbstractEditableLabel.vala 98 | src/View/Widgets/AppMenu.vala 99 | src/View/Widgets/BreadcrumbsEntry.vala 100 | src/View/Widgets/LocationBar.vala 101 | src/View/Widgets/MultiLineEditableLabel.vala 102 | src/View/Widgets/OverlayBar.vala 103 | src/View/Widgets/PermissionButton.vala 104 | src/View/Widgets/ProgressInfoWidget.vala 105 | src/View/Widgets/SearchResults.vala 106 | src/View/Widgets/SingleLineEditableLabel.vala 107 | src/View/Widgets/Welcome.vala 108 | 109 | -------------------------------------------------------------------------------- /po/extra/LINGUAS: -------------------------------------------------------------------------------- 1 | # 2 | # please keep this list sorted alphabetically 3 | ae 4 | af 5 | ak 6 | am 7 | ar 8 | as 9 | ast 10 | av 11 | ay 12 | az 13 | ba 14 | be 15 | bg 16 | bh 17 | bi 18 | bm 19 | bn 20 | bo 21 | br 22 | bs 23 | ca 24 | ce 25 | ch 26 | ckb 27 | co 28 | cr 29 | cs 30 | cu 31 | cv 32 | cy 33 | da 34 | de 35 | dv 36 | dz 37 | ee 38 | el 39 | en_AU 40 | en_CA 41 | en_GB 42 | eo 43 | es 44 | et 45 | eu 46 | fa 47 | ff 48 | fi 49 | fj 50 | fo 51 | fr 52 | fr_CA 53 | fy 54 | ga 55 | gd 56 | gl 57 | gu 58 | gv 59 | ha 60 | he 61 | hi 62 | ho 63 | hr 64 | ht 65 | hu 66 | hy 67 | hz 68 | ia 69 | id 70 | ie 71 | ig 72 | ii 73 | ik 74 | io 75 | is 76 | it 77 | iu 78 | ja 79 | jv 80 | ka 81 | kg 82 | ki 83 | kj 84 | kk 85 | kl 86 | km 87 | kn 88 | ko 89 | kr 90 | ks 91 | ku 92 | kv 93 | kw 94 | ky 95 | la 96 | lb 97 | lg 98 | li 99 | ln 100 | lo 101 | lt 102 | lu 103 | lv 104 | mg 105 | mh 106 | mi 107 | mk 108 | ml 109 | mn 110 | mo 111 | mr 112 | ms 113 | mt 114 | my 115 | na 116 | nb 117 | nd 118 | ne 119 | ng 120 | nl 121 | nn 122 | no 123 | nr 124 | nv 125 | ny 126 | oc 127 | oj 128 | om 129 | or 130 | os 131 | pa 132 | pi 133 | pl 134 | ps 135 | pt 136 | pt_BR 137 | qu 138 | rm 139 | rn 140 | ro 141 | ru 142 | rue 143 | rw 144 | sa 145 | sc 146 | sd 147 | se 148 | sg 149 | si 150 | sk 151 | sl 152 | sm 153 | sma 154 | sn 155 | so 156 | sq 157 | sr 158 | ss 159 | st 160 | su 161 | sv 162 | sw 163 | szl 164 | ta 165 | te 166 | tg 167 | th 168 | ti 169 | tk 170 | tl 171 | tn 172 | to 173 | tr 174 | ts 175 | tt 176 | tw 177 | ty 178 | ug 179 | uk 180 | ur 181 | uz 182 | ve 183 | vi 184 | vo 185 | wa 186 | wo 187 | xh 188 | yi 189 | yo 190 | za 191 | zh 192 | zh_CN 193 | zh_HK 194 | zh_TW 195 | zu 196 | sr@latin 197 | aa 198 | ab 199 | gn 200 | jbo 201 | an 202 | -------------------------------------------------------------------------------- /po/extra/POTFILES: -------------------------------------------------------------------------------- 1 | data/io.elementary.files.desktop.in.in 2 | data/files.metainfo.xml.in.in 3 | data/io.elementary.files.policy.in.in 4 | -------------------------------------------------------------------------------- /po/extra/aa.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/ab.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/ae.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/af.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/am.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/an.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/as.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/ast.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/av.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/ay.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/az.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/ba.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/bh.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/bi.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/bm.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/bn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/bo.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Report-Msgid-Bugs-To: \n" 4 | "POT-Creation-Date: 2025-06-06 14:04+0000\n" 5 | "MIME-Version: 1.0\n" 6 | "Content-Type: text/plain; charset=UTF-8\n" 7 | 8 | #: data/io.elementary.files.desktop.in.in:6 data/files.metainfo.xml.in.in:10 9 | msgid "Files" 10 | msgstr "" 11 | 12 | #: data/io.elementary.files.desktop.in.in:7 13 | msgid "Browse your files" 14 | msgstr "" 15 | 16 | #: data/io.elementary.files.desktop.in.in:9 17 | msgid "folder;manager;explore;disk;filesystem;" 18 | msgstr "" 19 | 20 | #: data/io.elementary.files.desktop.in.in:25 21 | msgid "New Window" 22 | msgstr "" 23 | 24 | #: data/io.elementary.files.desktop.in.in:29 25 | msgid "New Window As Administrator" 26 | msgstr "" 27 | 28 | #: data/files.metainfo.xml.in.in:11 29 | msgid "Browse and manage files and folders" 30 | msgstr "" 31 | 32 | #: data/files.metainfo.xml.in.in:13 33 | msgid "" 34 | "Easily copy, move, and rename your files, or use folders to stay organized. " 35 | "Whether you like files in lists, grids or columns, you can always find them " 36 | "right away. Access all your files, whether locally, on an external device or " 37 | "remotely using FTP, SFTP, AFP, Webdav, or Windows share." 38 | msgstr "" 39 | 40 | #: data/files.metainfo.xml.in.in:18 41 | msgid "Quick access to settings like zoom levels and hidden files" 42 | msgstr "" 43 | 44 | #: data/files.metainfo.xml.in.in:22 45 | msgid "See more metadata at a glance in List view" 46 | msgstr "" 47 | 48 | #: data/files.metainfo.xml.in.in:26 49 | msgid "Browse complex trees faster with Column view" 50 | msgstr "" 51 | 52 | #: data/files.metainfo.xml.in.in:67 data/files.metainfo.xml.in.in:82 53 | #: data/files.metainfo.xml.in.in:98 data/files.metainfo.xml.in.in:120 54 | #: data/files.metainfo.xml.in.in:138 data/files.metainfo.xml.in.in:161 55 | #: data/files.metainfo.xml.in.in:173 data/files.metainfo.xml.in.in:193 56 | msgid "Minor updates:" 57 | msgstr "" 58 | 59 | #: data/files.metainfo.xml.in.in:69 60 | msgid "Further preparation for porting to Gtk4" 61 | msgstr "" 62 | 63 | #: data/files.metainfo.xml.in.in:70 data/files.metainfo.xml.in.in:84 64 | #: data/files.metainfo.xml.in.in:102 data/files.metainfo.xml.in.in:124 65 | #: data/files.metainfo.xml.in.in:146 data/files.metainfo.xml.in.in:163 66 | #: data/files.metainfo.xml.in.in:175 data/files.metainfo.xml.in.in:195 67 | msgid "Updated translations" 68 | msgstr "" 69 | 70 | #: data/files.metainfo.xml.in.in:100 71 | msgid "Redesign file permissions view" 72 | msgstr "" 73 | 74 | #: data/files.metainfo.xml.in.in:101 75 | msgid "Focus sidebar by pressing Ctrl + Left" 76 | msgstr "" 77 | 78 | #: data/files.metainfo.xml.in.in:122 79 | msgid "Restoring tabs from last time is now optional" 80 | msgstr "" 81 | 82 | #: data/files.metainfo.xml.in.in:123 83 | msgid "Drag and select can no longer be done with secondary pointer button" 84 | msgstr "" 85 | 86 | #: data/files.metainfo.xml.in.in:140 87 | msgid "Discontinue support for dragging bookmark out of sidebar" 88 | msgstr "" 89 | 90 | #: data/files.metainfo.xml.in.in:141 91 | msgid "Fix unexpected scrolling after renaming a folder" 92 | msgstr "" 93 | 94 | #: data/files.metainfo.xml.in.in:142 95 | msgid "" 96 | "Fixes a crash when switching to viewing as grid under rare circumstances" 97 | msgstr "" 98 | 99 | #: data/files.metainfo.xml.in.in:143 100 | msgid "Ensure the selection persists after refreshing the view" 101 | msgstr "" 102 | 103 | #: data/files.metainfo.xml.in.in:144 104 | msgid "Fix Files failing to open if trying to restore a disconnected location" 105 | msgstr "" 106 | 107 | #: data/files.metainfo.xml.in.in:145 108 | msgid "Fix the view continuing to show when a location is unmounted" 109 | msgstr "" 110 | 111 | #: data/files.metainfo.xml.in.in:189 112 | msgid "Improvements:" 113 | msgstr "" 114 | 115 | #: data/files.metainfo.xml.in.in:191 116 | msgid "" 117 | "New Tab Bar with improved animations, smoother drag-and-drop, and " 118 | "reorganized tab context menus" 119 | msgstr "" 120 | 121 | #: data/io.elementary.files.policy.in.in:10 122 | msgid "Run Pantheon Files as Administrator" 123 | msgstr "" 124 | 125 | #: data/io.elementary.files.policy.in.in:11 126 | msgid "Authentication is required to run Files as Administrator" 127 | msgstr "" 128 | -------------------------------------------------------------------------------- /po/extra/meson.build: -------------------------------------------------------------------------------- 1 | i18n.gettext('extra', 2 | args: ['--directory='+meson.project_source_root(), '--from-code=UTF-8', '-cTRANSLATORS'], 3 | install: false, 4 | ) 5 | -------------------------------------------------------------------------------- /po/its/polkit.its: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /po/its/polkit.loc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /po/meson.build: -------------------------------------------------------------------------------- 1 | i18n.gettext(meson.project_name (), 2 | args: ['--directory='+meson.project_source_root(), '--from-code=UTF-8', '-cTRANSLATORS'] 3 | ) 4 | 5 | subdir ('extra') 6 | -------------------------------------------------------------------------------- /src/DesktopLauncher.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2015-2018 elementary LLC 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | ***/ 16 | namespace DesktopLauncher { 17 | /* Translatable launcher (.desktop) strings to be added to */ 18 | /* template (.pot) file. These strings MUST reflect any */ 19 | /* changes in these launcher keys in .desktop file. */ 20 | 21 | public const string COMMENT = N_("Browse your files"); 22 | public const string GENERIC_NAME = N_("File Manager"); 23 | public const string NEW_WINDOW = N_("New _Window"); 24 | public const string NEW_ROOT_WINDOW = N_("New Window As _Administrator"); 25 | public const string NAME = N_("Files"); 26 | } 27 | -------------------------------------------------------------------------------- /src/Dialogs/BulkRenamer/RenamerListRow.vala: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: GPL-3.0 3 | * SPDX-FileCopyrightText: 2019-2023 elementary, Inc. (https://elementary.io) 4 | * 5 | * Authored by: Vartan Belavejian 6 | * Jeremy Wootten 7 | */ 8 | 9 | public class Files.RenamerListRow : Gtk.ListBoxRow { 10 | public string old_name { get; construct; } 11 | public Files.File file { get; construct; } 12 | 13 | public string new_name { get; set; } 14 | public string extension { get; set; default = ""; } 15 | public RenameStatus status { get; set; default = RenameStatus.VALID; } 16 | 17 | private static Gtk.SizeGroup size_group; 18 | 19 | public RenamerListRow (Files.File file) { 20 | Object ( 21 | file: file, 22 | old_name: file.basename 23 | ); 24 | } 25 | 26 | static construct { 27 | size_group = new Gtk.SizeGroup (HORIZONTAL); 28 | } 29 | 30 | construct { 31 | var oldname_label = new Gtk.Label (old_name) { 32 | wrap = true, 33 | xalign = 0 34 | }; 35 | 36 | var newname_label = new Gtk.Label (new_name) { 37 | wrap = true, 38 | xalign = 0 39 | }; 40 | 41 | size_group.add_widget (newname_label); 42 | size_group.add_widget (oldname_label); 43 | 44 | var arrow_image = new Gtk.Image.from_icon_name ("go-next-symbolic", Gtk.IconSize.MENU) { 45 | hexpand = true 46 | }; 47 | 48 | var status_image = new Gtk.Image (); 49 | 50 | var box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6) { 51 | margin_top = 6, 52 | margin_end = 6, 53 | margin_bottom = 6, 54 | margin_start = 6 55 | }; 56 | box.add (oldname_label); 57 | box.add (arrow_image); 58 | box.add (newname_label); 59 | box.add (status_image); 60 | 61 | child = box; 62 | show_all (); 63 | 64 | bind_property ("new-name", newname_label, "label"); 65 | 66 | notify["status"].connect (() => { 67 | switch (status) { 68 | case RenameStatus.IGNORED: 69 | status_image.icon_name = "radio-mixed-symbolic"; 70 | status_image.tooltip_markup = _("Ignored") + "\n" + Granite.TOOLTIP_SECONDARY_TEXT_MARKUP.printf (_("Name is not changed")); 71 | break; 72 | case RenameStatus.INVALID: 73 | status_image.icon_name = "process-error-symbolic"; 74 | status_image.tooltip_markup = _("Cannot rename") + "\n" + Granite.TOOLTIP_SECONDARY_TEXT_MARKUP.printf (_("Name is invalid or already exists")); 75 | break; 76 | case RenameStatus.VALID: 77 | status_image.icon_name = "process-completed-symbolic"; 78 | status_image.tooltip_text = _("Will be renamed"); 79 | break; 80 | default: 81 | break; 82 | } 83 | }); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/Dialogs/ChooseAppDialog.vala: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015-2018 elementary LLC. 3 | * 4 | * This program is free software; you can redistribute it and/or 5 | * modify it under the terms of the GNU Lesser General Public 6 | * License as published by the Free Software Foundation; either 7 | * version 3 of the License, or (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | * General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public 15 | * License along with this program; if not, write to the 16 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 | * Boston, MA 02110-1335 USA. 18 | * 19 | * Authored by: Jeremy Wootten 20 | */ 21 | 22 | class PF.ChooseAppDialog : Object { 23 | Gtk.AppChooserDialog dialog; 24 | Gtk.CheckButton check_default; 25 | 26 | public GLib.File file_to_open { get; construct; } 27 | public Gtk.Window parent { get; construct; } 28 | 29 | public ChooseAppDialog (Gtk.Window? parent, GLib.File file_to_open) { 30 | Object (parent: parent, file_to_open: file_to_open); 31 | } 32 | 33 | construct { 34 | dialog = new Gtk.AppChooserDialog ( 35 | parent, 36 | Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT, 37 | file_to_open 38 | ) { 39 | deletable = false 40 | }; 41 | 42 | var app_chooser = dialog.get_widget () as Gtk.AppChooserWidget; 43 | app_chooser.show_recommended = true; 44 | 45 | check_default = new Gtk.CheckButton.with_label (_("Set as default")) { 46 | active = true, 47 | margin_start = 12, 48 | margin_bottom = 6 49 | }; 50 | 51 | check_default.show (); 52 | 53 | dialog.get_content_area ().add (check_default); 54 | } 55 | 56 | public AppInfo? get_app_info () { 57 | AppInfo? app = null; 58 | dialog.response.connect ((res) => { 59 | if (res == Gtk.ResponseType.OK) { 60 | app = dialog.get_app_info (); 61 | if (check_default.get_active ()) { 62 | try { 63 | var info = file_to_open.query_info (FileAttribute.STANDARD_CONTENT_TYPE, 64 | FileQueryInfoFlags.NONE, null); 65 | 66 | app.set_as_default_for_type (info.get_attribute_string (GLib.FileAttribute.STANDARD_CONTENT_TYPE)); 67 | } 68 | catch (GLib.Error error) { 69 | critical ("Could not set as default: %s", error.message); 70 | } 71 | } 72 | } 73 | 74 | dialog.destroy (); 75 | }); 76 | 77 | // Need to continue to use run () in Gtk3 in order to get modal dialog - we need to return 78 | // the chosen app from this function. 79 | dialog.run (); 80 | return app; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/Dialogs/VolumePropertiesWindow.vala: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2011 Marlin Developers (http://launchpad.net/marlin) 3 | * Copyright (c) 2015-2018 elementary LLC 4 | * 5 | * This program is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU General Public 7 | * License as published by the Free Software Foundation; either 8 | * version 3 of the License, or (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public 16 | * License along with this program; if not, write to the 17 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 | * Boston, MA 02110-1335 USA. 19 | * 20 | * Authored by: ammonkey 21 | */ 22 | 23 | public class Files.View.VolumePropertiesWindow : AbstractPropertiesDialog { 24 | public VolumePropertiesWindow (GLib.Mount? mount, Gtk.Window parent) { 25 | base (_("Disk Properties"), parent); 26 | 27 | GLib.File mount_root; 28 | string mount_name; 29 | GLib.Icon mount_icon; 30 | 31 | /* We might reach this point with mount being null, this happens when 32 | * the user wants to see the properties for the 'File System' entry in 33 | * the sidebar. GVfs is kind enough to not have a Mount entry for the 34 | * root filesystem, so we try our best to gather enough data. */ 35 | if (mount != null) { 36 | mount_root = mount.get_root (); 37 | mount_name = mount.get_name (); 38 | mount_icon = mount.get_icon (); 39 | } else { 40 | mount_root = GLib.File.new_for_uri ("file:///"); 41 | mount_name = _("File System"); 42 | mount_icon = new ThemedIcon.with_default_fallbacks (Files.ICON_FILESYSTEM); 43 | } 44 | 45 | GLib.FileInfo info = null; 46 | 47 | try { 48 | info = mount_root.query_filesystem_info ("filesystem::*"); 49 | } catch (Error e) { 50 | warning ("error: %s", e.message); 51 | } 52 | 53 | /* Build the header box */ 54 | var file_icon = new Gtk.Image.from_gicon (mount_icon, Gtk.IconSize.DIALOG) { 55 | pixel_size = 48 56 | }; 57 | 58 | if (file_icon != null) { 59 | var emblems_list = new GLib.List (); 60 | 61 | /* Overlay the 'readonly' emblem to tell the user the disk is 62 | * mounted as RO */ 63 | if (info != null && 64 | info.has_attribute (FileAttribute.FILESYSTEM_READONLY) && 65 | info.get_attribute_boolean (FileAttribute.FILESYSTEM_READONLY)) { 66 | emblems_list.append ("emblem-readonly"); 67 | } 68 | 69 | overlay_emblems (file_icon, emblems_list); 70 | } 71 | 72 | header_title = new Gtk.Label (mount_name); 73 | 74 | create_header_title (); 75 | 76 | var location_label = make_key_label (_("Location:")); 77 | var location_value = make_value_label ("" + Markup.escape_text (mount_root.get_parse_name ()) + ""); 79 | 80 | info_grid.attach (location_label, 0, 1, 1, 1); 81 | info_grid.attach_next_to (location_value, location_label, Gtk.PositionType.RIGHT); 82 | 83 | uint64 used_space = 0; 84 | 85 | if (info != null && info.has_attribute (FileAttribute.FILESYSTEM_TYPE)) { 86 | var key_label = make_key_label (_("Format:")); 87 | var value_label = make_value_label (info.get_attribute_string (GLib.FileAttribute.FILESYSTEM_TYPE)); 88 | 89 | info_grid.attach (key_label, 0, 2, 1, 1); 90 | info_grid.attach_next_to (value_label, key_label, Gtk.PositionType.RIGHT); 91 | 92 | used_space = info.get_attribute_uint64 (GLib.FileAttribute.FILESYSTEM_USED); 93 | } 94 | 95 | create_storage_bar (info, 3); 96 | show_all (); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/Utils/AppUtils.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2020 elementary Inc 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation, Inc.,. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | 16 | Authors : Jeremy Wootten 17 | ***/ 18 | 19 | namespace Files { 20 | static Gtk.Window get_active_window () { 21 | unowned Gtk.Application gtk_app = (Gtk.Application)(GLib.Application.get_default ()); 22 | return gtk_app.get_active_window (); 23 | } 24 | 25 | static bool is_admin () { 26 | return Posix.getuid () == 0; 27 | } 28 | 29 | public static Gtk.Label make_key_label (string label) { 30 | return new Gtk.Label (label) { 31 | halign = Gtk.Align.END, 32 | margin_start = 12 33 | }; 34 | } 35 | 36 | public static Gtk.Label make_value_label (string label) { 37 | return new Gtk.Label (label) { 38 | halign = Gtk.Align.START, 39 | selectable = true, 40 | use_markup = true 41 | }; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/Utils/Permissions.vala: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016-2018 elementary LLC. 3 | * 4 | * This program is free software; you can redistribute it and/or 5 | * modify it under the terms of the GNU General Public 6 | * License as published by the Free Software Foundation; either 7 | * version 2 of the License, or (at your option) any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | * General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public 15 | * License along with this program; if not, write to the 16 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 | * Boston, MA 02110-1335 USA. 18 | */ 19 | 20 | namespace Permissions { 21 | public enum Type { 22 | USER, 23 | GROUP, 24 | OTHER; 25 | 26 | public string to_string () { 27 | switch (this) { 28 | case USER: 29 | return _("Owner"); 30 | case GROUP: 31 | return _("Group"); 32 | default: 33 | case OTHER: 34 | return _("Everyone"); 35 | } 36 | } 37 | } 38 | 39 | public enum Value { 40 | READ, 41 | WRITE, 42 | EXE 43 | } 44 | 45 | public static bool is_chmod_code (string str) { 46 | try { 47 | var regex = new Regex ("^[0-7]{3}$"); 48 | if (regex.match (str)) { 49 | return true; 50 | } 51 | } catch (RegexError e) { 52 | assert_not_reached (); 53 | } 54 | 55 | return false; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/View/DirectoryNotFound.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2011 Lucas Baudin 3 | 4 | Marlin is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU General Public License as 6 | published by the Free Software Foundation; either version 2 of the 7 | License, or (at your option) any later version. 8 | 9 | Marlin is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public 15 | License along with this program; see the file COPYING. If not, 16 | write to the Free Software Foundation, Inc.,51 Franklin Street, 17 | Fifth Floor, Boston, MA 02110-1335 USA. 18 | 19 | ***/ 20 | 21 | namespace Files.View { 22 | public class DirectoryNotFound : Files.View.Welcome { 23 | public Directory dir_saved; 24 | public ViewContainer ctab; 25 | 26 | public DirectoryNotFound (Directory dir, ViewContainer tab) { 27 | base (_("This Folder Does Not Exist"), 28 | _("The folder \"%s\" can't be found.").printf (dir.location.get_basename ())); 29 | 30 | append ("folder-new", _("Create"), _("Create the folder \"%s\"").printf (dir.location.get_basename ())); 31 | 32 | dir_saved = dir; 33 | ctab = tab; 34 | 35 | this.activated.connect ((index) => { 36 | bool success = false; 37 | 38 | try { 39 | success = dir.location.make_directory_with_parents (null); 40 | } catch (Error e) { 41 | if (e is IOError.EXISTS) { 42 | success = true; 43 | } else { 44 | var dialog = new Granite.MessageDialog ( 45 | _("Failed to create the folder"), 46 | e.message, 47 | new ThemedIcon ("dialog-error"), 48 | Gtk.ButtonsType.CLOSE 49 | ); 50 | 51 | dialog.response.connect (dialog.destroy); 52 | dialog.present (); 53 | } 54 | } 55 | 56 | if (success) { 57 | get_action_group ("win").activate_action ("refresh", null); 58 | } 59 | }); 60 | 61 | show_all (); 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/View/PrivacyModeOn.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2011 Lucas Baudin 3 | 4 | Marlin is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU General Public License as 6 | published by the Free Software Foundation; either version 2 of the 7 | License, or (at your option) any later version. 8 | 9 | Marlin is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public 15 | License along with this program; see the file COPYING. If not, 16 | write to the Free Software Foundation, Inc.,51 Franklin Street, 17 | Fifth Floor, Boston, MA 02110-1335 USA. 18 | 19 | ***/ 20 | 21 | namespace Files.View { 22 | public class PrivacyModeOn : Files.View.Welcome { 23 | public Directory dir_saved; 24 | public ViewContainer ctab; 25 | public bool remember_history {get; set;} 26 | 27 | public PrivacyModeOn (ViewContainer tab) { 28 | base (_("Privacy mode is on"), _("No recent files are remembered")); 29 | 30 | append ("preferences-system-privacy", _("Change security settings"), 31 | _("Open the system security and privacy settings app")); 32 | 33 | this.activated.connect ((index) => { 34 | switch (index) { 35 | case 0: 36 | var ctx = get_window ().get_display ().get_app_launch_context (); 37 | try { 38 | AppInfo.launch_default_for_uri ("settings://security", ctx); 39 | } catch (Error e) { 40 | critical ("No default security app found"); 41 | } 42 | break; 43 | } 44 | }); 45 | 46 | show_all (); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/View/Sidebar/NetworkRow.vala: -------------------------------------------------------------------------------- 1 | /* NetworkRow.vala 2 | * 3 | * Copyright 2020-21 elementary LLC. 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 18 | * MA 02110-1301, USA. 19 | * 20 | * Authors : Jeremy Wootten 21 | */ 22 | 23 | public class Sidebar.NetworkRow : Sidebar.VolumelessMountRow { 24 | public NetworkRow (string name, string uri, Icon gicon, SidebarListInterface list, 25 | bool pinned, bool permanent, 26 | string? _uuid, Mount? _mount) { 27 | Object ( 28 | custom_name: name, 29 | uri: uri, 30 | gicon: gicon, 31 | list: list, 32 | pinned: pinned, 33 | permanent: permanent, 34 | uuid: _uuid, 35 | mount: _mount 36 | ); 37 | 38 | if (mount != null) { 39 | string scheme, hostname; 40 | try { 41 | var connectable = NetworkAddress.parse_uri (uri, 0); 42 | scheme = connectable.scheme; 43 | hostname = connectable.hostname; 44 | } catch (Error e) { 45 | scheme = Uri.parse_scheme (uri) ?? ""; 46 | hostname = ""; 47 | } 48 | 49 | if (scheme != "") { 50 | custom_name = _("%s (%s)").printf (custom_name, scheme); 51 | } 52 | 53 | sort_key = hostname + scheme + name; 54 | } else { 55 | sort_key = ""; // Used for "Network" entry which is always first. 56 | } 57 | } 58 | 59 | protected override async bool get_filesystem_space (Cancellable? update_cancellable) { 60 | File root; 61 | if (mount != null) { 62 | root = mount.get_root (); 63 | } else { 64 | return false; // No realistic filespace for "network:///" 65 | } 66 | 67 | return yield get_filesystem_space_for_root (root, update_cancellable); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/View/Sidebar/VolumelessMountRow.vala: -------------------------------------------------------------------------------- 1 | /* DeviceRow.vala 2 | * 3 | * Copyright 2021 elementary LLC. 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 18 | * MA 02110-1301, USA. 19 | * 20 | * Authors : Jeremy Wootten 21 | */ 22 | 23 | // Represents a mount not associated with a volume or drive - usually a bind mount 24 | // Also used for builtin row "FileSystem" which has null mount 25 | /*FIXME Identify and deal with any other conditions resulting in a volumeless mount */ 26 | public class Sidebar.VolumelessMountRow : Sidebar.AbstractMountableRow, SidebarItemInterface { 27 | public VolumelessMountRow (string name, string uri, Icon gicon, SidebarListInterface list, 28 | bool pinned, bool permanent, 29 | string? _uuid, Mount? _mount) { 30 | Object ( 31 | custom_name: name, 32 | uri: uri, 33 | gicon: gicon, 34 | list: list, 35 | pinned: pinned, 36 | permanent: permanent, 37 | uuid: _uuid, 38 | mount: _mount 39 | ); 40 | 41 | if (mount != null) { 42 | custom_name = _("%s (%s)").printf (custom_name, _("Bind mount")); 43 | var mount_sort_key = mount.get_sort_key (); 44 | if (mount_sort_key != null) { 45 | sort_key = mount_sort_key + custom_name; 46 | } else { 47 | sort_key = MountableType.VOLUMELESS_MOUNT.to_string () + custom_name; 48 | } 49 | } else { 50 | sort_key = ""; // Used for "FileSystem" entry which is always first. 51 | } 52 | } 53 | 54 | protected override void activated (Files.OpenFlag flag = Files.OpenFlag.DEFAULT) { 55 | // By definition this row represents a mounted mount (or local filesystem) 56 | if (!working) { 57 | list.open_item (this, flag); 58 | return; 59 | } 60 | } 61 | 62 | protected override void on_mount_removed (Mount removed_mount) { 63 | if (!valid) { //Already removed 64 | return; 65 | } 66 | 67 | if (mount == removed_mount) { 68 | valid = false; 69 | list.remove_item_by_id (id); 70 | } 71 | } 72 | 73 | protected override void show_mount_info () { 74 | if ((mount != null) || uri == Files.ROOT_FS_URI) { 75 | new Files.View.VolumePropertiesWindow ( 76 | mount, 77 | Files.get_active_window () 78 | ); 79 | } 80 | } 81 | 82 | protected override void add_extra_menu_items (GLib.Menu menu) { 83 | add_extra_menu_items_for_mount (mount, menu); 84 | } 85 | 86 | protected override async bool get_filesystem_space (Cancellable? update_cancellable) { 87 | File root; 88 | if (mount != null) { 89 | root = mount.get_root (); 90 | } else { 91 | root = File.new_for_uri ("file:///"); //Is this always "file:///" if no mount? 92 | } 93 | 94 | return yield get_filesystem_space_for_root (root, update_cancellable); 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/View/Widgets/AbstractEditableLabel.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2015-2018 elementary LLC 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | 16 | Authors : Jeremy Wootten 17 | ***/ 18 | 19 | namespace Files { 20 | public abstract class AbstractEditableLabel : Gtk.Frame, Gtk.Editable, Gtk.CellEditable { 21 | public bool editing_canceled { get; set; } 22 | public string original_name; 23 | private Gtk.EventControllerKey key_controller; 24 | 25 | protected void connect_editable_widget (Gtk.Widget editable_widget) { 26 | key_controller = new Gtk.EventControllerKey (editable_widget); 27 | key_controller.key_pressed.connect (on_key_press_event); 28 | editable_widget.button_press_event.connect_after (() => { return true; }); 29 | } 30 | 31 | protected virtual bool on_key_press_event (uint keyval, uint keycode, Gdk.ModifierType state) { 32 | var mods = state & Gtk.accelerator_get_default_mod_mask (); 33 | bool only_control_pressed = (mods == Gdk.ModifierType.CONTROL_MASK); 34 | switch (keyval) { 35 | case Gdk.Key.Return: 36 | case Gdk.Key.KP_Enter: 37 | /* Only end rename with unmodified Enter. This is to allow use of Ctrl-Enter 38 | * to commit Chinese/Japanese characters when using some input methods, without ending rename. 39 | */ 40 | if (mods == 0) { 41 | end_editing (false); 42 | return true; 43 | } 44 | 45 | break; 46 | 47 | case Gdk.Key.Escape: 48 | end_editing (true); 49 | return true; 50 | 51 | case Gdk.Key.z: 52 | /* Undo with Ctrl-Z only */ 53 | if (only_control_pressed) { 54 | set_text (original_name); 55 | return true; 56 | } 57 | break; 58 | 59 | default: 60 | break; 61 | } 62 | 63 | return false; 64 | } 65 | 66 | public void end_editing (bool cancelled) { 67 | editing_canceled = cancelled; 68 | remove_widget (); 69 | editing_done (); 70 | } 71 | 72 | public virtual void set_text (string text) { 73 | original_name = text; 74 | } 75 | 76 | public virtual void set_line_wrap (bool wrap) {} 77 | public virtual void set_line_wrap_mode (Pango.WrapMode mode) {} 78 | public virtual void set_justify (Gtk.Justification jtype) {} 79 | public virtual void set_padding (int xpad, int ypad) {} 80 | 81 | public abstract new void set_size_request (int width, int height); 82 | public abstract string get_text (); 83 | public abstract void select_region (int start_pos, int end_pos); 84 | public abstract void do_delete_text (int start_pos, int end_pos); 85 | public abstract void do_insert_text (string new_text, int new_text_length, ref int position); 86 | public abstract string get_chars (int start_pos, int end_pos); 87 | public abstract int get_position (); 88 | public abstract bool get_selection_bounds (out int start_pos, out int end_pos); 89 | public abstract void set_position (int position); 90 | 91 | /** CellEditable interface */ 92 | public virtual void start_editing (Gdk.Event? event) {} 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/View/Widgets/ProgressInfoWidget.vala: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2013-2020 elementary, Inc. 3 | * 2007, 2011 Red Hat, Inc. 4 | * 5 | * This program is free software; you can redistribute it and/or 6 | * modify it under the terms of the GNU Lesser General Public 7 | * License as published by the Free Software Foundation. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | * General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public 15 | * License along with this program; if not, write to the 16 | * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 | * Boston, MA 02110-1335 USA. 18 | * 19 | * Authors: Alexander Larsson 20 | * Cosimo Cecchi 21 | * Julián Unrrein 22 | */ 23 | 24 | public class Files.Progress.InfoWidget : Gtk.Grid { 25 | public unowned PF.Progress.Info info { get; construct; } 26 | 27 | private Gtk.Label status; 28 | private Gtk.Label details; 29 | private Gtk.ProgressBar progress_bar; 30 | 31 | public signal void cancelled (PF.Progress.Info info); 32 | 33 | public InfoWidget (PF.Progress.Info info) { 34 | Object (info: info); 35 | } 36 | 37 | construct { 38 | status = new Gtk.Label (info.status) { 39 | use_markup = true, 40 | max_width_chars = 50, 41 | selectable = true, 42 | width_chars = 50, 43 | wrap = true, 44 | xalign = 0 45 | }; 46 | 47 | progress_bar = new Gtk.ProgressBar () { 48 | hexpand = true, 49 | pulse_step = 0.05, 50 | show_text = false, 51 | valign = Gtk.Align.CENTER 52 | }; 53 | 54 | details = new Gtk.Label ("details") { 55 | use_markup = true, 56 | selectable = true, 57 | max_width_chars = 50, 58 | wrap = true, 59 | xalign = 0 60 | }; 61 | 62 | var button = new Gtk.Button.from_icon_name ("process-stop-symbolic", Gtk.IconSize.BUTTON) { 63 | tooltip_text = _("Cancel") 64 | }; 65 | 66 | button.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); 67 | 68 | column_spacing = 6; 69 | attach (status, 0, 0, 2); 70 | attach (progress_bar, 0, 1); 71 | attach (button, 1, 1); 72 | attach (details, 0, 2, 2); 73 | 74 | show_all (); 75 | 76 | update_data (); 77 | update_progress (); 78 | 79 | info.changed.connect (update_data); 80 | info.progress_changed.connect (update_progress); 81 | 82 | info.finished.connect (() => { 83 | destroy (); 84 | }); 85 | 86 | button.clicked.connect (() => { 87 | info.cancel (); 88 | cancelled (info); 89 | button.sensitive = false; 90 | }); 91 | } 92 | 93 | private void update_data () { 94 | status.set_markup ( 95 | Markup.printf_escaped ("%s", info.status) 96 | ); 97 | details.set_markup ( 98 | Markup.printf_escaped ("%s", info.details) 99 | ); 100 | } 101 | 102 | private void update_progress () { 103 | double progress = info.progress; 104 | 105 | if (progress < 0) { 106 | progress_bar.pulse (); 107 | } else { 108 | progress_bar.set_fraction (progress); 109 | } 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /src/View/Widgets/Welcome.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2015-2018 elementary LLC 3 | 4 | Marlin is free software; you can redistribute it and/or 5 | modify it under the terms of the GNU General Public License as 6 | published by the Free Software Foundation; either version 2 of the 7 | License, or (at your option) any later version. 8 | 9 | Marlin is distributed in the hope that it will be useful, 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 | General Public License for more details. 13 | 14 | You should have received a copy of the GNU General Public 15 | License along with this program; see the file COPYING. If not, 16 | write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor 17 | Boston, MA 02110-1335 USA. 18 | 19 | Author(s): Jeremy Wootten 20 | 21 | ***/ 22 | 23 | namespace Files.View { 24 | public class Welcome : Granite.Widgets.Welcome { 25 | 26 | public Welcome (string primary, string secondary) { 27 | base (primary, secondary); 28 | this.button_press_event.connect (on_button_press_event); 29 | show_all (); 30 | } 31 | 32 | public bool on_button_press_event (Gdk.EventButton event) { 33 | /* Pass Back and Forward button events to toplevel window */ 34 | uint button; 35 | event.get_button (out button); 36 | switch (button) { 37 | case 6: 38 | case 7: 39 | case 8: 40 | case 9: 41 | return get_toplevel ().button_press_event (event); 42 | default: 43 | return base.button_press_event (event); 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/ZeitgeistManager.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2015-2018 elementary LLC 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | 16 | Authors : 17 | ***/ 18 | namespace Files { 19 | public class ZeitgeistManager : Object { 20 | 21 | const string FILES_ACTOR = "application://" + APP_DESKTOP; 22 | const string ATTRS = FileAttribute.STANDARD_DISPLAY_NAME + "," + FileAttribute.STANDARD_CONTENT_TYPE; 23 | 24 | public static void report_event (string uri, string interpretation) { 25 | #if HAVE_ZEITGEIST 26 | var file = GLib.File.new_for_commandline_arg (uri); 27 | 28 | file.query_info_async.begin (ATTRS, 0, Priority.DEFAULT, null, (obj, res) => { 29 | FileInfo info; 30 | try { 31 | info = file.query_info_async.end (res); 32 | } catch (Error e) { 33 | debug ("Fetching file info folder loggin to zeitgeist failed: %s", e.message); 34 | return; 35 | } 36 | var log = Zeitgeist.Log.get_default (); 37 | 38 | var subject = new Zeitgeist.Subject (); 39 | subject.current_uri = subject.uri = uri; 40 | subject.text = info.get_display_name (); 41 | subject.mimetype = info.get_attribute_string (GLib.FileAttribute.STANDARD_CONTENT_TYPE); 42 | subject.origin = Path.get_dirname (uri); 43 | subject.manifestation = Zeitgeist.NFO.FILE_DATA_OBJECT; 44 | subject.interpretation = Zeitgeist.NFO.FOLDER; 45 | 46 | var event = new Zeitgeist.Event (); 47 | event.interpretation = interpretation; 48 | event.manifestation = Zeitgeist.ZG.USER_ACTIVITY; 49 | event.actor = FILES_ACTOR; 50 | event.timestamp = new DateTime.now_local ().to_unix () * 1000; 51 | event.add_subject (subject); 52 | 53 | try { 54 | log.insert_event_no_reply (event); 55 | } catch (Error e) { 56 | warning (e.message); 57 | } 58 | }); 59 | #endif 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/main.vala: -------------------------------------------------------------------------------- 1 | /*** 2 | Copyright (c) 2013 Julián Unrrein 3 | 4 | This program is free software: you can redistribute it and/or modify it 5 | under the terms of the GNU Lesser General Public License version 3, as published 6 | by the Free Software Foundation. 7 | 8 | This program is distributed in the hope that it will be useful, but 9 | WITHOUT ANY WARRANTY; without even the implied warranties of 10 | MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 11 | PURPOSE. See the GNU General Public License for more details. 12 | 13 | You should have received a copy of the GNU General Public License along 14 | with this program. If not, see . 15 | ***/ 16 | public static int main (string[] args) { 17 | /* Initiliaze gettext support */ 18 | Intl.setlocale (LocaleCategory.ALL, ""); 19 | Intl.textdomain (Config.GETTEXT_PACKAGE); 20 | Intl.bindtextdomain (Config.GETTEXT_PACKAGE, Config.LOCALE_DIR); 21 | Intl.bind_textdomain_codeset (Config.GETTEXT_PACKAGE, "UTF-8"); 22 | 23 | Environment.set_application_name (Config.APP_NAME); 24 | Environment.set_prgname (Config.APP_NAME); 25 | 26 | var application = new Files.Application (); 27 | 28 | return application.run (args); 29 | } 30 | -------------------------------------------------------------------------------- /src/meson.build: -------------------------------------------------------------------------------- 1 | pantheon_files_deps = [ 2 | common_deps, 3 | handy_dep, 4 | pantheon_files_core_dep, 5 | zeitgeist_dep, 6 | project_config_dep, 7 | portal_dep, 8 | portal_gtk3_dep 9 | ] 10 | 11 | pantheon_files_exec = executable ( 12 | meson.project_name (), 13 | resources, 14 | 15 | 'Application.vala', 16 | 'ClipboardManager.vala', 17 | 'DeepCount.vala', 18 | 'EmblemRenderer.vala', 19 | 'IconRenderer.vala', 20 | 'main.vala', 21 | 'ProgressUIHandler.vala', 22 | 'TextRenderer.vala', 23 | 'ZeitgeistManager.vala', 24 | 25 | 'Dialogs/AbstractPropertiesDialog.vala', 26 | 'Dialogs/ChooseAppDialog.vala', 27 | 'Dialogs/PropertiesWindow.vala', 28 | 'Dialogs/VolumePropertiesWindow.vala', 29 | 30 | 'Dialogs/BulkRenamer/Renamer.vala', 31 | 'Dialogs/BulkRenamer/RenamerModifier.vala', 32 | 'Dialogs/BulkRenamer/RenamerDialog.vala', 33 | 'Dialogs/BulkRenamer/RenamerListRow.vala', 34 | 35 | 'Utils/MimeActions.vala', 36 | 'Utils/Permissions.vala', 37 | 'Utils/AppUtils.vala', 38 | 39 | 'View/AbstractDirectoryView.vala', 40 | 'View/AbstractTreeView.vala', 41 | 'View/Browser.vala', 42 | 'View/ColumnView.vala', 43 | 'View/DirectoryNotFound.vala', 44 | 'View/IconView.vala', 45 | 'View/ListView.vala', 46 | 'View/Miller.vala', 47 | 'View/PrivacyModeOn.vala', 48 | 'View/Slot.vala', 49 | 'View/ViewContainer.vala', 50 | 'View/Window.vala', 51 | 52 | 'View/Widgets/AbstractEditableLabel.vala', 53 | 'View/Widgets/AppMenu.vala', 54 | 'View/Widgets/BreadcrumbsEntry.vala', 55 | 'View/Widgets/LocationBar.vala', 56 | 'View/Widgets/MultiLineEditableLabel.vala', 57 | 'View/Widgets/OverlayBar.vala', 58 | 'View/Widgets/PermissionButton.vala', 59 | 'View/Widgets/ProgressInfoWidget.vala', 60 | 'View/Widgets/SingleLineEditableLabel.vala', 61 | 'View/Widgets/SearchResults.vala', 62 | 'View/Widgets/Welcome.vala', 63 | 64 | 'View/Sidebar/AbstractMountableRow.vala', 65 | 'View/Sidebar/BookmarkListBox.vala', 66 | 'View/Sidebar/BookmarkRow.vala', 67 | 'View/Sidebar/DeviceListBox.vala', 68 | 'View/Sidebar/DriveRow.vala', 69 | 'View/Sidebar/NetworkListBox.vala', 70 | 'View/Sidebar/NetworkRow.vala', 71 | 'View/Sidebar/SidebarWindow.vala', 72 | 'View/Sidebar/VolumeRow.vala', 73 | 'View/Sidebar/VolumelessMountRow.vala', 74 | 75 | dependencies : [ 76 | pantheon_files_deps, 77 | ], 78 | install: true, 79 | ) 80 | -------------------------------------------------------------------------------- /vapi/gdk-wayland-3.0.vapi: -------------------------------------------------------------------------------- 1 | [CCode (cheader_filename = "gdk/gdkwayland.h")] 2 | namespace Gdk.Wayland { 3 | [CCode (type_id = "GDK_TYPE_WAYLAND_WINDOW", type_check_function = "GDK_IS_WAYLAND_WINDOW")] 4 | public class Window : Gdk.Window { 5 | protected Window (); 6 | 7 | public bool export_handle (owned WindowExported callback); 8 | public bool set_transient_for_exported (string parent_handle_str); 9 | public void unexport_handle (); 10 | } 11 | 12 | [CCode (instance_pos = 2.9)] 13 | public delegate void WindowExported (Gdk.Window window, string handle); 14 | } 15 | --------------------------------------------------------------------------------