Commit Graph

3446 Commits

Author SHA1 Message Date
Luca Bacci c602170faa modern-gtk2: Delay construction of Gtk::TreeModel* objects (!17)
C++ initialises static member variables before main() is called.
Therefore the static members of:
    struct Slots
    {
        static Gtk::TreeModelColumn<Glib::ustring> text;
        static Gtk::TreeModelColumn<bool> sensitive;
    private:
        static Gtk::TreeModel::ColumnRecord record_;
    };
are constructed before Gtk::Main() is called in main().  However the
Gtkmm documentation specifically says that they must be constructed
afterwards [1].

Resolve this by using the Construct On First Use Idiom [2] to delay
initialisation until the slots are first used.  Normally this idiom uses
static local objects, however it is being applied to class static
objects here because the objects are accessed in many methods.  The
downside of this approach is that the objects are never destructed,
which memory analysers like Valgrind could see as a memory leak, but
that is actually deliberate.  That leak can be removed once we can use
C++11 and std::unique_ptr.

[1] gtkmm: Gtk::TreeModelColumnRecord Class Reference
    https://developer.gnome.org/gtkmm/2.24/classGtk_1_1TreeModelColumnRecord.html#details

    "Neither TreeModel::ColumnRecord nor the TreeModelColumns contain
    any real data - they merely describe what C++ type is stored in
    which column of a TreeModel, and save you from having to repeat that
    type information in several places.

    Thus TreeModel::ColumnRecord can be made a singleton (as long as you
    make sure it's instantiated after Gtk::Main), even when creating
    multiple models from it.
    "

[2] C++ FAQ / How do I prevent the "static initialization order
    problem"?
    https://isocpp.org/wiki/faq/ctors#static-init-order-on-first-use

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 6bfa95d427 modern-gtk2: Rename callback after OptionComboBox class switch (!17)
Final part in a series of commits to replace Gtk::OptionMenu widgets
with GParted::OptionComboBox.

This specific commit renames the signal handler callback to match the
previously renamed combobox widget variable names.

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 48d2fd2120 modern-gtk2: Use OptionComboBox class for file system combobox (!17)
Third part in a series of commits to replace Gtk::OptionMenu widgets
with GParted::OptionComboBox.

This specific commit is about file system combobox.

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci cf5e9c863f modern-gtk2: Use OptionComboBox class for partition type combobox (!17)
Second part in a series of commits to replace Gtk::OptionMenu widgets
with GParted::OptionComboBox.

This specific commit is about partition type combobox.

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 83b98885f6 modern-gtk2: Use OptionComboBox class for alignment combobox (!17)
First part in a series of commits to replace Gtk::OptionMenu widgets
with GParted::OptionComboBox.

This specific commit is about partition alignment combobox.

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 5407e8346b modern-gtk2: Introduce OptionComboBox class (!17)
Gtk::OptionMenu is a combobox type widget that is constructed from a
Gtk::Menu rather than a Gtk::TreeModel.  However Gtk::OptionMenu was
deprecated in gtkmm 2.4.1.

In GParted the Gtk::OptionMenu widget is used for:
- partition alignment combobox
- partition type combobox
- file system combobox

While they consist only of text we cannot use Gtk::ComboBoxText because
it doesn't expose functionality in its interface to make items inactive.

Create OptionComboBox helper class that builds a combobox consisting of
only text items, much like Gtk::ComboBoxText, but has the added
functionality to set items as inactive.

References:
https://developer.gnome.org/gtkmm/2.24/classGtk_1_1OptionMenu.html#details
https://gitlab.gnome.org/GNOME/gtkmm/blob/GTKMM_2_10_1/ChangeLog#L3515
bba503b047
https://developer.gnome.org/gtkmm/2.24/classGtk_1_1ComboBoxText.html

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 430ac9240c modern-gtk2: Use Gtk::Widget::set_tooltip_text() (!17)
GParted was using Gtk::Tooltips widgets for tooltips, but they were
deprecated in gtkmm 2.12 in favour of Gtk::Tooltip widgets.  (Note the
spelling difference, with and without a trailing 's').

As GParted's tooltips are all text only continue to use the shortcut,
which is now Gtk::Widget::set_tooltip_text().

References:
https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Tooltips.html#details
https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Tooltip.html#details
https://gitlab.gnome.org/GNOME/gtkmm/blob/2.20.0/NEWS#L740

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 6a80ca8f7d modern-gtk2: Use Gtk::MenuItem::unset_submenu() (!17)
Gtk::MenuItem::remove_submenu() was deprecated in gtkmm 2.12.  Replace
with Gtk::MenuItem::unset_submenu() introduced in gtkmm 2.22.

References:
https://developer.gnome.org/gtkmm/2.24/classGtk_1_1MenuItem.html
https://gitlab.gnome.org/GNOME/gtkmm/blob/2.22.0/NEWS#L24

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 511d597188 modern-gtk2: Use Gtk::AboutDialog::set_program_name() (!17)
Gtk::AboutDialog::set_name() was deprecated in gtkmm 2.12.  Replace with
Gtk::AboutDialog::set_program_name().

References:
https://developer.gnome.org/gtkmm/2.24/classGtk_1_1AboutDialog.html
https://gitlab.gnome.org/GNOME/gtkmm/blob/2.20.0/NEWS#L741

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 3d6ee55606 modern-gtk2: Use Gtk::AlignmentEnum::ALIGN_START (!17)
Gtkmm 2.22 deprecated Gtk::AlignmentEnum::ALIGN_{LEFT,RIGHT,TOP,BOTTOM}
replacing with Gtk::AlignmentEnum::ALIGN_{START,END}.

References:
https://developer.gnome.org/gtkmm/2.24/group__gtkmmEnums.html#ga98983d4e80f67ffa5148dd554706ffac
https://gitlab.gnome.org/GNOME/gtkmm/blob/2.22.0/NEWS#L14

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 197c88ad73 modern-gtk2: Use Gtk::TreeView::Column::get_first_cell() (!17)
Gtk::TreeView::Column::get_first_cell_renderer() was deprecated in
gtkmm 2.24.  Replace with Gtk::TreeView::Column::get_first_cell().

References:
https://developer.gnome.org/gtkmm/2.24/classGtk_1_1TreeViewColumn.html
https://gitlab.gnome.org/GNOME/gtkmm/blob/2.24.0/NEWS#L64

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 3f18318304 modern-gtk2: Use Gtk::ComboBoxText::append() (!17)
Gtk::ComboBoxText::append_text() was deprecated in gtkmm 2.24.  Replace
with Gtk::ComboBoxText::append().

References:
https://developer.gnome.org/gtkmm/2.24/classGtk_1_1ComboBoxText.html
https://gitlab.gnome.org/GNOME/gtkmm/blob/2.24.0/NEWS#L20

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci c0aa3dbfdf modern-gtk2: Always use Gtk::MessageDialog::get_message_area() (!17)
Remove check for Gtk::Messagedialog::get_message_area() and associated
fallback code as it is always available from gtkmm 2.22.

Reference:
https://gitlab.gnome.org/GNOME/gtkmm/blob/2.22.0/NEWS#L25

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 8b42bab1ee modern-gtk2: Require Gtkmm version 2.24 (!17)
Require the latest minor version of gtkmm2, released back in 2011 [1].
This is the first step in porting to Gtk3 [2].  This drops GParted
support for very old but still supported distributions:
    Distribution      EOL        Gtkmm
    RHEL / CentOS 6   2020-Nov   2.18.2
    SLES 11           2022-Mar   2.14.1

References:
[1] ANNOUNCE: gtkmm 2.24.0
    https://mail.gnome.org/archives/gtkmm-list/2011-February/msg00038.html
[2] Migrating from GTK+ 2.x to GTK+ 3 / Preparation in GTK+ 2.x
    https://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html#id-1.6.3.3

Closes !17 - Gtk2 modernisation
2018-11-12 21:50:42 +00:00
Luca Bacci 1f54ab6b12 Use Gtk::Viewport wrapper class
There is a GtkViewport wrapper class in gtkmm, Gtk::Viewport.  Make use
of that class instead of direct gtk calls.

Reference:
https://developer.gnome.org/gtkmm/2.24/classGtk_1_1Viewport.html
2018-11-12 21:50:42 +00:00
Luca Bacci bd75641842 .gitignore: Do not track compile script
Automake 1.14 also now always creates the 'compile' script.
http://git.savannah.gnu.org/cgit/automake.git/tree/NEWS?h=v1.14#n110
2018-11-12 21:50:42 +00:00
Mike Fleetwood dfb7d3e581 Enhance comment about the 3 levels of file system support
Add a little extra explaining how the file systems' supported actions
are determined.
2018-11-12 13:53:10 -07:00
Mike Fleetwood a0f97bfa19 Improve translation help for "unformatted" file system type 2018-11-12 13:53:04 -07:00
Mike Fleetwood 8a4f9ad205 Adjust shades of aquamarine, cyan and orange
The shades of aquamarine, cyan and orange didn't fit with the GNOME
32-colour palette.  Create a set of aquamarine, cyan and orange shades
which match the GNOME palette shades and update the colours of the
relevant file systems accordingly.
    Aquamarine Hilight (#97DFC7) -
    Aquamarine Medium  (#70D2B1) - NTFS
    Aquamarine Dark    (#3EA281) - REFS
    Aquamarine Shadow  (#1F7258) -
    Cyan Hilight       (#95E3E5) - EXTENDED
    Cyan Medium        (#6FCECE) -
    Cyan Dark          (#3C9899) -
    Cyan Shadow        (#166F70) -
    Orange Hilight     (#E59F6A) -
    Orange Medium      (#E58749) - BTRFS
    Orange Dark        (#C26825) - ZFS
    Orange Shadow      (#984F18) -

Note that the hues of aquamarine and cyan are quite close and for the
thin outlines of partitions used in GParted they aren't easy to
distinguish.  Hence also using different lightness to additionally
separate the colour for extended partitions from NTFS and ReFS file
systems.
2018-11-12 20:39:55 +00:00
Mike Fleetwood 69c1537a38 Recognise APFS (Apple File System) (#23)
Just add detection of APFS using GParted's internal magic string
detection.  It just matches 1 byte of the 2 byte object type and the
4 byte magic field found in the super block [1].  See code comment for
more details.

Blkid has just gained recognition of APFS with util-linux v2.33 released
06-Nov-2018 [2].

This will write enough for GParted's simple internal detection to find
APFS:
    # python -c '
    import sys
    sys.stdout.write("\0"*24 + "\1\0" + "\0"*6 + "NXSB")
    ' > /dev/sdb1

[1] Apple File System Reference
    https://developer.apple.com/support/apple-file-system/Apple-File-System-Reference.pdf

[2] [ANNOUNCE] util-linux v2.33
    https://marc.info/?l=linux-fsdevel&m=154150400305928&w=2

Closes #23 - GParted doesn't detect APFS (Apple File System)
2018-11-12 20:39:55 +00:00
Mike Fleetwood 893b67e2b8 Switch HFS and HFS Plus colours to a magenta range (#23)
Currently Linux Swap, Linux Suspend, and HFS use reds from the GNOME
32-colour palette with HFS Plus using serene red outside that palette.
    HFSPLUS       - Serene Red
    HFS           - Red Hilight
    LINUX_SWAP    - Red Medium
    LINUX_SUSPEND - Red Dark
                  - Red Shadow

Apple have a new file system, APFS (Apple File System), which is a
successor to HFS Plus [1][2].  With HFS Plus using a colour outside the
GNOME 32-colour palette and there not being enough distinct reds
available for a new file system, create a new range of magenta colours
which fit with the GNOME palette and use them for the group of Apple
file systems.
    Magenta Hilight (#D59FD4) - HFS
    Magenta Medium  (#B173B0) - HFSPLUS
    Magenta Dark    (#874986) - APFS
    Magenta Shadow  (#662C64) -

This commit just moves HFS and HFS Plus to their new magenta colours.

[1] About Apple File System
    https://developer.apple.com/documentation/foundation/file_system/about_apple_file_system

    "Overview
    Apple File System replaces HFS Plus as the default file system for
    iOS 10.3 and later, and for macOS High Sierra and later.  Apple File
    System offers improved file system fundamentals as well as several
    new features, including cloning, snapshots, space sharing, fast
    directory sizing, atomic safe-save, and sparse files.
    "

[2] Apple File System Reference
    https://developer.apple.com/support/apple-file-system/Apple-File-System-Reference.pdf

    "About Apple File System
    Apple File System is the default file format used on Apple
    platforms.  Apple File System is the successor to HFS Plus, so some
    aspects of its design intentionally follow HFS Plus to enable data
    migration from HFS Plus to Apple File System.  Other aspects of its
    design address limitations with HFS Plus and enable features such as
    cloning files, snapshots, encryption, and sharing free space between
    volumes.
    "

Closes #23 - GParted doesn't detect APFS (Apple File system)
2018-11-12 20:39:55 +00:00
Daniel Mustieles 56f1a60787 Updated Spanish translation 2018-11-02 12:43:14 +01:00
Alan Mortensen a78b407136 Updated Danish translation 2018-11-02 02:08:12 +01:00
Emin Tufan Çetin 1c75b9c07c Update Turkish translation 2018-10-21 16:52:07 +00:00
Curtis Gedak c9de37c9df Update GParted appdata file (#12)
Closes #12 - Appstream metadata needs valid license
2018-10-08 09:53:58 -06:00
Rafael Fontenelle 88871d4fec Update Brazilian Portuguese translation 2018-10-05 13:58:57 +00:00
Stas Solovey e181703417 Update Russian translation 2018-10-04 20:54:29 +00:00
Mike Fleetwood 881c28d739 Update GParted appdata file (#12)
Update appdata file to be inline with the current AppStream
specification [1].  Start by running:
    appstream-util upgrade gparted.appdata.xml.in
and then editing the appdata as wanted.  Ensure that the file passes
validation:
    appstream-util validate-relax --nonet gparted.appdata.xml.in

When Richard Hughes added the appdata file he licensed it under the
GFDL but assigned the copyright to Curtis Gedak [3].  Now change the
license to CC0-1.0 [4] as that is what most appdata files are licensed
under [5][6].  Curtis Gedak agrees to this by reviewing this change and
being the committer of this commit.

[1] AppStream specification
    https://www.freedesktop.org/software/appstream/docs/

[2] Fedora Packaging Guidelines for AppData Files
    https://fedoraproject.org/wiki/Packaging:AppData

[3] 640f92790b
    Add an AppData file (#709164)

[4] CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
    https://creativecommons.org/publicdomain/zero/1.0/

[5] Issue #12 - Appstream metadata needs valid license
    https://gitlab.gnome.org/GNOME/gparted/issues/12

[6] Merge Request !15, note 331954 - Update GParted appdata file
    https://gitlab.gnome.org/GNOME/gparted/merge_requests/15#note_331954

Closes #12 - Appstream metadata needs valid license
2018-10-01 20:29:57 +00:00
Piotr Drąg 751cd532be Update Polish translation 2018-09-23 18:13:57 +02:00
gogo 89df344f1a Update Croatian translation 2018-09-22 09:18:04 +00:00
Marek Černocký ab6b94f279 Updated Czech translation 2018-09-22 09:44:40 +02:00
Bernd Homuth 2f2042f3a9 Update German translation 2018-09-21 17:20:22 +00:00
Mike Fleetwood 39d3cd97c2 Disallow resizing btrfs if any of it's mount points are read-only (#10)
No other file system allows this, but btrfs allows simultaneous mounting
with different read-write permission.  Further, btrfs allows resizing
via read-write mounts, but not via read-only mounts.

    # mkfs.btrfs /dev/sdb1
    btrfs-progs v4.15.1
    ...
    Filesystem size:    512.00MiB
    ...
    Number of devices:  1
    Devices:
       ID        SIZE  PATH
        1   512.00MiB  /dev/sdb1

    # mount -o ro /dev/sdb1 /mnt/1
    # mount -o rw /dev/sdb1 /mnt/2
    # grep sdb1 /proc/mounts
    /dev/sdb1 /mnt/1 btrfs ro,relatime,space_cache,subvolid=5,subvol=/ 0 0
    /dev/sdb1 /mnt/2 btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0

    # btrfs filesystem resize 1:500M /mnt/1
    Resize '/mnt/1' of '1:500M'
    ERROR: unable to resize '/mnt/1': Read-only file system
    # echo $?
    1

    # btrfs file system resize 1:500M /mnt/2
    Resize '/mnt/2' of '1:500M'
    # echo $?
    0
    # btrfs filesystem show /dev/sdb1
    Label: none  uuid: 74ccd37a-e665-4f25-b77e-a305b8a025e9
            Total devices 1 FS bytes used 128.00KiB
            devid    1 size 500.00MiB used 88.00MiB path /dev/sdb1

Also with the above order of the read-only mount listed in /proc/mounts
first and the read-write mount second, GParted again allows a resize
operational to be tried, but if fails just like before:

    Grow /dev/sdb1 from 512.00 MiB to 1.0 GiB                  (ERROR)
    * calibrate /dev/sdb1                                      (SUCCESS)
    * grow partition from 512.00 MiB to 1.00 GiB               (SUCCESS)
    * grow filesystem to fill the partition                    (ERROR)
      * btrfs filesystem resize 1:max '/mnt/1'                 (ERROR)
          Resize '/mnt/1 to '1:max'
          ERROR: unable to resize '/mnt/1': Read-only file system

What happened is that the Mount_Info module only stores single read-only
flag against the mounted block device, not for each mount point, and as
the first and second sdb1 lines from /proc/mounts were processed, the
MountEntry became:

  1st)   mount_info[BS("/dev/sdb1")] -> {true , ["/mnt/1"]
  2nd)   mount_info[BS("/dev/sdb1")] -> {false, ["/mnt/1", "/mnt/2"]

So GParted thought the file system was mounted read-write, but used the
first mount point, /mnt/1, which was mounted read-only.

This is a very unusual situation so unlikely to be encountered by users.
Fix simply and safely by treating the mounted block device as mounted
read-only if any of the mount points are mounted read-only, rather than
just the last processed mount point.

Closes #10 - Gparted fails to resize btrfs partition that is mounted
             read-only
2018-09-20 16:30:15 +00:00
Mike Fleetwood f8512506ae Prevent online resizing of file systems mounted read-only (#10)
Resizing a file system mounted read-only fails.  Example:

    # mkfs.btrfs /dev/sdb1
    # mount -o ro /dev/sdb1 /mnt/1

In GParted try to resize partition sdb1.  The operation fails like this:

    Grow /dev/sdb1 from 512.00 MiB to 1.00 GiB                 (ERROR)
    * calibrate /dev/sdb1                                      (SUCCESS)
    * grow partition from 512.00 MiB to 1.00 GiB               (SUCCESS)
    * grow filesystem to fill the partition                    (ERROR)
      * btrfs filesystem resize 1:max '/mnt/1'                 (ERROR)
          Resize '/mnt/1' of '1:max'
          ERROR: unable to resize '/mnt/1': Read-only file system

See GitLab issue for the testing results of attempting to online resize
all supporting file system while mounted read-only.  No file system
allows online resizing while mounted read-only, except for reiserfs.
    Issue #10 - Gparted fails to resize btrfs partition that is mounted
    read-only
    https://gitlab.gnome.org/GNOME/gparted/issues/10

Fix by preventing online resizing of *all* file systems mounted
read-only, including reiserfs.  Instead of displaying the resize dialog
in this case, display an information dialog explaining why the partition
can't be resized.  This is similar to what happens when attempting to
create a new partition on a disk without a partition table.  The new
dialog looks like:

    (!) Unable to resize read-only file system /dev/sdb1
        The file system can not be resized while it is mounted read-only.
        Either unmount the file system or remount it read-write.
                                                                   [ OK ]

Closes #10 - Gparted fails to resize btrfs partition that is mounted
             read-only
2018-09-20 16:30:15 +00:00
Mike Fleetwood c82883d6a7 Add and set read-only mount flag in the Partition object (#10)
Set the partition read-only mount flag at the same time as setting the
file system mount points.

Closes #10 - Gparted fails to resize btrfs partition that is mounted
             read-only
2018-09-20 16:30:15 +00:00
Mike Fleetwood 441b39347a Add parsing of read-only mount option into mount maps (#10)
Parse file system mount options string from file and mount command
output, extracting the setting for the read-only flag and storing in the
mount maps.  Read-only flag for swap space gets the struct MountEntry
constructor default of false.

Closes #10 - Gparted fails to resize btrfs partition that is mounted
             read-only
2018-09-20 16:30:15 +00:00
Mike Fleetwood f4994a2b63 Add read-only flag to mounted file system entries (#10)
Just updates the 2 maps in the Mount_Info module so that they also have
a read-only flag for each mount.  Ensure that when a struct MountEntry
is created the readonly bool POD (Plain Old Data) type is initialised by
the constructor.  Nothing yet sets or uses the flag.

Closes #10 - Gparted fails to resize btrfs partition that is mounted
             read-only
2018-09-20 16:30:15 +00:00
gogo 675ad142b9 Update Croatian translation 2018-09-19 12:36:48 +00:00
Mario Blättermann 1168785014 Update German translation 2018-09-18 19:50:56 +00:00
Marek Cernocky 86acdada61 Updated Czech translation 2018-09-18 08:41:44 +02:00
Mike Fleetwood df0d4c870b White space tidy-up of Utils::get_filesystem_string()
Use smart tab alignment, list cases in enumeration order and update
translation help for unallocated space.
2018-09-17 15:36:09 +00:00
Mike Fleetwood 18bac7c927 Replace open coding FS unknown usage check in prepare_new_partition()
Back when unallocated space handling was being added, this case was not
converted from open coding to using the provided method to check for
unknown file system usage.  Specifically this commit missed using
Partition::sector_usage_known() in
Dialog_Base_Partition::prepare_new_partition():

    7ebedc4bb3
    Don't show intrinsic unallocated space (#499202)

Fix it now.
2018-09-17 15:36:09 +00:00
Mike Fleetwood 9c35d91453 Refactor get_filesystem_object()
The function was using std::map::count() [1] to test if the file system
entry existed in the map before looking up the value using
std::map::operator[] to avoid having operator[] inserting elements which
don't exist [2].

Rewrite using std::map::find() [3] so that map is only searched once,
and so that it is more obvious what is happening without having to know
the subtleties of std::map::count() and ::operator[].

[1] std::map::count()
    http://www.cplusplus.com/reference/map/map/count/

    "Searches the container for elements with a key equivalent to k and
    returns the number of matches.

    Because all elements in a map container are unique, the function can
    only return 1 (if the element is found) or zero (otherwise).
    "

[2] std::map::operator[]
    http://www.cplusplus.com/reference/map/map/operator[]/

    "If k does not match the key of any element in the container, the
    function inserts a new element with that key and returns a reference
    to its mapped value.  Notice that this always increases the
    container size by one, even if no mapped value is assigned to the
    element (the element is constructed using its default constructor).
    "

[3] std::map::find
    http://www.cplusplus.com/reference/map/map/find/

    "Searches the container for an element with a key equivalent to k
    and returns an iterator to it if found, otherwise it returns an
    iterator to map::end.
    "
2018-09-17 15:36:09 +00:00
Mike Fleetwood d3ef32096a Re-assign UFS to be a basic supported file system (!13)
There is no prospect of there being ufs-tools on Linux.  The was a
project which did release ufs-tools version 0.1 in 2004, but has been
inactive since then.
    http://ufs-linux.sourceforge.net/

Copying and moving is now implemented for file systems in the basic
supported category.  Also mounting and unmounting of unsupported file
system and reporting their usage while mounted has been added.  This is
all the support that GParted has ever implemented for UFS.  Therefore
re-assign UFS as a basic supported file system as it looses no
functionality.

Closes !13 - Support copying and moving of unsupported partition content
2018-09-17 15:36:09 +00:00
Mike Fleetwood 95903efb1f Extend un/mounting and usage reporting to unsupported file systems (!13)
For unsupported (including basic supported) file systems, also record
the mount point(s) when mounted and from /etc/fstab when not.  This
allows mounted unsupported file systems to be unmounted and ones with
/etc/fstab entries to be mounted, just like fully supported file
systems.

Also for unsupported (again including basic supported) mounted file
systems query the kernel for the usage, just like is already done for
supported file systems.

Closes !13 - Support copying and moving of unsupported partition content
2018-09-17 15:36:09 +00:00
Mike Fleetwood 4c3f4e3459 Correctly preview unknown FS usage when pasting into an existing partition (!13)
When previewing copying a partition of unknown file system usage into an
existing partition, the usage still shows that of the overwritten file
system.  This affects existing supported file systems EXFAT, F2FS, MINIX
and UFS and the new basic supported one too, all for which GParted can't
read the file system usage.

Handle the case of the source file system usage being unknown and
explicitly set the copied usage to unknown too.

Closes !13 - Support copying and moving of unsupported partition content
2018-09-17 15:36:09 +00:00
Mike Fleetwood f098cd414c Correctly preview unknown FS usage when pasting into a new partition (!13)
GParted previews copying a partition of unknown file system usage into a
new partition as 100% used.  This affects existing supported file
systems EXFAT, F2FS, MINIX and UFS and the new basic supported ones too,
all for which GParted can't read the file system usage.

When preparing the working new_partition object in the Copy / Paste
dialog, the maths for the known file system usage happened to convert
the figures of used = -1 and unused = -1 into set_sector_usage(-1, 0).
Those values passed to set_sector_usage() mean unable to query the file
system size so assume it fills the partition and unused is 0, hence 100%
used.

Fix this by specifically handling the copying of file systems with
unknown usage, setting the pasted file system usage to unknown too,
used = -1 and unused = -1.

Closes !13 - Support copying and moving of unsupported partition content
2018-09-17 15:36:09 +00:00
Mike Fleetwood 4d6d464664 Display "other" in the File System Support dialog (!13)
To display the supported actions for all basic supported file systems to
the users.

Prepare the list of file system actions in Win_GParted because calling
get_fs() for the "other" actions requires the gparted_core object and
load_filesystems() currently doesn't have access to it.  One alternative
would have been to make get_fs() and FILESYSTEMS static members of
GParted_Core class.  Another alternative would have been to pass the
gparted_core object to load_filesystems().  The chosen way seemed
simplest.

Closes !13 - Support copying and moving of unsupported partition content
2018-09-17 15:36:09 +00:00
Mike Fleetwood 9a66139eff Add "other" file system type (!13)
Want a single term under which the supported actions for all basic
supported file systems are displayed in the File System Support dialog.
"Unknown" isn't the correct adjective because the group includes
unknown, but also includes: BitLocker, GRUB2 core image, ISO9660, Linux
SWRaid, Linux Suspend, REFS and ZFS.  Add "other" file system type just
for displaying in the dialog.

Closes !13 - Support copying and moving of unsupported partition content
2018-09-17 15:36:09 +00:00
Mike Fleetwood 7a6dfb8a62 Enable copy and move for basic supported file systems (!13)
Add copy and move supported action set for each basic supported file
system.

Closes !13 - Support copying and moving of unsupported partition content
2018-09-17 15:36:09 +00:00