A partition is a segment of the disk, not a combination of segments. Since the home partition is at the end of the disk, and the root partition is immediately before it, there's no room to extend the home partition.
You can extend mounted partitions, but not move mounted partitions around. So you should work from a live system.
You can move the home partition into the free space; then you'll be able to enlarge it to ~44GB. But rather than just move the partition, I recommend that you switch your Linux partitions to LVM (see also the Archi wiki). LVM is a partition system that's a lot more flexible than the basic MBR/UEFI system; its only downside is that it's specific to Linux, so it normally lives inside an MBR/UEFI partition. If you'd used LVM, you could have enlarged that home partition very easily.
From a live system:
Run fdisk to:
- Remove the swap partition. We'll re-create it afterwards.
- Create a partition of type “Linux LVM” in the free space. Give it the number 5.
Create an LVM physical volume on the new partition. An LVM physical volume is space on a disk for LVM partitions.
pvcreate /dev/sda5
Create an LVM volume group. A volume group relates physical volumes (disk segments) to logical volumes (containers for a filesystem or swap space). Here arch is the name of the group, feel free to pick a different name.
vgcreate arch /dev/sda5
Create logical volumes to move your root and home filesystems into LVM, and for the swap space. Make sure that the root and home volumes are at least as large as the existing filesystems. Beware that GParted is evil: it rounds filesystem sizes, so if you use what it displays, you risk losing a bit of data at the end, which could make the filesystem unrecoverable. Use the real size information.
grep sda[67] /proc/partitions # shows partition sizes in kB
lvcreate -L "$(awk '$4=="sda6" {print $3}' /proc/partitions)k" -n root arch
cat /dev/sda6 >/dev/arch/root
lvcreate -L "$(awk '$4=="sda7" {print $3}' /proc/partitions)k" -n home arch
cat /dev/sda7 >/dev/arch/home
lvcreate -L 24g -n swap arch
Mount the new location of the home and root partitions, to make sure that the copy is fine.
mkdir /media/root /media/home
mount /dev/arch/root /media/root
mount /dev/arch/home /media/home
# Check that both filesystems look fine
Edit /etc/fstab and make sure that it's using valid references to your partitions. If you're using UUIDs or labels, you can keep using that. If you were using partition numbers, you must change that. You can use the LVM device locations, they're stable: /dev/arch/root and /dev/arch/home.
I don't know how Arch Linux sets up its booting system. On some distributions, you need to regenerate the second-stage bootloader and the initramfs to include LVM support. On Arch, it seems that you need to add lvm2 to /etc/mkinitcpio.conf and regenerate the initramfs.
You don't need the old space with the home and root partitions anymore. You can reuse them for LVM by creating an LVM physical volume in them (pvcreate /dev/sda6 /dev/sda7) and adding those physical volumes to the existing volume group (vgextend arch /dev/sda6 /dev/sda7). After that, if you ever want to extend your filesystems, you can call lvextend without worrying about location: it'll use free space anywhere in the volume group to extend the logical volume, then call resize2fs to enlarge the filesystem.