# Generated by Makefile. Do not edit.

2024-02-26  Curtis Gedak <gedakc@gmail.com>

    ==========   gparted-1.6.0   ==========

2024-02-26  Curtis Gedak <gedakc@gmail.com>

    Update copyright years

2024-02-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Document future Debian/Ubuntu build time dependency in README (!121)
    
    When preparing the GParted Live 1.6.0 distribution, which is based on
    Debian unstable ("sid"), compiling GParted failed like this:
        $ make
        ...
        /usr/bin/msgfmt --desktop --template gparted.desktop.in -d ./po -o gparted.desktop
        chmod +x gparted
        /usr/bin/msgfmt --xml --template org.gnome.gparted.policy.in -d ./po -o org.gnome.gparted.policy
        /usr/bin/msgfmt: cannot locate ITS rules for org.gnome.gparted.policy.in
        make[3]: *** [Makefile:1060: org.gnome.gparted.policy] Error 1
        make[3]: *** Waiting for unfinished jobs....
        make[3]: Leaving directory '/root/gparted/gparted-1.6.0-beta1'
        make[2]: *** [Makefile:618: all-recursive] Error 1
        make[2]: Leaving directory '/root/gparted/gparted-1.6.0-beta1'
        make[1]: *** [Makefile:452: all] Error 2
        make[1]: Leaving directory '/root/gparted/gparted-1.6.0-beta1'
        dh_auto_build: error: make -j16 returned exit code 2
        make: *** [debian/rules:9: build] Error 25
        dpkg-buildpackage: error: debian/rules build subprocess returned exit
        status 2
        debuild: fatal error at line 1184:
        dpkg-buildpackage -us -uc -ui failed
    
    This was also previously reported in the GParted Forum [1].  Future
    Debian 13 ("trixie") and Ubuntu 24.04 LTS ("nobel") releases have moved
    the needed gettext translation rules for .policy XML files:
        /usr/share/gettext/its/policy.its
        /usr/share/gettext/its/policy.loc
    to new package libpolkit-gobject-1-dev not installed by default.
    Document this new build time dependency.
    
    Also see commits [2][3] where the equivalent change was needed in the
    Alpine Linux and CentOS continuous integration images.
    
    [1] GParted forum / [SOLVED] Unable to build "msgfmt: cannot locate ITS
        rules for org..."
        http://gparted-forum.surf4.info/viewtopic.php?id=18136
    [2] 57ae8f888bb6f5fb8f06177a478a2374f07ee33c
        Fix .policy file translation failure in Alpine Linux CI image (!107)
    [3] 8450d8c6056a79508bdb91517eb4d8c5dc60fb35
        Fix .policy file translation failure in CentOS CI image (!107)
    
    Closed !121 - Document future Debian/Ubuntu build time dependency in
                  README

2024-02-10  Cheng-Chia Tseng <pswo10680@gmail.com>

    Update Chinese (Taiwan) translation

2023-11-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove final namespace qualifiers from use of GParted's own enums
    
    ... because it is not necessary and clutters the code.

2024-01-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove optional desktop filemanager dependency from README
    
    ... now Attempt Data Rescue has been removed and GParted no longer has
    code to show "file:/tmp/gparted-roview-XXXXXX" URIs.  Missed in earlier
    commit:
        8ce9074ac672b19f29fd7c1cdc836a874be314cd
        Remove Attempt Data Rescue and use of gpart (!118)

