Getting startup folders
Use a set

Sets guaranty the unicity of the items it holds, adding the same item twice will result in the second add doing nothing:

def get_startup_folders(self):
    folders = set()
    for item in STARTUP_FOLDERS:
        if item == "home":
            folders.add(self.home_folder)
        elif item == "file":
            folders.add(self.file_folder)
        elif item == "project":
            folders.update(self.project_folders)
        elif item == "user":
            folders.update(self.user_folders)

    # Fail-safe: If empty then use the home folder as a fall back;
    # self.home_folder is guaranteed to contain the home folder.
    if not folders:
        folders.add(self.home_folder)

    return folders
    # or if you trully need a list: return list(folders)




If order matters, there is no such thing as OrderedSet, but collections.OrderedDict should be close enough. You just need to handle values that you won't keep:

import itertools
from collections import OrderedDict

def get_startup_folders(self):
    folders = OrderedDict()
    for item in STARTUP_FOLDERS:
        if item == "home":
            folders[self.home_folder] = None
        elif item == "file":
            folders[self.file_folder] = None
        elif item == "project":
            folders.update(zip(self.project_folders, itertools.repeat(None)))
        elif item == "user":
            folders.update(zip(self.user_folders, itertools.repeat(None)))

    # Fail-safe: If empty then use the home folder as a fall back;
    # self.home_folder is guaranteed to contain the home folder.
    if not folders:
        return [self.home_folder]

    return list(folders.keys())