2024-01-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Rename Makefile.am variables to APPSTREAM*/appstream* (#241)
    
    As the AppStream 1.0 [1] specification no longer describes them as
    appdata files, but instead as metainfo files, rename the Makefile.am
    variables for consistency with the name of the standard.
    
    [1] AppStream 1.0
        https://www.freedesktop.org/software/appstream/docs/index.html
    
    Closes #241 - Move appstream metadata out of legacy path

2024-01-24  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Install AppStream file into ${datadir}/metainfo (#241)
    
    AppData files always were a subset of the AppStream specification
    [1][2].  AppStream 0.12 specification [3] onwards says the metainfo
    files will be found when placed in /usr/share/metainfo/ *AND* that
    /usr/share/appdata/ is a legacy location *AND* a future release of
    AppStream will likely drop support for it [4].
    
    Debian 10, RHEL 7 and Ubuntu 18.04 LTS distributions all have the
    /usr/share/metainfo/ directory containing application .appdata.xml and
    .metainfo.xml files.  Ubuntu 16.04 LTS does not have the directory
    despite the AppStream specification [3] claiming it does.  As old
    supported distributions do have the directory, unconditionally update
    this.
    
    For reference are these commits in projects GNOME System Monitor [4] and
    Evince [5] from 2017 making the same change.
    
    [1] AppData Specification [circa 2016]
        https://web.archive.org/web/20160903181519/https://people.freedesktop.org/~hughsient/appdata/
        "Rather than create a new schema from scratch, we'll be using a
        subset of the AppStream metadata proposal.
    
        Applications wishing to have long descriptions, screenshots and
        other useful things are required to ship one or more files in
        /usr/share/appdata/%{id}.appdata.xml.
        "
    [2] AppStream 0.4, 2.2 AppData XML files [circa 2013]
        https://web.archive.org/web/20131204004054/http://www.freedesktop.org/software/appstream/docs/sect-AppStream-Metadata-AppData.html
    [3] AppStream 0.12, 2.1.2 Filesystem locations [circa 2020]
        https://web.archive.org/web/20200615042130/https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#spec-component-location
        "2.1.2 Filesystem locations
    
        Upstream projects can ship one or more metainfo files in
        /usr/share/metainfo/%{id}.metainfo.xml, where id is a unique
        identifier of this specific component.
    
        (>) Note
        Component metadata of type desktop-application as described in
        Section 2.2, "Desktop Applications" can be installed with an
        .appdata.xml extension as well for historical reasons.  AppStream
        implementations will read the XML files as long as they end up in
        the right location on the filesystem.
    
        (!) Important: Legacy Path
        AppStream tools scan the /usr/share/appdata/ path for legacy
        compatibility as well.  It should not be used anymore by new
        software though, even on older Linux distributions (like RHEL 7 and
        Ubuntu 16.04 LTS) the metainfo path is well supported.  Support for
        the legacy path will likely be dropped completely with a future
        AppStream 1.0 release.
        "
    [4] [GNOME System Monitor] Install appdata to the new location
        (bgo#790146)
        https://gitlab.gnome.org/GNOME/gnome-system-monitor/-/commit/43dc0577712a6cd0979e4d85ec5196d507bd6e80
    [5] [Evince] build: Install appstream metadata to non-deprecated
        location
        https://gitlab.gnome.org/GNOME/evince/-/commit/8cae24ea48deafc85265ce42adecb55aa2b57a6f
    
    Closes #241 - Move appstream metadata out of legacy path

2024-02-07  Daniel Rusek <mail@asciiwolf.com>

    Update Czech translation

2024-01-30  Daniel Mustieles <daniel.mustieles@gmail.com>

    Updated Spanish translation

2024-01-26  Fran Dieguez <frandieguez@gnome.org>

    Update Galician translation

2024-01-20  Danial Behzadi <dani.behzi@ubuntu.com>

    Update Persian translation

2023-12-28  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2023-11-30  Juliano de Souza Camargo <julianosc@protonmail.com>

    Update Brazilian Portuguese translation

2023-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor xfs::set_used_sectors() into if fail return early pattern (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor reiserfs::set_used_sectors() into if fail return early pattern (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor reiser4::set_used_sectors() into if fail return early pattern (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor nilfs2::set_used_sectors() into if fail return early pattern (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Refactor ext2::set_used_sectors() into if fail return early (!119)
    
    ... code pattern.  This is to make the code easier to understand by not
    having to remember if condition context for indented code over longer
    distances.  This has been done before.  Here are just 2 examples:
    
    [1] 75bda733bbfcc00cf0cee8a2efca536f5a183f94
        Refactor run_blkid_load_cache() into if fail return early (#131)
    [2] 407e0ac6e3922306133b24359e997b637599f2b3
        Refactor fat16::read_label() into if fail return early pattern (!104)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-10  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove now unused T, N & S FileSystem member variables (!119)
    
    Now those member variables are unused remove them.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in xfs class (!119)
    
    Restructure the variable parsing code into "if leading text found then
    scan the number" pattern.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in reiserfs class (!119)
    
    Restructure the variable parsing code into "if leading text found then
    scan the number" pattern.
    
    Anchor leading text matches to the start of a new line in the output.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in reiser4 class (!119)
    
    Restructure the variable parsing code into "if leading text found then
    scan the number" pattern.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in nilfs2 class (!119)
    
    And restructure the variable parsing code into "if leading text found
    then scan the number" pattern.
    
    Anchor leading text matches to the start of a new line in the output.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T & N in linux_swap, luks & lvm2_pv classes (!119)
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using member variables T, N & S in ext2 class (!119)
    
    FileSystem member variables T, N & S are being used like local variables
    in many of the file system specific set_used_sectors() methods.  They
    are only used within each set_used_sectors() call and not used to
    represent persistent information of a FileSystem interface class or to
    pass information between separate methods.  Therefore stop using them
    and replace them with local variables instead.
    
    This block of code finds a field in the output and scans the number:
        Glib::ustring::size_type index = output.find("Block count:");
        if (index >= output.length() ||
            sscanf(output.substr(index).c_str(), "Block count: %lld", &T) != 1)
                T = -1;
    The if statement says "if leading text is not found or scanning the
    number fails then assign -1".  A sequence of two negatives leading to
    assigning an error value is hard to understand.  Instead this an
    equivalent block from btrfs::set_used_sectors():
        long long total_bytes = -1;
        Glib::ustring::size_type index = output.find("\ntotal_bytes");
        if (index < output.length())
                sscanf(output.substr(index).c_str(), "\ntotal_bytes %lld", &total_bytes);
    This assigns a default error value and the if statement says "if leading
    text found then scan the number".  Much simpler to understand.
    Therefore change the code around to use this same pattern.
    
    Anchor the leading text matches to the start of a new line in the
    output where possible.  Just because it's what some of the other file
    system's set_used_sectors() methods do (btrfs, reiser4 and xfs) and it
    seems like more robust text matching.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-14  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using floating point calculation in most FS set_used_sectors() methods (!119)
    
    Replace floating point calculation to convert size and space figures
    from file system block sized units to sectors with an integer
    calculation.  Do this for the same reasons discussed in commit "Stop
    using floating point calculations in FS resize() methods" earlier in
    this patchset.  This will limit the largest file system that GParted can
    read the usage of to 8 EiB - 1 bytes.
    
    There is still a floating point calculation in btrfs::set_used_sectors()
    which is being left because that is apportioning used space figure
    between multiple devices.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-09  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reorder construction of ext2/3/4 resize command (!119)
    
    So that it is similar to other calls to execute_command() and for grep
    friendliness.
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-08  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Reorder construction of nilfs2 resize command  (!119)
    
    Pass string literal containing the nilfs2 resize command to
    execute_command() rather than a string variable containing the same
    command.  This makes it the same as how most of the other calls to
    execute_command() are written and it makes it more grep friendly.
    
    Before:
        $ grep execute_command src/nilfs2.cc
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            return ! execute_command( "nilfs-tune -L " + Glib::shell_quote( partition.get_filesystem_label() ) +
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            return ! execute_command( "nilfs-tune -U " + Glib::shell_quote( Utils::generate_uuid() ) +
            return ! execute_command( "mkfs.nilfs2 -L " + Glib::shell_quote( new_partition.get_filesystem_label() ) +
                success &= ! execute_command( "mount -v -t nilfs2 " + Glib::shell_quote( partition_new.get_path() ) +
    >>          success &= ! execute_command( cmd, operationdetail, EXEC_CHECK_STATUS );
                    success &= ! execute_command( "umount -v " + Glib::shell_quote( mount_point ),
    
    After:
        $ grep execute_command src/nilfs2.cc
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            return ! execute_command( "nilfs-tune -L " + Glib::shell_quote( partition.get_filesystem_label() ) +
            if ( ! Utils::execute_command( "nilfs-tune -l " + Glib::shell_quote( partition.get_path() ),
            return ! execute_command( "nilfs-tune -U " + Glib::shell_quote( Utils::generate_uuid() ) +
            return ! execute_command( "mkfs.nilfs2 -L " + Glib::shell_quote( new_partition.get_filesystem_label() ) +
                success &= ! execute_command( "mount -v -t nilfs2 " + Glib::shell_quote( partition_new.get_path() ) +
    >>          success &= ! execute_command("nilfs-resize -v -y " + Glib::shell_quote(partition_new.get_path()) + size,
                    success &= ! execute_command( "umount -v " + Glib::shell_quote( mount_point ),
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-07  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop using floating point calculations in FS resize() methods (!119)
    
    A number of the file system specific resize() methods use floating point
    calculations to convert from the new partition size in sectors to the
    new file system size to be passed to the resize command in bytes or
    kibibytes.  This is bad because there could be rounding errors
    converting from integer to floating point, performing the calculation
    and converting back.  Replace with integer only multiply and divide
    calculations.  Integer division always truncates [1] which is exactly
    what is needed.  The largest integer will be the size of the file system
    in bytes held in a signed 64-bit long long, or Sector or Byte_Value
    typedef of the same type.  This will limit the size that a file system
    can be shrunk to, to 8 EiB - 1 byte.
    
    [1] C++ Arithmetic operators
        https://en.cppreference.com/w/cpp/language/operator_arithmetic
            "the algebraic quotient of integer division is truncated towards
            zero (fractional part is discarded)"
    
    Closes !119 -  Tidy-ups for file system interface classes

2023-10-22  Sergej A <asvmail.as@gmail.com>

    Update Russian translation

2023-10-21  Florentina Mușat <florentina.musat.28@gmail.com>

    Update Romanian translation

2023-10-19  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2023-10-12  Alan Mortensen <alanmortensen.am@gmail.com>

    Update Danish translation

2023-10-05  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2023-09-28  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Write file system type as "[Encrypted] FSTYPE" to saved details
    
    The GUI displays the file system of an open encrypted file system as
    "[Encrypted] FSTYPE" [1].  However saved details just writes the file
    system type as "luks".  Update saved details writing code to use the
    same method the GUI currently uses [2].
    
    [1] commit cb3cc505ce89d6f6fbb488defa826a389ae86cdc
        Display "[Encrypted] FSTYPE" in the File System column (#760080)
    
    [2] commit bd6fc67afb772ffa11ac904e3a7130f2253daa66
        Provide virtual Partition::get_filesystem_string() method (#774818)

2023-09-29  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increment GParted Manual version

2023-09-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove Attempt Data Rescue from the GParted Manual (!118)
    
    Keep the paragraph discussing photorec and move just after testdisk is
    mentioned in the Recovering Partition Tables section.
    
    Closes !118 - Remove Attempt Data Rescue and use of gpart

2023-09-25  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Remove Attempt Data Rescue and use of gpart (!118)
    
    gpart scans a drive trying to guess the location of partitions when an
    MBR partition table is lost [1].  However the tool is unmaintained,
    takes hours or days of 100% CPU time to scan a drive and provides no
    progress indication [2][3][4].  We keep recommending killing the gpart
    process and using TestDisk [5] instead.
    
    Therefore remove Device > Attempt Data Rescue and the use of gpart from
    GParted.
    
    [1] Gpart
        https://github.com/baruch/gpart
    [2] Have you had a good or bad experience with Dev->Attempt Data Rescue?
        http://gparted-forum.surf4.info/viewtopic.php?id=17992
        No good, only bad experiences using gpart were reported.
    [3] Gparted does not say anything
        http://gparted-forum.surf4.info/viewtopic.php?id=17749
        Forum user reported waiting 48 hours with no progress indication.
        We recommended using TestDisk.
    [4] How cancel Data Rescue process?
        http://gparted-forum.surf4.info/viewtopic.php?id=18143
        Forum user reported it will take 3 days to scan their external 480GB
        drive.  We recommended using TestDisk instead.
    [5] TestDisk, Data Recovery
        https://www.cgsecurity.org/wiki/TestDisk
    
    Closes !118 - Remove Attempt Data Rescue and use of gpart

2023-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Replace deprecated Google Test API INSTANTIATE_TEST_CASE_P() (!117)
    
    When compiling the tests, this warning is reported:
    
        $ make check
        ... warning: ...: INSTANTIATE_TEST_CASE_P is deprecated, please use INSTANTIATE_TEST_SUITE_P [-Wdeprecated-declarations]
           static_assert(::testing::internal::InstantiateTestCase_P_IsDeprecated(), \
                                              ^
        test_SupportedFileSystems.cc:625:1: note: in expansion of macro 'INSTANTIATE_TEST_CASE_P'
    
    Google Test 1.10.0 release notes [1] say:
        High Level Changes:
        This release deprecated "....TEST_CASE" API in favor of
        "....TEST_SUITE".  In a nutshell if you have code that uses
        something like "INSTANTIATE_TYPED_TEST_CASE_P " - this and all other
        "*_TEST_CASE " are now deprecated in favor of more standard
        _TEST_SUITE.
    
    Replace the deprecated API with the new API.
    
    [1] Google Test release v1.10.0
        https://github.com/google/googletest/releases/tag/release-1.10.0
    
    Closes !117 - Require C++11 compilation

2023-09-03  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Update to Google Test 1.10.0 (!117)
    
    So far GParted includes Google Test 1.8.1 [1], which was the latest
    release which supported pre-C++11 compilers [2].  Now that GParted
    requires C++11 compilation, update to Google Test 1.10.0.  Replace the
    following files and directories from Google Test 1.10.0:
        LICENSE
        README.md
        include/
        src/
    Note the LICENSE file is identical, where as the other files have
    changed.  This includes file additions and removals, hence the change
    to Makefile.am too.
    
    Even though Google Test releases up to and including 1.12.1 are
    compilable with C++11 compilers [3], it is not possible to upgrade
    beyond Google Test 1.10.0 at this time because later releases fail to
    compile on on still supported RHEL / CentOS 7 with this error:
    
        $ cd lib/gtest
        $ make check
        ...
        ./include/gtest/gtest-matchers.h:414:12: error: 'is_trivially_copy_constructible' is not a member of 'std'
                    std::is_trivially_copy_constructible<M>::value &&
                    ^
    
    This failure turns out to be because GCC libstdc++ 4.8.5 doesn't include
    is_trivially_copy_constructible et al [4][5].
    
    [1] commit 2b222978f5e68964a3fa6d9e05e56bfdf6ab0526
        Update to Google Test 1.8.1
    [2] Google Test release v1.8.1
        https://github.com/google/googletest/releases/tag/release-1.8.1
        "The 1.8.x is the last release supporting pre-C++11 compilers."
    [3] Google Test release v1.12.1
        https://github.com/google/googletest/releases/tag/release-1.12.1
        "This will be the last release to support C++11.  Future releases
        will require at least C++14."
    [4] 'is_trivially_copyable' is not a member of 'std'
        https://stackoverflow.com/questions/25123458/is-trivially-copyable-is-not-a-member-of-std/25123551#25123551
        "Some of them are not implemented.  If we look at libstdc++'s C++11
        status page:
        Type properties are listed as partially implemented.
        They list as missing:
        ...
        is trivially_copy_constructible
        "
    [5] The GNU C++ Library, 1. Status, C++11
        https://gcc.gnu.org/onlinedocs/gcc-4.8.3/libstdc++/manual/manual/status.html#status.iso.2011
        "
        | Section  | Description     | Status  | Comments
        ...
        | 20.9.4.3 | Type properties | Partial | Missing
        is_trivially_copyable, is_trivially_constructible,
        is_trivially_default_constructible, is_trivially_copy_constructible,
        is_trivially_move_constructible, is_trivially_assignable,
        is_trivially_default_assignable, is_trivially_copy_assignable,
        is_trivially_move_assignable |
        "
    
    Closes !117 - Require C++11 compilation

2023-09-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    C++11: Also convert NULL to nullptr in unit tests (!117)
    
    Closes !117 - Require C++11 compilation

2023-08-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    C++11: Convert NULL to nullptr (!117)
    
    In C++11, nullptr [1] is the strongly typed value to use instead of the
    macro NULL [2].  Use everywhere [3][4].
    
    [1] nullptr, the pointer literal (since C++11)
        https://en.cppreference.com/w/cpp/language/nullptr
    [2] NULL
        https://en.cppreference.com/w/cpp/types/NULL
    [3] Bjarne Stroustrup's C++ Style and Technique FAQ, Should I use NULL
        or 0?
        https://www.stroustrup.com/bs_faq2.html#null
            "In C++, the definition of NULL is 0, so there is only an
            aesthetic difference.  I prefer to avoid macros, so I use 0.
            Another problem with NULL is that people sometimes mistakenly
            believe that it is different from 0 and/or not an integer.  In
            pre-standard code, NULL was/is sometimes defined to something
            unsuitable and therefore had/has to be avoided.  That's less
            common these days.
    
            If you have to name the null pointer, call it nullptr; that's
            what it's called in C++11.  Then, "nullptr" will be a keyword.
            "
    [4] What is nullptr in C++? Advantages, Use Cases & Examples
        https://favtutor.com/blogs/nullptr-cpp
            "Advantages of nullptr
            ...
            Compatible: Null pointers are compatible with null pointer
            constants in the C style (such as NULL and 0).  This implies
            that old C code that uses these constants and null pointers can
            communicate with each other in C++.
            "
    
    Closes !117 - Require C++11 compilation

2023-08-31  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Increase minimum required gtkmm to 3.18.0 (!117)
    
    As discussed in the previous commit the oldest supported distributions
    now provide gtkmm versions higher that 3.18.0 (which requires C++11
    compilation).  Therefore increase the minimum required version to gtkmm
    3.18.0.  This allows removal of HAVE_LABEL_SET_XALIGN autoconf
    definition and associated fallback code.
    
    Closes !117 - Require C++11 compilation

2023-08-30  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Always require C++11 compilation (!117)
    
    All the oldest supported distributions now have versions of GTK C++
    libraries which require C++11 compilation, therefore forcing GParted to
    require C++11 compilation [1][2][3].  Fragment of existing ./configure
    output which lists the library versions requiring C++11 compilation:
    
        $ ./configure
        ...
        checking for glibmm >= 2.45.40 which requires C++11 compilation... yes
        checking for libsigc++ >= 2.5.1 which requires C++11 compilation... yes
        checking for gtkmm >= 3.18.0 which requires C++11 compilation... yes
        checking whether g++ supports C++11 features with -std=gnu++11... yes
    
    The oldest supported distributions and their versions of GTK C++
    libraries and GCC compiler:
    
        Distribution        gtkmm    glibmm   libsigc++   gcc
    
        Debian 10           3.24.0   2.58.0   2.10.1      4.8.3
        RHEL / CentOS 7.9   3.22.2   2.56.0   2.10.0      4.8.5
        SLES 12 SP5         3.20.1   2.48.1   2.8.0       4.8
        Ubuntu 20.04 LTS    3.24.2   2.64.2   2.10.2      9.3.0
    
    Technically GCC didn't have full C++11 support until GCC 4.8.1 [6] and
    SLES 12 SP5 only has GCC 4.8 (as well as many later versions of GCC).
    However which ever version of the GCC compiler is being used to compile
    the GTK C++ libraries it must have all the features needed to compile
    those libraries.
    
    Simplify the configure script and just always require a C++11 capable
    compiler.  This also allows the use of C++11 features in the GParted
    code.
    
    [1] commit cc0740148e6ba0da9e30608deea2aa13078c2584
        port-to-gtk3: Switch to Gtkmm3 (#7)
    [2] commit 707bae6fed6783e84600c6143f0f4bfd7989f56f
        Enable C++11 compilation when using libsigc++ 2.5.1 and later (#758545)
    [3] commit d6d7cb2bbf2fc381b890f63bbbf626eacfc8cdf8
        Enable C++11 compilation when using glibmm 2.45.40 and later (#756035)
    [4] SUSE Product Support Lifecycle, SUSE Linux Enterprise Server 12
        https://www.suse.com/lifecycle/#suse-linux-enterprise-server-12
    [5] SUSE package search
        https://scc.suse.com/packages?name=SUSE%20Linux%20Enterprise%20Server&version=12.5&arch=x86_64&query=&module=
    [6] C++ Standards Support in GCC, C++11 Support in GCC
        https://gcc.gnu.org/projects/cxx-status.html#cxx11
    
    Closes !117 - Require C++11 compilation

2023-09-03  Daniel Rusek <mail@asciiwolf.com>

    Update Czech translation

2023-09-02  Luming Zh <lumingzh@qq.com>

    Update Chinese (China) translation

2023-08-28  Danial Behzadi <dani.behzi@ubuntu.com>

    Update Persian translation

2023-08-20  Baurzhan Muftakhidinov <baurthefirst@gmail.com>

    Update Kazakh translation

2023-08-18  Sabri Ünal <libreajans@gmail.com>

    Update Turkish translation

2023-06-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add missing .gitignore entry for test_EraseFileSystemSignatures

2023-08-06  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Also find system default udev rules in /usr/lib/udev/rules.d (!116)
    
    When blanking of udev rules was first tested [1][2] and added [3] all
    the distributions at the time (CentOS 6, Debian 6, Fedora 19,
    openSUSE 12.2, Ubuntu 12.04 LTS) stored the system default rules in
    directory /lib/udev/rules.d.  Now most distributions (CentOS Stream 9,
    Debian 11, Fedora 38, Ubuntu 22.04 LTS, openSUSE Leap 15.4) store the
    system default rules in directory /usr/lib/udev/rules.d.  Most of these
    distributions have a merged /usr file system [4][5] so /lib is a symlink
    to /usr/lib and the system default rules can still found using the
    original directory.  But openSUSE 15.4 doesn't have a merged /usr so the
    gparted shell wrapper doesn't find the system default rules in directory
    /usr/lib/udev/rules.d and doesn't prevent auto starting of Linux
    Software RAID arrays and bcache devices during a storage probe.
    
    An extra consideration is that Alpine Linux 3.17 doesn't have a merged
    /usr file system, but has both /lib/udev/rules.d and
    /usr/lib/udev/rules.d directories with different rules files.  Therefore
    fix this by checking for system default udev rules in both directories.
    
    [1] Bug 709640 - Linux Swap Suspend and Software RAID partitions not
        recognised, comment 7
        https://bugzilla.gnome.org/show_bug.cgi?id=709640#c7
    [2] Bug 709640 - Linux Swap Suspend and Software RAID partitions not
        recognised, comment 12
        https://bugzilla.gnome.org/show_bug.cgi?id=709640#c12
    [3] a255abf3432ad106fac9c766f0816ada20be8e42
        Prevent GParted starting stopped Linux Software RAID arrays (#709640)
    [4] The Case for the /usr Merge
        http://0pointer.de/blog/projects/the-usr-merge
    [5] The Case for the /usr Merge
        https://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge/
    
    Closes !116 - Systemd mount masking and udev rule location updates

2023-08-02  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Avoid masking/unmasking the empty list of mount units (!116)
    
    After the previous commit "Stop masking the root file system mount
    unit", GParted now reports this error to the terminal on Debian 10 and
    11:
        # gparted
        To few arguments.
        GParted 1.5.0-git
        configuration --enable-online-resize
        libparted 3.2
    
    Debian installations, at least on PC hardware and using BIOS booting so
    they don't have a /boot/efi file system, only have a single file system,
    / (root).  That is now excluded from masking so gparted shell wrapper
    runs systemctl without any mount units to mask.  Hence the error.
        # systemctl --runtime mask --quiet --
        Too few arguments.
        # echo $?
        1
    
    Fix this by only masking and unmasking units when the list of mounts
    is non-empty.
    
    Closes !116 - Systemd mount masking and udev rule location updates

2023-08-05  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Stop masking the root file system mount unit (!116)
    
    Masking the root file system (-.mount) unit lead to a Debian package
    upgrade failing as reported here [1].  This was fixed in systemd 245
    [2][3] by not allowing perpetual units to be masked.  As the root file
    system can't be mounted or unmounted while GParted is running, it
    doesn't need to be prevented by masking the unit.  Therefore stop
    masking the root file system mount unit.
    
    [1] Debian bug #948710 -  handle masked .mount unit more gracefully
        https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=948710
    [2] systemd issue #14550 - Handle masked .mount units more gracefully
        https://github.com/systemd/systemd/issues/14550
    [3] core: never allow perpetual units to be masked
        https://github.com/systemd/systemd/commit/88414eed6f45f738ae765d9f72d67c6dc5a51950
    
    Closes !116 - Systemd mount masking and udev rule location updates

2023-08-01  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Add fallback of removing systemd mount unit masks directly (!116)
    
    On RHEL / CentOS 8 GParted reports this error to the terminal when it is
    closed:
        # gparted
        GParted 1.5.0-git
        configuration --enable-online-resize
        libparted 3.2
    >>  --runtime cannot be used with unmask
        # $?
        0
    
    and leaves mount units masked:
        # systemctl list-units '*.mount'
          UNIT                  LOAD   ACTIVE SUB     DESCRIPTION
          ------------------------------------------------------------------
        * -.mount               masked active mounted Root Mount
        * boot.mount            masked active mounted boot.mount
          ...
    
    This is because of this change [1] released in systemd 239.  Systemd bug
    9393 [2] was raised and the change was reverted [3] in systemd 240.
    According to repology.org only RHEL / CentOS 8 (and clones) and Fedora
    29 shipped with systemd 239 [4].
    
    Fix by detecting non-zero exit status from systemctl and falling back to
    directly removing the runtime mount unit mask files instead.  Then have
    to use systemctl daemon-reload to inform systemd to reload it's
    configuration from disk to discover the masks have been removed.
    
    [1] systemctl: when removing enablement or mask symlinks, cover both
        /run and /etc
       https://github.com/systemd/systemd/commit/4910b35078ad24dcbc63f372b2fee087640201d0
    [2] systemctl no longer allows unmask in combination with --runtime
        #9393
        https://github.com/systemd/systemd/issues/9393
    [3] Revert "systemctl: when removing enablement or mask symlinks, cover
        both /run and /etc"
        https://github.com/systemd/systemd/commit/1830ac51a4ad1d82a198e587207df451b581c821
    [4] Versions for systemd
        https://repology.org/project/systemd/versions
    
    Closes !116 - Systemd mount masking and udev rule location updates

2023-07-25  Balázs Úr <balazs@urbalazs.hu>

    Update Hungarian translation

2023-07-15  Yosef Or Boczko <yoseforb@gnome.org>

    Update Hebrew translation

2023-07-14  Jürgen Benvenuti <jbenvenuti@gnome.org>

    Update German translation

2023-07-11  Sergej A <asvmail.as@gmail.com>

    Update Russian translation

2023-07-09  Kukuh Syafaat <kukuhsyafaat@gnome.org>

    Update Indonesian translation

2023-07-02  Hugo Carvalho <hugokarvalho@hotmail.com>

    Update Portuguese translation

2023-06-29  Anders Jonsson <anders.jonsson@norsjovallen.se>

    Update Swedish translation

2023-06-25  Yuri Chornoivan <yurchor@ukr.net>

    Update Ukrainian translation

2023-06-25  Piotr Drąg <piotrdrag@gmail.com>

    Update Polish translation

2023-06-24  Ekaterine Papava <papava.e@gtu.ge>

    Update Georgian translation

2023-06-24  Marcin Zepp <nircek-2103@protonmail.com>

    Fix crash when dealing with 0000-0000 exfat UUID (!115)
    
    GParted crashes when blkid doesn't provide the UUID of the exfat
    partition and its serial has preceding zeroes (and it isn't mounted).
    
    blkid doesn't report UUID if the serial number is 0000-0000 (a.k.a.
    0x0).
    
    Steps to reproduce:
    
        # truncate -s 4M /tmp/disk.img
        # losetup -f --show /tmp/disk.img
        /dev/loop0
        # mkfs.exfat /dev/loop0
        [...]
        exFAT format complete!
        # partprobe /dev/loop0
        # blkid /dev/loop0
        /dev/loop0: UUID="F7BF-ABFF" BLOCK_SIZE="512" TYPE="exfat" PTTYPE="dos"
        # exfatlabel /dev/loop0 -i 0x0
        exfatprogs version : 1.1.3
        New volume serial : 0x0
        # blkid /dev/loop0
        /dev/loop0: BLOCK_SIZE="512" TYPE="exfat" PTTYPE="dos"
        # gparted /dev/loop0
        GParted 1.3.1
        configuration --enable-libparted-dmraid --enable-online-resize
        libparted 3.4
    
        ** (gpartedbin:94926): ERROR **: 10:45:01.894:
        unhandled exception (type std::exception) in signal handler:
        what: basic_string::assign: __pos (which is 18446744073709551615) > this->size() (which is 3)
    
        Trace/breakpoint trap (core dumped)
        # losetup -d /dev/loop0; rm /tmp/disk.img
    
    As blkid doesn't report exfat UUID 0000-0000 FS_Info cache can't report
    it so exfat::read_uuid() is called.  Then `tune.exfat -i /dev/loop0` is
    executed:
    
            # tune.exfat -i /dev/loop0
            exfatprogs version : 1.1.3
            volume serial : 0x0
    
    And exfat::serial_to_blkid_uuid() is called with "0x0", which causes a
    crash.  Fix by safely handling volume serial numbers of any length,
    specifically shorter than 8 hexadecimal digits.
    
    Closes !115 - Fix crash when dealing with 0000-0000 exfat UUID

2023-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return constant reference from ProgressBar::get_text()
    
    get_text() only performs const access on the ProgressBar object so
    return the member string by constant reference.
    
    Previously done for other string returning getters, even though the
    value is assigned to a variable and doesn't save anything:
        1f6e81295b5190a0a67daf9e85b4206faafb725e
        Return constant reference from OperationDetail::get_description() (!94)

2023-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Return const reference from OperationDetail::get_progressbar()
    
    The only use of the reference returned from
    OperationDetail::get_progressbar() is to call const methods
    ProgressBar::running(), ::get_fraction() and ::get_text().  Therefore
    make OperationDetail::get_progressbar() return a const reference.

2023-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Generate time remaining text for fraction complete progress bars
    
    As described in the previous commit "Clear progress bar text when
    starting the bar (#230)" progress bar data is either reporting bytes
    copied or fraction complete.  The bytes copied case gets in progress
    text like this:
        544.00 MiB of 1.00 GiB copied (00:00:11 remaining)
    
    But the fraction complete gets no text.
    
    Now also generate time remaining text for progress bars only reporting
    fraction complete.  As with the bytes copied text only add the time
    remaining estimate after 5 seconds have passed.  Looks like:
        (00:01:59 remaining)
    
    This is most useful for NTFS partition copy and resize operations which
    can take a while depending on the amount of data involved.

2023-06-12  Mike Fleetwood <mike.fleetwood@googlemail.com>

    Clear progress bar text when starting it (#230)
    
    These operations use steps which generate progress bar bytes copied
    information text:
    * Partition move or copy using GParted's internal block copy
    * EXT2/3/4 partition move or copy
    * XFS partition copy
    The bytes copied text looks like this (after the copy completes and the
    time remaining is no longer included):
        1.00 GiB of 1.00 GiB copied
    
    And these operations use steps which generate progress bar information
    without text (because the progress bar data only represents a fraction
    complete):
    * EXT2/3/4 partition resize
    * EXT2/3/4 partition create
    * EXT2/3/4 partition format
    * EXT2/3/4 partition check
    * NTFS partition resize
    * NTFS partition copy
    
    In the Applying pending operations dialog, while an operation is being
    applied there are 2 progress bars.  The top progress bar displays either
    a pulse bar or the progress bar data for the current step.  Additionally
    for the relevant steps the progress bar generates the bytes copied text.
    This text, when available, is displayed in small grey characters just
    above the progress bar itself.
    
    Copy a FAT partition and apply.  Bytes copied text is displayed just
    above the top progress bar.  Copy an NTFS partition and apply.  The left
    behind bytes copied text from the previous operation is displayed,
    instead of nothing.
    
    Restart GParted and copy an NTFS partition and apply.  As intended, this
    time there is no bytes copied text displayed just above the top progress
    bar.
    
    As there is just a single ProgressBar object, single_progressbar, fix
    this by clearing the progress bar text each time it is started.
    
    Closes #230 - Missing progress bar text reset when applying operation

2023-06-06  Olga Smirnova <mistresssilvara@hotmail.com>

    Add Interlingue translation
